-
[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
'Unity(유니티)' 카테고리의 다른 글
[3D] 오브젝트 이동구현-2 (0) 2022.04.20 [3D] 오브젝트 이동 구현-1 (0) 2022.04.20 [2D,Bolt] 노드를 활용하기 위한 layout 셋팅 (0) 2022.04.15 [Roll-a-Ball] Rotator 큐브 회전 스크립트 (0) 2022.04.13 [Roll-a-Ball]CameraController 스크립트 (0) 2022.04.13