본문 바로가기
공부/Unity 기초

3D FPS - 2 / 시점 변화

by svcbn 2022. 5. 17.

마우스 휠을 아래로 스크롤하면 플레이어와 카메라의 거리가 멀어지게 하고,
반대로 마우스 휠을 위로 스크롤하면 플레이어와 카메라의 거리가 가까워지도록 한다.

 

현재 시점 위치를 지정하고

  void Start()
    {
        // 카메라의 가장 가까운 위치를 플레이어를 기준으로 현재 위치로 지정한다.
        nearPosition = transform.localPosition;

        
    }

 

 

멀어질 최대의 지점을 지정해서 Lerp를 적용한다.

 // 카메라의 정면 방향을 기준으로 뒤쪽 방향의 5미터 지점
        farPosition = nearPosition + transform.forward * -5;

        // 마우스 스크롤 휠의 움직임 값을 받아온다.
        wheelValue -= Input.GetAxis("Mouse ScrollWheel");
        wheelValue = Mathf.Clamp(wheelValue, 0, 1.0f);

        // 시작 위치 - 종료 위치 중의 임의의 지점을 구한다.
        Vector3 camPosition = Vector3.Lerp(nearPosition, farPosition, wheelValue);

        // 구한 임의의 지점을 카메라의 위치로 설정한다.
        transform.localPosition = camPosition;

 

Lerp(선형 보간, Linear Interpolation)

최소점과 최대점 사이를 일정 간격으로 나누어 적용할 수 있는 기능

 

카메라의 위치정보를 Player에 종속시키기 위해 localPosition으로 전부 바꿔준다.

 

 

CameraRotate 전문

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 마우스의 입력값을 이용해서 회전하고싶다.
public class CameraRotate : MonoBehaviour
{
    public float rotSpeed = 200;

    float rx;
    float ry;

    Vector3 nearPosition;
    Vector3 farPosition;

    float wheelValue = 0;

    // Start is called before the first frame update
    void Start()
    {
        // 카메라의 가장 가까운 위치를 플레이어를 기준으로 현재 위치로 지정한다.
        nearPosition = transform.localPosition;

        
    }

    // Update is called once per frame
    void Update()
    {
        // 마우스의 입력값을 이용해서
        float mx = Input.GetAxis("Mouse X");
        float my = Input.GetAxis("Mouse Y");
        rx += my * rotSpeed * Time.deltaTime;
        ry += mx * rotSpeed * Time.deltaTime;

        // rx의 회전 각을 제한하고싶다. +80도 -80도
        rx = Mathf.Clamp(rx, -80, 80);

        // 회전하고싶다.
        transform.eulerAngles = new Vector3(-rx, ry, 0);

        // 카메라의 정면 방향을 기준으로 뒤쪽 방향의 5미터 지점
        farPosition = nearPosition + transform.forward * -5;

        // 마우스 스크롤 휠의 움직임 값을 받아온다.
        wheelValue -= Input.GetAxis("Mouse ScrollWheel");
        wheelValue = Mathf.Clamp(wheelValue, 0, 1.0f);

        // 시작 위치 - 종료 위치 중의 임의의 지점을 구한다.
        Vector3 camPosition = Vector3.Lerp(nearPosition, farPosition, wheelValue);

        // 구한 임의의 지점을 카메라의 위치로 설정한다.
        transform.localPosition = camPosition;
    }
}