게임개발/게임엔진 응용 프로그래밍

절대강좌 유니티 (1) 플레이어와 카메라의 이동

pudding81 2024. 3. 12. 14:13

 

 

 

플레이어가 키보드 입력에 따라 움직임

플레이어가 마우스 방향에 따라 회전함

 

카메라가 플레이어의 이동에 맞춰 이동함 

 

 

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

public class PlayerCtrl : MonoBehaviour
{
    public float movespeed=1f;
    public float turnspeed=1f;
    private Animation anim;

    private void Awake()
    {
        //첫번째 호출
    }

    private void OnEnable()
    { 
        //두번째 호출
        
    }
    void Start()
    {
        //코루틴으로 호출 가능
       // IEnumerator Start()
       
        anim = GetComponent<Animation>();
        anim.Play("Idle");
       


    }

    private void FixedUpdate()
    {
        //일정간격으로 호출

    }

    void Update()
    {
        //transform.Translate(Vector3.forward * speed * Time.deltaTime); //로컬좌표 기준으로,정면으로 이동
        //transform.Translate(Vector3.forward * 0.01f,Space.World); //월드좌표 기준으로,회전한 상태로 이동   
       
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 dir = new Vector3(h,0, v);
        transform.Translate(dir.normalized * movespeed * Time.deltaTime);

        float r = Input.GetAxis("Mouse X"); //회전방향      
        transform.Rotate(Vector3.up * turnspeed * r);

        PlayerAnim( h,  v);

    }

    private void LateUpdate()
    {
        
    }

    private void PlayerAnim(float h, float v) 
    {
      //키보드 입력에 따라 애니메이션 변화
        if (v >= 0.1f)
        {
            this.anim.CrossFade("RunF", 0.25f);
        }
        else if(v<= -0.1f)
        {
            this.anim.CrossFade("RunB", 0.25f);

        }

       else if (h >= 0.1f)
        {
            this.anim.CrossFade("RunR", 0.25f);
        }
        else if (h <= -0.1f)
        {
            this.anim.CrossFade("RunL", 0.25f);

        }
        else
        {
            this.anim.CrossFade("Idle", 0.25f);

        }


    }

   


}

 

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

public class FollowCam : MonoBehaviour
{
    public Transform camTr;  //카메라의 위치
    public Transform targetTr;  //타겟의 위치


    [Range(2f, 20f)]
    public float distance =10f; //카메라와 타겟의 거리

    [Range(0, 10f)]
    public float height = 2f;  //카메라의 높이

    public float damping=1f;  
    private Vector3 velocity;

    public float targetOffset = 2f;
    
    void Start()
    {
        camTr = GetComponent<Transform>();

    }

    

    private void LateUpdate()
    {
        // 카메라 이동
        
       Vector3 pos  = targetTr.position+(-targetTr.forward*distance)+(Vector3.up *height);
          
        //구면 선형보간 / 부드럽게 움직이기 
        //camTr.position = Vector3.Slerp( camTr.position,pos, Time.deltaTime * damping);
        camTr.position = Vector3.SmoothDamp(camTr.position, pos,ref velocity,damping);

        // 카메라 회전
        camTr.LookAt(targetTr.position+(targetTr.up *targetOffset));



    }
}