====== 2D 좌표 >> 3D 좌표 ======
* 마우스로 클릭한 곳의 3D 좌표를 구할때,
* **RaycastHit** 와 **Ray**를 사용해서, 마우스 기준 위치를 얻는다.
* 내가 쓰려고 하는, 특정 오브젝트에 닿았는지 확인한다.
public Camera subCamera; // 기준이 되는 카메라는, 외부에서 변수 등록할 수 있게 설정
public GameObject targetObject; // 마우스 클릭에 반응할 오브젝트
void Update() {
RaycastHit _hitRet = new RaycastHit(); // 결과를 저장할 RaycastHit
Ray _cameraRay = subCamera.ScreenPointToRay( Input.mousePosition ); // subCamera시점에서 마우스 위치를 ...
// targetObject가 마우스 클릭 지점에 있는지, 클릭한 지점의 위치는 어디인지 얻는다.
if( targetObject.collider.Raycast( _cameraRay, out _hitRet, 40f ) ) {
// 3D 좌표를 저장
target.position = _hitRet.point;
// 어디를 가리키는지 선을 그어본다.
Debug.DrawLine( _cameraRay.origin, _hitRet.point );
// 리액션
if( Input.GetButtonUp("Fire1") ) { /* 마우스 클릭시 뭔가 한다.*/ }
}
}
Physics에도 Raycast가 있고, 2D좌표를 3D 좌표로 변경이 가능한데, 아직 윗부분 아랫부분 차이를 잘 모르겠다.
RaycastHit _hitRet = new RaycastHit();
Ray _cameraRay = subCamera.ScreenPointToRay( Input.mousePosition );
// 어떤 물체든 화면상에 오브젝트가 있는 곳이라면,
if( Physics.Raycast(_cameraRay.origin, _cameraRay.direction, out _hitRet, 40) )
{
Debug.DrawLine( _cameraRay.origin, _hitRet.point );
target.position = hit.point;
}