Cannot select gameObjects
Hey,
I’ve begun construction of a board game and am having trouble wrapping my brain around the grid based movement system and raycasting in general. I have the code set up to roll a die and instantiate the movable spaces so the player can click on them to move that unit. The problem is I can’t even get the first raycast to work and select the square unit.
I realize that this script will probably break up into other scripts as the development moves forward, I was just trying to get something down as I am definitely a beginner with this stuff.
Here are some pictures that might make my question clearer, This is the gameboard. Here we have the blue square, I want to select the blue square, then see picture below this one...
Then these lighter blue tiles will be instantiated from being a prefab, and then the player will click on one of them and move to that position.
I've said all this so you get a better idea of what I'm talking about happening.
It might be quite messy but my code is as follows:
using UnityEngine; using System.Collections;
public class BlueSquareMovement : MonoBehaviour {
public GameObject selectedUnit;
public GameObject squareMove1;
public GameObject squareMove2;
public GameObject squareMove3;
public GameObject squareMove4;
public GameObject squareMove5;
public GameObject squareMove6;
private bool MyTurn;
private int BlueSquareMask;
private int BlueMoveMask;
private float camRayLength = 100.0f;
private float diceRoll;
private static bool BlueSquareDoneMoving;
private bool BlueSquareClicked;
void Awake()
{
MyTurn = true;
BlueSquareClicked = false;
BlueSquareDoneMoving = false;
BlueMoveMask = LayerMask.GetMask ("BlueMoveSpace");
BlueSquareMask = LayerMask.GetMask ("BlueSquare");
}
void Start()
{
}
void OnMouseUp ()
{
//Here I’m casting a ray to find where the player clicked
Debug.Log ("Click");
Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (camRay, out hit, camRayLength, BlueSquareMask))
{
Debug.Log ("Clicked on player");
//At this point the BlueSquare is selected, and the dice roll begins…
BlueSquareClicked = true;
//DiceRoll
diceRoll = Random.Range(1.0f, 6.0f);
Debug.Log (diceRoll);
//I don’t know if this is how you retrieve a number for the Log.. but the code isn’t //working up to this point anyway..
//And then we instantiate the prefabs which contain the clickable spaces
//(not clickable yet as that is my main problem :/ )
if (diceRoll == 1)
{
Instantiate (squareMove1, transform.position, transform.rotation);
}
if (diceRoll == 2)
{
Instantiate (squareMove2, transform.position, transform.rotation);
}
if (diceRoll == 3)
{
Instantiate (squareMove3, transform.position, transform.rotation);
}
if (diceRoll == 4)
{
Instantiate (squareMove4, transform.position, transform.rotation);
}
if (diceRoll == 5)
{
Instantiate (squareMove5, transform.position, transform.rotation);
}
if (diceRoll == 6)
{
Instantiate (squareMove6, transform.position, transform.rotation);
}
}
if (Physics.Raycast (camRay, out hit, camRayLength, BlueMoveMask) && BlueSquareClicked == true)
{
Debug.Log ("Clicked on BlueMoveTile");
//Aaand this is where I would find the transform of the space clicked on
// and send the unit to that transform.position. with some sort of smooth transistion.
}
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612001648im_/https://answers.unity.com/themes/thub/images/avi.jpg)