hey! i want to debug a raycast, but only when it hits a specific layer, if it hits somehwere else, do nothing. here is the code so far:
using UnityEngine;
using System.Collections;
public class RaytoMouse : MonoBehaviour {
public float distance = 50f;
//replace Update method in your class with this one
void FixedUpdate ()
{
//if mouse button (left hand side) pressed instantiate a raycast
if(Input.GetMouseButton(0))
{
//create a ray cast and set it to the mouses cursor position in game
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, distance))
{
//draw invisible ray cast/vector
Debug.DrawLine (ray.origin, hit.point);
//log hit area to the console
Debug.Log(hit.point);
}
}
}
}
The ray cast system allows you to specify a layer mask. It’s described in detail in the docs:
But they don’t show an example.
The simplest way to use it is to make use of the layer mask utility in unity:
//get the mask to raycast against either the player or enemy layer
int layer_mask = LayerMask.GetMask("Player", "Enemy");
//or this would be just player
//int layer_mask = LayerMask.GetMask("Player");
//or this would be player, enemy or cows!
//int layer_mask = LayerMask.GetMask("Player","Enemy","Cows");
//do the raycast specifying the mask
if (Physics.Raycast (ray, out hit, distance, layer_mask))
{
}
The docs for it are here:
Basically the layer mask is just an integer. For each layer in your game (up to 32), a corresponding ‘bit’ is set in your mask. The raycast system can use this 32 bit mask to work out what layers you’re interested in. Unity’s LayerMask utility is a convenient way of constructing these masks so you don’t have to think too hard about bits and masks and stuff!
-Chris
Hi, I have my Player to move when I touch on the screen using
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit[] hits = Physics.RaycastAll(ray, 200);
foreach (RaycastHit hit in hits)
{
if(Input.GetMouseButtonDown(0))
if (hit.collider.CompareTag("Terrain"))
{
newLocFound = true;
dirLocation = hit.point;
}
}
but I also have a button on my GUI which is ment to cast my attack.
Every time when I touch the screen the player moves to the direction even I am touching the button to attack.
What should I use to solve that issue?
Thanks