65 lines
1.7 KiB
C#
65 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
namespace ProBuilder2.Examples
|
|
{
|
|
public class CameraControls : MonoBehaviour
|
|
{
|
|
private const string INPUT_MOUSE_SCROLLWHEEL = "Mouse ScrollWheel";
|
|
|
|
private const string INPUT_MOUSE_X = "Mouse X";
|
|
|
|
private const string INPUT_MOUSE_Y = "Mouse Y";
|
|
|
|
private const float MIN_CAM_DISTANCE = 10f;
|
|
|
|
private const float MAX_CAM_DISTANCE = 40f;
|
|
|
|
[Range(2f, 15f)]
|
|
public float orbitSpeed = 6f;
|
|
|
|
[Range(0.3f, 2f)]
|
|
public float zoomSpeed = 0.8f;
|
|
|
|
private float distance;
|
|
|
|
public float idleRotation = 1f;
|
|
|
|
private Vector2 dir = new Vector2(0.8f, 0.2f);
|
|
|
|
private void Start()
|
|
{
|
|
distance = Vector3.Distance(base.transform.position, Vector3.zero);
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
Vector3 eulerAngles = base.transform.localRotation.eulerAngles;
|
|
eulerAngles.z = 0f;
|
|
if (Input.GetMouseButton(0))
|
|
{
|
|
float axis = Input.GetAxis("Mouse X");
|
|
float num = 0f - Input.GetAxis("Mouse Y");
|
|
eulerAngles.x += num * orbitSpeed;
|
|
eulerAngles.y += axis * orbitSpeed;
|
|
dir.x = axis;
|
|
dir.y = num;
|
|
dir.Normalize();
|
|
}
|
|
else
|
|
{
|
|
eulerAngles.y += Time.deltaTime * idleRotation * dir.x;
|
|
eulerAngles.x += Time.deltaTime * Mathf.PerlinNoise(Time.time, 0f) * idleRotation * dir.y;
|
|
}
|
|
base.transform.localRotation = Quaternion.Euler(eulerAngles);
|
|
base.transform.position = base.transform.localRotation * (Vector3.forward * (0f - distance));
|
|
if (Input.GetAxis("Mouse ScrollWheel") != 0f)
|
|
{
|
|
float axis2 = Input.GetAxis("Mouse ScrollWheel");
|
|
distance -= axis2 * (distance / 40f) * (zoomSpeed * 1000f) * Time.deltaTime;
|
|
distance = Mathf.Clamp(distance, 10f, 40f);
|
|
base.transform.position = base.transform.localRotation * (Vector3.forward * (0f - distance));
|
|
}
|
|
}
|
|
}
|
|
}
|