Collision Query

À¯´ÏƼ¿¡¼­ Collsion Query´Â Raycast, SphereCast, CapsuleCast µîÀÌ ÀÖ´Ù.
Raycast´Â ´«À¸·Î º¸ÀÌÁö ¾Ê±â ¶§¹®¿¡, Drawray¸¦ ÀÌ¿ëÇØ ´«À¸·Î È®ÀÎÇÑ´Ù.

< ¶óÀÎ µð¹ö±ë >

Vector3 forward = transform.TransformDirection(Vector3.forward);

Debug.DrawRay(transform.position, forward*10, Color.green);

 

Debug.DrawRay(transform.position, transform.forward*10, Color.green);

transform.TransformDirection( )°ú transform.forward´Â ¿ùµå ¹æÇâ º¤Å͸¦ ³Ñ°ÜÁÖ´Â ÇÔ¼ö·Î µ¿ÀÏÇÑ °ªÀÌ ¸®ÅϵȴÙ.
TransformDirection( )ÀÌ ¿¹»ó°ú´Â ´Ù¸£°Ô ¼Óµµ°¡ ´õ ºü¸£´Ù.
(ÂüÁ¶: http://answers.unity3d.com/questions/560471/efficiency-of-transformforward-up-and-right.html

¶óÀÎ µð¹ö°Å Ãâ·Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù. ÀÌ ÇÔ¼öÀÇ Ãâ·ÂÀº ¾À ºä¿¡ ·»´õ¸µ µÈ´Ù.

Debug.DrawRay(À§Ä¡, ±æÀÌ, Ä÷¯)  
Debug.DrawLine(½ÃÀÛÁ¡, ³¡Á¡, Ä÷¯)

 

< Raycast >

Physics.Raycast( )·Î Ãæµ¹ Äõ¸®¸¦ ½ÇÇàÇÑ´Ù.
RaycastHit¸¦ ÅëÇØ Ãæµ¹¿ÀºêÁ§Æ® name°ú Ãæµ¹°Å¸®¸¦ ¸®ÅÏÇÑ´Ù.

public class Raycast : MonoBehaviour {

    private RaycastHit hit = new RaycastHit();

 

    void Start () {   

    }

 

    void Update () {

        Vector3 forward = transform.TransformDirection(Vector3.forward);

        //if(Physics.Raycast(transform.position, forward, 10) == false)

        //    return;

 

        if(Physics.Raycast(transform.position, forward, out hit, 10) == false)

            return;

 

        Debug.Log(hit.collider.name); 

        Debug.Log(hit.distance); 

 

        Debug.DrawRay(transform.position, forward*10, Color.green);

        //Debug.DrawRay(transform.position, transform.forward*10, Color.green);

    }

}

½ÇÇà È­¸éÀÌ´Ù.

 

< ¸¶¿ì½º Æ÷ÀÎÆ®¸¦ 3D ÁÂÇ¥·Î >

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hit;

if(Physics.Raycast(ray, out hit))

{

    Debug.Log(hit.transform.position);

}

Camera.main.ScreenPointToRayÀÇ ¸¶¿ì½º À§Ä¡·Î Ray °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
Physics.Raycast( )·Î ray Ãæµ¹À» ±¸ÇÑ´Ù.

Raycast µ¥¸ð : RayCastDemo.zip