Unity/UIUX프로그래밍

0428 _ 레이캐스팅 쏘고 캐릭터 이동하기.

minquu 2021. 4. 28. 17:02
반응형

0. 먼저 레이캐스팅이 화면에 잘 표시되는지 확인해본다.

 

 

 

★★박스 콜라이더 영역이 지정이 되야지 부딪치는 판정이 된다.

 

bg에 콜라이더가 없을 때

 

레이는 나가지만 좌표가 안 뜬다.

 

콜라이더가 있을 때 

 

 

 

1. 확인차 캐릭터를 그 좌표값으로 바로 이동 시켜본다

 

 

 

 

 

 

순간이동처럼 그 좌표로 바로 이동한다.  이제 

 

방향 * 속도 * 시간 으로 점자 그곳으로 이동하게 만들어주면 된다.

 

2. Hero에게 Move 메서드를 만들어준다 (캐릭터 내에서 작동하는 기능이니깐 캐릭터에게 메서드를 달아줌)

 

코루틴을 사용할 것이고

 

 

Move 할때 만약 코루틴이 돌고있다면 기존꺼는 종료시키고, 시작하게 해야한다.

종료하지 않으면 계속 그 위치로 가려고하고 다시 새로운 곳으로 가고, 이상한 움직임이 나올 것이다.

 

 

3. 움직이는 코루틴 만들기

 

 

  private IEnumerator MoveImpl(Vector3 tpos) {
        while (true) {
            var dir = (tpos - this.transform.position).normalized;
            this.transform.Translate(dir * speed * Time.deltaTime);
            var distance = Vector3.Distance(tpos, this.transform.position);
            if (distance <= 0.1f)
            {
                this.anim.Play("idle");
                break;
            }
            yield return null;
        }
    } 
while (true)

 

와일문을 돌린다.

 

var dir = (tpos - this.transform.position).normalized;

dir 를 찾아준다. (목표지점 - 현재 위치).normalized 하면 dir 방향값이 나온다.

 

 

this.transform.Translate(dir * speed * Time.deltaTime);

 

현재 게임 오브젝트의 트랜스레이트 값을 (방향 * 속도 * 시간)으로 넣어줘서 움직이게한다.

 

var distance = Vector3.Distance(tpos, this.transform.position);

 

거리를 구해준다.  Vector3.Distance 를 이용해서, (목표지점, 현재지점) 으로 거리를 구해줘서.

 

    if (distance <= 0.1f)
            {
                this.anim.Play("idle");
                break;
            }

만약 거리가 0.1f 이하면 

idle로 애니를 바꾸고,

While 문을 빠져나와준다.

 

 

이동이 되고, 거리가 짧아지면 멈추는 걸 볼 수 있다.

 

4. 방향을 맞춰주기

 

클릭한 곳이 캐릭터 기준 앞으면, 그대로 앞으로 보게하고,

뒤쪽이면 스케일을 -1로 해줘서 돌아보게 해준다.

 

 

 

5.애니메이션 걷기가 조금 늦게 나오니깐. 씽크를 맞춰준다.

 

 

 

샘플러를 50으로 올려줘서 빠르게 움직이게 하고

 

 

걷는 도중에 애니메이션을 자꾸 멈춰서

 

 

LoopTime를 체크를 해줬습니다.

 

 

 

 

반응형