Unity-코루틴으로 이동하기
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 |