상세 컨텐츠

본문 제목

유니티 총 줌인, 줌아웃, 확대, 축소 만들기

유니티/기능

by MJ_119 2024. 9. 12. 18:00

본문

- 가상카메라를 통해 줌인 줌아웃 기능 넣기.

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

public class WeaponZoom : MonoBehaviour
{
    [SerializeField] float fov_Orizin = 40f;
    [SerializeField] float fov_Zoom = 10f;
    [SerializeField] CinemachineVirtualCamera virtualCamera;

    bool isZoom;

    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            if (isZoom == false)
            {
                isZoom = true;
                virtualCamera.m_Lens.FieldOfView = fov_Zoom;
            }
            else
            {
                isZoom = false;
                virtualCamera.m_Lens.FieldOfView = fov_Orizin;
            }
        }
    }
}

 

 

- 가상카메라에 Vertical FOV를 움직이면서 줌인할만한 적절한 값을 찾아낸다.

 

 

 

 

 

- 무기에 따라 줌이 가능한 무기를 구현하려면 무기에 줌 스크립트를 넣는다. 

- 캐릭터에 줌 스크립트를 넣으면 무기 상관없이 줌 가능.

 

 

 

using Cinemachine;
using StarterAssets;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WeaponZoom : MonoBehaviour
{
    [SerializeField] float fov_Orizin = 40f;
    [SerializeField] float fov_Zoom = 10f;
    [SerializeField] CinemachineVirtualCamera virtualCamera;

    FirstPersonController firstPersonController;

    bool isZoom;

    private void Start()
    {
        firstPersonController = GetComponentInParent<FirstPersonController>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            if (isZoom == false)
            {
                isZoom = true;
                virtualCamera.m_Lens.FieldOfView = fov_Zoom;
                firstPersonController.RotationSpeed = 0.2f;
            }
            else
            {
                isZoom = false;
                virtualCamera.m_Lens.FieldOfView = fov_Orizin;
                firstPersonController.RotationSpeed = 1f;
            }
        }
    }
}

 

- 무기 자체에 줌 스크립트를 넣으면 GetComponentInParent<>();를 사용해서 플레이어 캐릭터(부모객체)에 있는 컴포넌트를 가져와서 줌했을시 마우스 민감도를 수정한다.

 

 

 

@ 무기를 줌인 상태로 다른무기로 교체하면 줌인 상태가 그대로 있어서 무기 교체하면 줌도 풀리게끔 설정.

 

using Cinemachine;
using StarterAssets;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WeaponZoom : MonoBehaviour
{
    [SerializeField] float fov_Orizin = 40f;
    [SerializeField] float fov_Zoom = 10f;
    [SerializeField] CinemachineVirtualCamera virtualCamera;

    FirstPersonController firstPersonController;

    bool isZoom;

    private void OnDisable()
    {
        ZoomOut();
    }

    private void Start()
    {
        firstPersonController = GetComponentInParent<FirstPersonController>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            if (isZoom == false)
            {
                ZoomIn();
            }
            else
            {
                ZoomOut();
            }
        }
    }

    private void ZoomIn()
    {
        isZoom = true;
        virtualCamera.m_Lens.FieldOfView = fov_Zoom;
        firstPersonController.RotationSpeed = 0.2f;
    }

    private void ZoomOut()
    {
        isZoom = false;
        virtualCamera.m_Lens.FieldOfView = fov_Orizin;
        firstPersonController.RotationSpeed = 1f;
    }
}

관련글 더보기