Unity-코루틴으로 이동하기
2023. 8. 10.

   private void Move(Vector3 targetPos)
        {
            this.targetPosition = targetPos;
            Debug.Log("move");
            if (this.moveRoutine != null)
            {
                this.StopCoroutine(this.moveRoutine);//이미 코루틴이면 실행 중지
            }
            this.moveRoutine = this.StartCoroutine(this.CoMove());//코루틴 시작
        }

     while (true)
            {
                this.transform.LookAt(this.targetPosition);
                anim.SetInteger("State", 1);//Run animation
                this.transform.Translate(Vector3.forward * 2 * Time.deltaTime);//정면으로 이동

                // Debug.Log(weaponTrans.transform.position);
                float distance = Vector3.Distance(this.transform.position, this.targetPosition);
                if (distance < 0.1f)
                {
                    Debug.Log("Stop");
                    anim.SetInteger("State", 0);//Idle
                    break;
                }
                yield return null;
            }
            Debug.Log("<color=yellow>도착!</color>");

-StartCoroutine으로 코루틴 함수 호출한다.

-Update에서 그냥 호출하면 if문 내에서 호출했을때 한프레임 하고 끝난다던지의 문제가 생기기 때문에 이런 코드를 작성하여 사용하는 것이다.

-항상 코루틴을 쓸때는 무한루프가 되지않도록 break로 빠져나온다던지 신경쓰도록 하자.

=> 무한루프가 되면 유니티 멈춘다.

-코루틴 작성할때는 코루틴이 실행중이면 중지하도록 한다. 이런 이동의 경우에는 Move코드에서 StopCoroutine을 작성안한다면 좌클릭할때마다 동시에 실행되어버려 점점 빨라지는 문제가 발생한다.

 

 

코루틴함수로 이동

'유니티 기초' 카테고리의 다른 글

Unity- AppleBasket - LobbyScene  (0) 2023.08.07
Unity-예제-AppleBasket(GameScene)  (0) 2023.08.07
Unity- 버튼 클릭(Onclick)하면 이동  (0) 2023.08.04
unity - 3d 기본 예제-밤송이  (0) 2023.08.04
Hero Jump 예제  (0) 2023.08.03
myoskin