ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [3D] 카메라 이동 및 회전(zoom in, out)
    Unity(유니티) 2022. 4. 20. 10:41

    Mouse ScrollWheel조작으로 zoom in, out 기능

     

    * Mathf.Clamp

    public static float Clamp(float value, float min, float max);

    최대/최소값 사이의 float 값이 value 범위 외의 값이 되지 않도록 함

    using UnityEngine;
    using System.Collections;
    
    public class ExampleClass : MonoBehaviour
    {
        void Update()
        {
           transform.position = new Vector3(Mathf.Clamp(Time.time, 1.0F, 3.0F), 0, 0);
        }
    }

    public static int Clamp(int value, int min, int max);

    // Clamps the value 10 to be between 1 and 3.
    // prints 3 to the console
    
    Debug.Log(Mathf.Clamp(10, 1, 3));

     

     

     

    * Quaternion.Euler

    public static Quaternion Euler(float x, float y, float z);

    z축 주위로 z, x축 주위로 x, y축 주위로 y 각도만큼 회전한(순서대로) Rotation을 반환

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ExampleClass : MonoBehaviour
    {
        public Quaternion rotation = Quaternion.Euler(0, 30, 0);
    }

    public static Quaternion Euler(Vector3 euler);

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ExampleClass : MonoBehaviour
    {
        public Quaternion rotation = Quaternion.Euler(new Vector3(0, 30, 0));
    }

     

    * Transform.eulerAngles

    public Vector3 eulerAngles;

    각도단위 Euler 각도의 회전값을 나타냄

     

     

    [Main Script]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraControll : MonoBehaviour
    {
        [SerializeField] private Transform cameraRig;
        [SerializeField] private Transform myCamera;
        [SerializeField] private float CamMoveSpeed;
        [SerializeField] private float zoomSpeed;
        [SerializeField] private float zoomMax;
        [SerializeField] private float zoomMin;
        
        void Update()
        {
            if(Input.GetMouseButton(1))
            {
                LookAround();
            }
            CameraZoom();
        }
        
        void LookAround()
        {
            Vector2 mouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
            Vector3 camAngle = cameraRig.rotation.eulerAngles;
            float x = camAngle.x - mouseDelta.y;
            if(x < 180f)
            {
                x = Mathf.Clamp(x, -1f, 70f);
            }
            else
            {
                x = 0;
            }
            cameraRig.rotation = Quaternion.Euler(x, camAngle.y + mouseDelta.x * CamMoveSpeed, camAngle.z);
        }
        
        void CameraZoom()
        {
            float zoomDirection = Input.GetAxis("Mouse ScrollWheel");
    
            if (myCamera.position.z >= zoomMax && zoomDirection > 0) return;
            else if (myCamera.position.z <= zoomMin && zoomDirection < 0) return;
            myCamera.position += myCamera.forward * zoomDirection * zoomSpeed;
        }
    }

     

     

    참고 : https://docs.unity3d.com/kr/530/ScriptReference/index.html

Designed by Tistory.