물리

유니티에서 중요한 것 2가지라고하면

Enemy

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player_Finder : MonoBehaviour
{
    [SerializeField] //public과 사용하는 목적이 같은데 
    Transform playerT;

    private void Start()
    {

    }

    private void Update()
    {
        var offsetRot = 180f;

        // 1. 내 위치와 플레이어의 위치로 결과 벡터를 얻는다.
        var resultVec = playerT.position - transform.position;
        resultVec.Normalize();

        // 2. 내 앞벡터와 내적해서 회전할지말지 결정한다.
        var dot = Vector3.Dot(resultVec, transform.forward);

        if(Mathf.Abs(dot) > 0.001f)
        {
            // 3. 내 우벡터와 내적해서 우회전인지 좌회전인지 결정한다.
            var dot2 = Vector3.Dot(resultVec, transform.right);

            //오른쪽에 있다. 복합연산자, 삼항연산자
            offsetRot *= dot2 >= 0 ? 1 : -1;

            // 4. 최종 회전 (Time.deltaTime은 초당변화량을 일정하게 유지한다.)
            transform.Rotate(0, offsetRot * Time.deltaTime, 0);
        }
    }
}

Player

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player_Con : MonoBehaviour
{
    [SerializeField]
    float movespeed = 3f;
    [SerializeField]
    float rotSpeed = 360f;
    [SerializeField]
    float velPower = 0.9f;

    float velocity = 0;

    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        var h = Input.GetAxis("Horizontal");
        var v = Input.GetAxis("Vertical");
        //Axis는 0부터 1까지 점점올라갔다가 내려감. -1이라도 같음
        //GetAxisRaw를 쓰면 뚝뚝 끊긴다.

        if (v != 0)
        {
            velocity += v * Time.deltaTime;
        }
        else
        {
            //키를 누르지않으면 변위가 0이 되도록 감속한다.
            velocity -= velocity * velPower * Time.deltaTime;
        }
        transform.position += transform.forward * v * velocity * movespeed * Time.deltaTime;
        transform.Rotate(0, h * rotSpeed * Time.deltaTime, 0);
    }
}