[ 클릭 좌표로 캐릭터 이동 ]
< 주 사용 코드 >
- Camera.ScreenPointToRay()
- CharacterController.move()
< 설명 >
- 변수
- Camera mainCam : ScreenPointToRay함수를 사용하기 위한 카메라 변수.
- Vector3 clickedPos : 마우스로 클릭한 좌표 변수 (이동할 목적지 좌표)
- Vector3 moveDir : 크기 및 방향을 계산한 최종 이동 변수.
- Update() : 매 순간 클릭 좌표 및 이동이 갱신되어야 하므로 GetClickedPos()함수를 넣음.
- FixedUpdate에 넣으면 GetMouseButtonDown을 제대로 인식하지 못함.
- GetClickedPos() : 마우스 클릭 좌표를 받아서 clickedPos에 저장하고, 클릭한 방향으로 캐릭터를 회전시키는 함수.
- 마우스 클릭한 지점의 정보를 저장할 hit 변수를 선언.
- Raycast와 ScreenPointToRay를 통해, 클릭한 곳의 정보를 hit변수에 넣음.
(카메라로부터 클릭위치로 광선을 쏘고, 맨 처음 광선이 충돌한 물체의 정보를 hit에 저장) - clickedPos에 클릭한 곳의 좌표(hit.point)를 넣음.
(y축 값은 이후 moveDir계산에서 y축 이동을 없애기 위해 현재 위치를 넣음) - LookAt() 함수를 이용하여 캐릭터가 클릭한 위치를 바라보게 함.
- Code
- 마우스 클릭한 지점의 정보를 저장할 hit 변수를 선언.
- Move() : 캐릭터가 향할 방향 및 속도를 계산하여 CharacterController.move()로 캐릭터를 이동시키는 함수.
- 함수 내에서 선언한 dir 변수는, normalized를 사용하여 방향만을 산출한 값.
- 방향 변수 dir와 미리 정해둔 캐릭터의 속도값을 계산하여 최종 이동 변수인 moveDir에 넣어줌.
- moveDir의 y축 값은 캐릭터가 위/아래로 움직이지 않도록 0으로 설정.
- 클릭 지점이 제자리인 경우와 그렇지 않은 경우를 구분하여 그에 따른 캐릭터 이동 및 애니메이션 설정.
- Code
- 함수 내에서 선언한 dir 변수는, normalized를 사용하여 방향만을 산출한 값.
※ ScreenPointToRay
더보기

- Camera 클래스의 함수.
- 스크린 좌표를 넘겨주면 카메라 위치로부터 스크린 좌표에 해당하는 3차원의 좌표로 Ray를 생성.
- 마우스 좌표가 제대로 찍히는지는 Debug.DrawRay로 확인 가능.

< Full Code >
'Unity Engine > 기능' 카테고리의 다른 글
[Font] TextMeshPro에 폰트 추가하기 (0) | 2024.02.13 |
---|---|
[탐색] 반경 내 가까운 오브젝트 찾기 (0) | 2024.01.18 |
[Camera] 카메라 이동 및 회전 (0) | 2024.01.18 |
[Camera] Cinemachine (0) | 2024.01.18 |