- Home /
Question by
CristiBala24 · Jan 09, 2019 at 01:38 PM ·
issueturretplacementfirst person shooterplacing
How to make the turret not placeable on walls?
So I am working on a little game where you can place turrets and deffend points and I have this small issue. I can place turrets everywhere, even on walls and I dont want that. How can I make the turrets not placeable on walls ?
Here is the script:
public GameObject blueprintGreen;
public GameObject blueprintRed;
public GameObject turret;
private GameObject moveableBlue;
private bool blueprintOn;
[SerializeField]
private Vector3 offset;
[SerializeField]
private float rotation;
[SerializeField]
private LayerMask mask;
// Start is called before the first frame update
void Start()
{
blueprintOn = false;
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Q) && blueprintOn == false)
{
BluePrint();
}
if (Input.GetKeyDown(KeyCode.Mouse0) && blueprintOn == true)
{
BuildTurret();
Destroy(moveableBlue);
blueprintOn = false;
rotation = 0f;
}
if(Input.GetKey(KeyCode.Z) && blueprintOn == true)
{
rotation -= 2.5f;
}
if(Input.GetKey(KeyCode.X) && blueprintOn == true)
{
rotation += 2.5f;
}
if (blueprintOn)
{
MoveBluePrint();
}
}
void BluePrint()
{
moveableBlue = Instantiate(blueprintGreen);
blueprintOn = true;
}
void MoveBluePrint()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayCast;
if(Physics.Raycast(ray, out rayCast, mask))
{
moveableBlue.transform.position = rayCast.point + offset;
//moveableBlue.transform.rotation = Quaternion.FromToRotation(Vector3.up, rayCast.normal);
if (blueprintOn == true) moveableBlue.transform.rotation = Quaternion.Euler(0f, rotation, 0f);
}
}
void BuildTurret()
{
Instantiate(turret, moveableBlue.transform.position, moveableBlue.transform.rotation);
}
Comment
Best Answer
Answer by Klarzahs · Jan 09, 2019 at 02:29 PM
Hi
you can use tags or layers and check whether the hit gameobject has the correct tag. For example, with the tag "Wall" assigned to all walls, you can check for it using:
void MoveBluePrint()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayCast;
if(Physics.Raycast(ray, out rayCast, mask))
{
if(rayCast.transform.tag.Equals("Wall"))
return;
moveableBlue.transform.position = rayCast.point + offset;
//moveableBlue.transform.rotation = Quaternion.FromToRotation(Vector3.up, rayCast.normal);
if (blueprintOn == true) moveableBlue.transform.rotation = Quaternion.Euler(0f, rotation, 0f);
}
}
Your answer
Follow this Question
Related Questions
Placing an object on the side of another object? 1 Answer
Turrets |Aiming don't work 1 Answer
Placing objects in TD Game 1 Answer
Turret won't shoot 1 Answer