본문 바로가기

유니티/모바일 멀티플레이 Shooting Game

유니티 3D 카메라 회전 및 플레이어 추적

반응형

이전 포스팅은 플레이어의 움직임까지만 구현하였다

이전 포스팅: https://red-tiger.tistory.com/56

 

유니티 3D플레이어 움직임(부드럽게)

항상 Running게임을 만들었어가지고 딱히 움직임을 구현하는데 크게 어려움은 없었다. 왜냐하면 앞으로 나아가기만 하면되고 좌우로 움직임과 점프만 구현하면 되었기 때문이다. 하지만 이번에 U

red-tiger.tistory.com

추가로 카메라 스크립트를 활용하여 마우스 이동에 따라 카메라가 회전하고 플레이어를 추적하는 MyCamera.cs를 만들어 보겠다. 만약 이 스크립트를 쓸 예정이라면 주석을 보며 천천히 읽어보자.

 

MyCamera.cs

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

public class MyCamera : MonoBehaviour
{
    public float Yaxis;
    public float Xaxis;
    
    public Transform target;//Player

    private float rotSensitive=3f;//카메라 회전 감도
    private float dis=2f;//카메라와 플레이어사이의 거리
    private float RotationMin=-10f;//카메라 회전각도 최소
    private float RotationMax=80f;//카메라 회전각도 최대
    private float smoothTime=0.12f;//카메라가 회전하는데 걸리는 시간
    //위 5개의 value는 개발자의 취향껏 알아서 설정해주자
    private Vector3 targetRotation;
    private Vector3 currentVel;
    
    void LateUpdate()//Player가 움직이고 그 후 카메라가 따라가야 하므로 LateUpdate
    {
        Yaxis=Yaxis+Input.GetAxis("Mouse X")*rotSensitive;//마우스 좌우움직임을 입력받아서 카메라의 Y축을 회전시킨다
        Xaxis=Xaxis-Input.GetAxis("Mouse Y")*rotSensitive;//마우스 상하움직임을 입력받아서 카메라의 X축을 회전시킨다
        //Xaxis는 마우스를 아래로 했을때(음수값이 입력 받아질때) 값이 더해져야 카메라가 아래로 회전한다 

        Xaxis=Mathf.Clamp(Xaxis,RotationMin,RotationMax);
        //X축회전이 한계치를 넘지않게 제한해준다.

        targetRotation=Vector3.SmoothDamp(targetRotation,new Vector3(Xaxis,Yaxis),ref currentVel,smoothTime);
        this.transform.eulerAngles=targetRotation;
        //SmoothDamp를 통해 부드러운 카메라 회전

        transform.position=target.position-transform.forward*dis;
        //카메라의 위치는 플레이어보다 설정한 값만큼 떨어져있게 계속 변경된다.
    }
}

위 스크립트를 카메라 붙여준다.

그리고 인스펙터창에서 Transform Player에 Player를 드래그 앤 드롭해준다.

 

마우스를 오른쪽으로 이동하고 직진버튼을 누르면 플레이어 또한 오른쪽으로 이동해줘야 한다.

그러므로 MyPlayer.cs 스크립트를 살짝 수정해주겠다.

카메라의 Transform을 받아준다
플레이어의 각도에 현재 카메라의 각도를 더해준다

결과영상

 

현재까지는 모두 마우스와 키보드로만 플레이어와 카메라를 조작했다. 다음포스팅에선 화면 왼쪽아래와 오른쪽 아래에 있는 조이스틱으로 조작하는 법을 포스팅 할 예정이다. 

반응형