I'm creating a board game. It has 81 Squares, and I've created 81 empty gameobjects with colliders (triggers). The squares live in a List show in the image in the inspector and each has a value of 0 through 4. The color enum is pointless at the moment. I think. I'm trying to click on the square and have it return in the log that it was clicked and what the value of the square is. Later Ill be validating the moves by checking the value of the square the player clicked on their previous turn, and instantiating a game piece if valid, but I just want to make the clicks work at this point. I've hunted exhaustively and can't find how to do this with a List. I can get it to return the value with a script attached to the square prefab. Maybe I'm doing the whole thing wrong. I feel as though I should be able to assign the attributes of each square in the List within the gamecontroller script without having to use a script attached to the square prefab. The board itself is just a sprite. The Debug.Log in start is there because i just wanted anything to happen. lol Code is below along with image of Board. Code (CSharp): using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameController : MonoBehaviour { public square squareScript; public GameObject playerXGamePiece; public GameObject playerOGamePiece; public int PlayerX = 0; public int PlayerO = 1; public bool isPlayerXTurn; public bool isPlayerOTurn; public enum Squares { Yellow = 0, White = 1, Green = 2, Blue = 3, Magenta = 4 } [System.Serializable] public class Squares1 { public GameObject playAreaSquare; public int squareValue; public Squares squareColor; } public List<Squares1> _squares; // Use this for initialization void Start () { Debug.Log("I see " + _squares[0].playAreaSquare + " with a value of " + _squares[0].squareValue.ToString() + " whose color is " + _squares[0].squareColor); } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100)) { Debug.Log(hit.transform.gameObject.name); } } } private void OnMouseDown() { } }