Unity Engine/기능

[이동] 클릭 좌표로 캐릭터 이동 및 바라보기

권재현의 포트폴리오 2024. 1. 18. 22:11

[ 클릭 좌표로 캐릭터 이동 ]

< 주 사용 코드 >

  • 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

  • Move() : 캐릭터가 향할 방향 및 속도를 계산하여 CharacterController.move()로 캐릭터를 이동시키는 함수.
    • 함수 내에서 선언한 dir 변수는, normalized를 사용하여 방향만을 산출한 값.

    • 방향 변수 dir와 미리 정해둔 캐릭터의 속도값을 계산하여 최종 이동 변수인 moveDir에 넣어줌.

    • moveDir의 y축 값은 캐릭터가 위/아래로 움직이지 않도록 0으로 설정.

    • 클릭 지점이 제자리인 경우와 그렇지 않은 경우를 구분하여 그에 따른 캐릭터 이동 및 애니메이션 설정.

    • Code

※ ScreenPointToRay

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

< Full Code >

 

https://www.youtube.com/watch?v=y__uecUnR_E

'Unity Engine > 기능' 카테고리의 다른 글

[Font] TextMeshPro에 폰트 추가하기  (0) 2024.02.13
[탐색] 반경 내 가까운 오브젝트 찾기  (0) 2024.01.18
[Camera] 카메라 이동 및 회전  (0) 2024.01.18
[Camera] Cinemachine  (0) 2024.01.18