Unity

Unity Preview Camera 만들기.

ckhyeok 2019. 10. 28. 15:46

Preview Camera를 이용한 카메라 이동 및 회전

 

 

씬에 기본적인 오브젝트들을 세팅해준다.
카메라를 이동, 회전 시킬 스크립트를 하나 만든다.

 

Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;

   마우스를 가두기 위한 스크립트.

   1. Cursor.visible = Cursor bool visible // true = 켜짐, false = 꺼짐

   2. Cursor.lockState = CursorLockMode.Confined; // 게임 창 밖으로 마우스가 안감

   3. Cursor.lockState = CursorLockMode.Locked; // 마우스를 게임 중앙 좌표에 고정시킴

   4. Cursor.lockState = CursorLockMode.None; // 마우스커서 정상

 

[Header("마우스 감도")]
public float mouseSpeed = 90;
[Header("이동 속도")]
public float keyBoardSpeed = 10;

private float rotationX = 0.0f;
private float rotationY = 0.0f;
private float minY = -90f;
private float maxY = -90f;
private float _h, _v;

 

Edit -> Project Settings... -> Input

 

rotationX += Input.GetAxis("Mouse X") * mouseSpeed * Time.deltaTime;
rotationY += Input.GetAxis("Mouse Y") * mouseSpeed * Time.deltaTime;
rotationY = Mathf.Clamp(rotationY, -90, 90);
 
transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation*= Quaternion.AngleAxis(rotationY, Vector3.left);
 
_h = Input.GetAxis("Horizontal") * keyBoardSpeed * Time.deltaTime;
_v = Input.GetAxis("Vertical") * keyBoardSpeed * Time.deltaTime;
transform.position += transform.forward * _v;
transform.position += transform.right * _h;

 1. rotationX, Y = Mouse X, Y의 Input 값을 속도에 곱한 값을 더해준다.

 2. rotationY의 값을 Mathf.Clamp 함수를 통해 최소, 최대 값을 정해준다.

 3. transform의 localRotation을 위에 구한 값을 적용한다.

 4. _h와 _v는 키보드 입력 값으로 position의 값을 방향에 따라 더해준다.

 

 

Main Camera에 Preview Camera 스크립트를 추가한다.

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

public class PreviewCamera : MonoBehaviour
{
    [Header("마우스 감도")]
    public float mouseSpeed = 90;
    [Header("이동 속도")]
    public float keyBoardSpeed = 10;

    private float rotationX = 0.0f;
    private float rotationY = 0.0f;
    private float minY = -90f;
    private float maxY = -90f;
    private float _h, _v;
    void Start()
    {
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        rotationX += Input.GetAxis("Mouse X") * mouseSpeed * Time.deltaTime;
        rotationY += Input.GetAxis("Mouse Y") * mouseSpeed * Time.deltaTime;
        rotationY = Mathf.Clamp(rotationY, -90, 90);

        transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
        transform.localRotation*= Quaternion.AngleAxis(rotationY, Vector3.left);

        _h = Input.GetAxis("Horizontal") * keyBoardSpeed * Time.deltaTime;
        _v = Input.GetAxis("Vertical") * keyBoardSpeed * Time.deltaTime;
        transform.position += transform.forward * _v;
        transform.position += transform.right * _h;

    }
}

 

   코드.