[ Physics.RayCast ] & [ Physics2D.Raycast ]
RayCast 란 3차원 공간에서 어느 한 점(시작점)에서 Ray 를 정해진 방향(direction vector)으로 진행하여 Ray 와 충돌되는 객체를 구하는 방법
Unity3D 에서는 Ray Cast 를 위한 몇가지 유용한 클래스 와 struct, method 등을 제공함.
Return
Collider와 충돌하는 경우 true 리턴
Parameters
origin : Ray 가 시작되는 지점
direction : Ray 가 시작 되는 지점에서 쏘여지는 방향 설정
distance : 사용할 Ray의 거리
Mathf.Infinity를 할당하면 무한대
hitInfo : 충돌된 Collider의 보다 자세한 정보를 담고 있음
RaycastHit : Physics.Raycast 메서드의 파라미터로 값을 할당(out) 하여 Ray 에 충돌 된 객체의 정보 담음.
layerMask : 설정된 layer에 관해서만 충돌체크를 실시하게 됨
실습 관련
오희경 발표 자료
Physics2D.Raycast
2D Platform에서 사용되는 Raycast로 Ray2D를 사용해야 함
Touch 처리 예제
RaycastAll : Touch된 모든 Collider를 리턴해 줌
using UnityEngine;
using System.Collections;
public class PlayerControls : MonoBehaviour {
void Update ()
{
if(Input.GetMouseButtonDown(0))
{
Debug.Log ("Mouse Down");
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
Ray2D ray2D = new Ray2D(new Vector2(ray.origin.x, ray.origin.y), new Vector2(ray.direction.x, ray.direction.y));
RaycastHit2D[] hits = Physics2D.RaycastAll(ray2D.origin, ray2D.direction);
int i = 0;
while(i < hits.Length) {
RaycastHit2D hit = hits[i];
if(hit.collider.tag == "Player") {
Debug.Log("Player Touched");
}
Debug.Log ("Touch -> " + hit.collider.tag);
i++;
}
}
else if (Input.GetMouseButton (0))
{
Debug.Log("Mouse Move");
}
else if(Input.GetMouseButtonUp(0))
{
Debug.Log ("Mouse Up");
}
}
}
[ Ray ]
RayCast를 위한 인자로 사용되는 경우가 많음
끝이 정해지지 않은 라인을 정의하고 있음
Variables
orgin : Ray 가 시작되는 지점
direction : Ray 가 시작 되는 지점에서 쏘여지는 방향 설정