본문 바로가기
게임개발/게임엔진 응용 프로그래밍

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

by pudding81 2024. 3. 12.

 

 

 

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

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

 

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

 

 

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));



    }
}