Unity - 유닛 클릭 이동

2025. 8. 5. 00:51·유니티 개발/계륵

이번 글에서는 유닛을 클릭 이동을 어떻게 구현 하였는지 정리 해보겠습니다.

 

먼저 빈 씬에서 땅 오브젝트를 설치후 캡슐 콜라이더 설치를 하고 카메라를 높은 위치로 배치를 합니다.

 

배치가 완료가 되었으면 카메라 움직임 부터 만들어 보겠습니다.

카메라는 인스펙터에 넣은 것이 따로 없기에 postion을 움직이도록 만들었습니다.

public float moveSpeed = 5f;


void Update()
{
    Vector3 moveDir = Vector3.zero;

    if (Input.GetKey(KeyCode.W))
        moveDir += Vector3.forward;    
    if (Input.GetKey(KeyCode.S))
        moveDir += Vector3.back;       
    if (Input.GetKey(KeyCode.A))
        moveDir += Vector3.left;      
    if (Input.GetKey(KeyCode.D))
        moveDir += Vector3.right;     


    transform.Translate(moveDir.normalized * moveSpeed * Time.deltaTime, Space.World);
}

이렇게 짜면 키보드를 눌렀을때 카메라를 움직일 수 있습니다.

이렇게 움직인다면 이제 유닛의 움직일때 위치를 지정 해야 합니다. 

 

그래서 카메라에서 레이가 나오고 충돌할때 이동해야 할 값을 받을수 있게 만들었습니다.

public class CameraRay : MonoBehaviour
{
    public Camera mainCamera;
    public Vector3 movePoint;
    
    void Start()
    {
        mainCamera = Camera.main;
    }
    
    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
            Debug.DrawRay(ray.origin, ray.direction * 10f, Color.red, 1f);

            if (Physics.Raycast(ray, out RaycastHit raycastHit) && raycastHit.collider.CompareTag("Ground"))
            {
                movePoint = raycastHit.point;
                GameObject unit = GameObject.Find("Unit");
                unit.GetComponent<UnitsMove>().MoveStart(movePoint);
            }
        }
    }
}

 

이렇게 충돌이 되었다면 유닛으로 값을 넘겨줍니다.

넘겨준 값들은 플레이어 이동으로 넘어가게 되어 최종적으로 이동할수 있도록 만들었습니다.

public float unitSpeed = 3.0f;
CharacterController controller;
Vector3 targetPoint = Vector3.zero;
bool isMoving = false;

void Start()
{
    controller = GetComponent<CharacterController>();
}

void Update()
{
    if (isMoving)
    {
        Vector3 dir = targetPoint - transform.position;
        dir.y = 0; 

        if (dir.magnitude > 0.1f)
        {
            controller.SimpleMove(dir.normalized * unitSpeed);
        }
        else
        {
            isMoving = false;
        }
    }
}

public void MoveStart(Vector3 pos)
{
    targetPoint = pos;
    isMoving = true;
}

이제 확인을 해보겠습니다.

 

'유니티 개발 > 계륵' 카테고리의 다른 글

Unity - 다시 돌아가기(stack)  (1) 2025.08.13
Unity - A*  (3) 2025.08.12
Unity - 발소리 구현  (0) 2025.08.04
Unity - 파쿠르 수정 버전  (0) 2025.07.24
Unity - 파쿠르 첫 구현  (0) 2025.07.23
'유니티 개발/계륵' 카테고리의 다른 글
  • Unity - 다시 돌아가기(stack)
  • Unity - A*
  • Unity - 발소리 구현
  • Unity - 파쿠르 수정 버전
dove-dove
dove-dove
dove-dove 님의 블로그 입니다.
  • dove-dove
    dove-dove 님의 블로그
    dove-dove
  • 전체
    오늘
    어제
    • 분류 전체보기 (38)
      • 유니티 개발 (38)
        • 팀 포트폴리오 - 슈퍼 마리오 (7)
        • 사이드 뷰 게임 (22)
        • 계륵 (8)
        • 깃 주소 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dove-dove
Unity - 유닛 클릭 이동
상단으로

티스토리툴바