본문 바로가기
KDT/유니티 심화

23/08/21 Player 목표지점까지 이동 후 회전 (Lerp,Quaternion)

by 잰쟁 2023. 8. 21.
728x90
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestPlayer : MonoBehaviour
{
    [SerializeField]
    private Transform eye;
    private Vector3 targetPosition;
    private Quaternion trot;
    
    private void Start()
    {
        MoveForward();
        //CoMoveForward();
    }
    public void MoveForward()
    {       
        Ray ray = new Ray(this.eye.position, this.transform.forward);
        Debug.DrawRay(ray.origin, ray.direction * 100f, Color.blue, 5f);
        RaycastHit hit;
        if(Physics.Raycast(ray, out hit))
        {
            Vector3 tpos = new Vector3(hit.point.x,transform.position.y, hit.point.z);
            this.targetPosition = tpos;
           
            DrawArrow.ForDebug(hit.point, hit.normal, 5f, Color.green, ArrowType.Solid);
            //목표지점 바라보기
            this.trot = Quaternion.LookRotation(hit.normal);

            this.StartCoroutine(this.CoMoveForward());
        }  
    }

    private IEnumerator CoMoveForward()
    {
        while (true)
        {
            float distance = Vector3.Distance(this.transform.position,this.targetPosition);
            
            if (distance <= 0.2f)
            {
                break;
                
            }
            //translate로 이동시키기
            //this.transform.Translate(Vector3.forward * 3f * Time.deltaTime);

            //lerp함수로 이동시키기
            this.transform.position = Vector3.Lerp(this.transform.position, this.targetPosition, Time.deltaTime);
            yield return null;
        }
        Debug.Log("Move Complete");

        //회전시키기
        this.transform.rotation = this.trot;
    }
}