728x90
반응형
마우스를 이용하여, 선택한 오브젝트 주위를 회전하거나 줌인, 줌아웃이 되는 카메라입니다.
유니티에서 FreeLookCamera가 있긴 하지만, 이 소스가 더 간단합니다.
using UnityEngine;
[RequireComponent(typeof(Camera))]
public class OrbitCamera : MonoBehaviour
{
public Transform m_Target;
public float m_Distance = 5.0f;
public float m_XSpeed = 120.0f;
public float m_YSpeed = 120.0f;
public float m_YMinLimit = -20f;
public float m_YMaxLimit = 80f;
public float m_DistanceMin = .5f;
public float m_DistanceMax = 15f;
private float m_X = 0.0f;
private float m_Y = 0.0f;
void Start()
{
Vector3 angles = transform.eulerAngles;
m_X = angles.y;
m_Y = angles.x;
}
void LateUpdate()
{
if (m_Target)
{
if (Input.GetMouseButton(1))
{
m_X += Input.GetAxis("Mouse X") * m_XSpeed * m_Distance * 0.02f;
m_Y -= Input.GetAxis("Mouse Y") * m_YSpeed * 0.02f;
m_Y = ClampAngle(m_Y, m_YMinLimit, m_YMaxLimit);
}
Quaternion rotation = Quaternion.Euler(m_Y, m_X, 0);
float distance = Vector3.Distance(m_Target.position, transform.position);
m_Distance = Mathf.Clamp(m_Distance - Input.GetAxis("Mouse ScrollWheel") * distance, m_DistanceMin, m_DistanceMax);
Vector3 negDistance = new Vector3(0.0f, 0.0f, -m_Distance);
Vector3 position = rotation * negDistance + m_Target.position;
transform.rotation = rotation;
transform.position = position;
}
}
public float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
}
728x90
반응형
'프로그램 > 유니티 스크립트 소스' 카테고리의 다른 글
[유니티 스크립트 소스] Look At 카메라 (0) | 2020.02.19 |
---|---|
[유니티 스크립트 소스] 오토(Auto) 카메라 (0) | 2020.02.19 |
[유니티 스크립트 소스] 유니티 에디터에서 클라이더 그리기 (0) | 2020.02.19 |
[유니티 스크립트 소스] 리지드바디 없이 위치값으로 속도 얻기 (0) | 2020.02.18 |
[유니티 스크립트 소스] 타이머 - 카운트 다운 (1) | 2020.02.17 |