unity raycast unity3d

unity3d - unity - Raycasting solo a un objeto particular



raycast unity (2)

La última respuesta no tiene en cuenta que las cosas realmente pueden impedir que el raycast llegue incluso al objeto deseado.

Primero debe dar al objeto que desea detectar una capa personalizada.

Luego tienes que disparar un raycast que penetre e ignorará todas las capas, excepto la deseada, así:

Tenga en cuenta: este ejemplo supone que utilizó la capa personalizada n. ° 9 :

float distance = 10; int layer = 9; int layerMask = 1<<layer; if (Physics.Raycast(transform.position, fwd, distance, layerMask)) Debug.Log("Something in front");

No debería marcar las respuestas como aceptadas a menos que hayan resuelto el problema, porque las preguntas con respuestas marcadas como aceptadas reciben sustancialmente menos atención por parte de personas que de otra manera podrían resolverlo por usted.

Uso lo siguiente para detectar si algo está delante de mi avatar:

void Start() { Vector3 fwd = transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, fwd, 10)) Debug.Log("Something in front"); }

Ahora, estoy tratando de averiguar si solo hay un objeto específico al frente, por ejemplo, otro avatar con el nombre de Police en la jerarquía:

public class CharAnim : MonoBehaviour { police = GameObject.Find("Police"); void Start() { Vector3 fwd = transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, fwd, 10)) Debug.Log("Something in front"); } }

Sin embargo, a partir de la documentación, no puedo ver si es posible usar esta variable police para detectarla a través del ray-casting, medir la distancia a ella, etc.

¿Cómo implemento esto?


RaycastHit hit; if (Physics.Raycast(transform.position, fwd, hit,10) && hit.collider.gameObject.tag == "police" ) { // do stuff here }

Tenga en cuenta que necesita establecer la etiqueta de gameObject desde el editor. también puedes usar gameObject.name.