À¯´ÏƼ¿¡¼ 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
|