반응형
2D에서 클릭한 위치에 있는 오브젝트를 감지하는 대표적인 방법은 Raycast와 Collider를 사용하는건데
저는 Raycast를 사용했습니다.
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 touchPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));
Vector3 cameraPos = Camera.main.transform.position;
Debug.DrawRay(cameraPos, touchPos - cameraPos, Color.red, 100f);
RaycastHit hit;
if (Physics.Raycast(cameraPos, (touchPos - cameraPos).normalized, out hit, 100f))
{
// 원하는 오브젝트 발견시 처리
if (hit.collider.gameObject.name == "Board")
{
Vector2 pos = SearchNearPoint(touchPos);
C_Put c_Put = new C_Put()
{
PosInfo = new PosInfo()
{
PosX = (int)pos.x,
PosY = (int)pos.y,
}
};
Managers.Network.Send(c_Put);
}
}
}
}
2D에서는 평면으로만 바라보고 있어서 Ray를 쏘더라도 어디에서 부터 쏴야지 오브젝트를 감지할 수 있을지 감이 오지 않습니다.
3D로 보면 카메라에서 부터 Ray를 쏴서 오브젝트가 있는곳까지 Ray를 쏴서 감지하면 되겠다고 생각할 수 있습니다.
그리고 모든 2D게임은 사실 3D이지만 정면을 바라보기 때문에 2D처럼 보일 뿐입니다.
그래서 Vector2가 아닌 Vector3를 사용했습니다.
카메라 위치에서 클릭한 방향으로 광선을 쏘려면 방향 벡터가 필요하겠죠?
그래서 Debug.DrawRay를 보시면
touchPos 에서 cameraPos를 빼서 방향 벡터를 뽑아내서 카메라서부터 클릭한 위치로 레이를 쏜거죠
※감지할 오브젝트에는 Collider가 반드시 필요합니다!
반응형
'Unity' 카테고리의 다른 글
[UNITY] Ui Document앞에 게임 오브젝트 렌더링 (0) | 2025.01.04 |
---|---|
[Unity] 맥에서 스크립트 주석 없애는 법 (0) | 2023.12.22 |
[Unity] 애니메이션 Has Exit Time (0) | 2023.12.11 |
[Unity] 유니티 기본 강좌 #03 (키 입력 받기) (0) | 2023.09.21 |
[Unity] 유니티 기본 강좌 #02 (0) | 2023.06.23 |