Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • rsocket
  • MariaDB
  • 백준
  • kotlin
  • ec2
  • 프로그래머스
  • enum
  • 우아한테크코스
  • 에라토스테네스의 체
  • 문자열
  • elasticsearch
  • Wil
  • 다이나믹 프로그래밍
  • Android
  • Docker
  • 코틀린
  • 프리코스
  • til
  • 코딩테스트
  • 안드로이드
  • spring
  • 코틀린 인 액션
  • 파이썬
  • 내림차순
  • SQL
  • 레포지토리
  • kibana
  • java
  • webflux
  • grafana

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

게임 개발/Unity

[Unity3D] 원하는 위치로 물체 이동 MoveTowards

2022. 11. 25. 20:22

보행자 앞에는 다음과 같이 트리거가 하나 있습니다. 

트리거의 tag는 총 GoWalk, Go, Stop 세 가지를 사용합니다. 순서대로 걷기, 뛰기, 멈추기 입니다.

 

차량이 진입 트리거를 밟기 전까지 보행자 트리거의 tag는 Stop이므로 애니메이션은 Idle상태이고, 이동하지 않습니다.

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Stop"))
        {
            animator.SetBool("IsRun", false);
            animator.SetBool("IsGreen", false);
            speed = 0f;
        }
    }

 

차량이 진입 트리거를 밟으면 보행자가 목적지로 이동하기 시작합니다.

진입 트리거의 tag는 SideWalk라고 지정해두었고, 차량에 들어있는 스트립트에서 OnTriggerEnter를 통해 판단합니다.

    void OnTriggerEnter(Collider other)
    {
	/* ... */
        else if (other.CompareTag("SideWalk"))
        {
        // 보행자 레이어 tag 변경
        }
    }

 

차량이 트리거를 밟으면 보행자 트리거의 tag가 GoWalk로 바뀝니다. 

보행자 안에 들어있는 스크립트에서 OnTriggerEnter를 통해 판단합니다.

    void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("Go"))
        {
            animator.SetBool("IsGreen", true);
            animator.SetBool("IsRun", true);
            isWalk = false;
            isRun = true;
            speed = 3.5f;
        }
        else if (other.CompareTag("GoWalk"))
        {
            animator.SetBool("IsGreen", true);
            animator.SetBool("IsRun", false);
            isWalk = true;
            isRun = false;
            speed = 0.9f;
        }
    }

 

보행자 스크립트의 update 문에서 isRun 또는 isWalk가 true이면 보행자가 MoveTowards를 통해 목적지로 향하게 합니다.

    void Update()
    {
        CompareDistance();
        if (isRun || isWalk)
        {
            transform.position = Vector3.MoveTowards(transform.position, Destination.transform.position, Time.deltaTime * speed);
        }
    }

목적지는 빈 오브젝트를 배치하여 사용하면 됩니다. 

(차량이 해당 구간을 빠르게 지나가게 됩니다. 보행자가 걷고 있다는 것을 보여주기 위한 장치이므로 보행자-목적지까지의 거리가 멀지 않습니다.)

 

CompareDistance()는 Vector3.Distance를 이용하여 목적지와 보행자의 거리를 구하여, 이 거리가 1 이하이면 보행자가 목적지에 도달했다고 판단하여 Destroy를 통해 보행자를 파괴합니다.

728x90
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바