using UnityEngine;
|
|
namespace Flexalon.Samples
|
{
|
// Simple camera controller.
|
// Use WASD or arrows to move. Rotate with right mouse button.
|
// Pan with mouse wheel button.
|
public class FlexalonSampleCamera : MonoBehaviour
|
{
|
public float Speed = 0.2f;
|
public float RotateSpeed = 0.2f;
|
public float InterpolationSpeed = 20.0f;
|
|
private Vector3 _targetPosition;
|
private Quaternion _targetRotation;
|
private float _alpha;
|
private float _beta;
|
private Vector3 _mousePos;
|
|
void Start()
|
{
|
_targetPosition = transform.position;
|
_targetRotation = transform.rotation;
|
var euler = _targetRotation.eulerAngles;
|
_alpha = euler.y;
|
_beta = euler.x;
|
}
|
|
void Update()
|
{
|
#if UNITY_GUI
|
if (UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject)
|
{
|
return;
|
}
|
#endif
|
|
if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))
|
{
|
_targetPosition += transform.forward * Speed;
|
}
|
|
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
|
{
|
_targetPosition += -transform.right * Speed;
|
}
|
|
if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
|
{
|
_targetPosition += transform.right * Speed;
|
}
|
|
if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))
|
{
|
_targetPosition += -transform.forward * Speed;
|
}
|
|
if (Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
|
{
|
_mousePos = Input.mousePosition;
|
}
|
|
if (Input.GetMouseButton(1))
|
{
|
var delta = Input.mousePosition - _mousePos;
|
_alpha += delta.x * RotateSpeed;
|
_beta -= delta.y * RotateSpeed;
|
_targetRotation = Quaternion.Euler(_beta, _alpha, 0);
|
_mousePos = Input.mousePosition;
|
}
|
|
if (Input.GetMouseButtonDown(2))
|
{
|
_mousePos = Input.mousePosition;
|
}
|
|
if (Input.GetMouseButton(2))
|
{
|
var delta = Input.mousePosition - _mousePos;
|
_targetPosition -= delta.y * transform.up * Speed;
|
_targetPosition -= delta.x * transform.right * Speed;
|
_mousePos = Input.mousePosition;
|
}
|
|
transform.position = Vector3.Lerp(transform.position, _targetPosition, Time.deltaTime * InterpolationSpeed);
|
transform.rotation = Quaternion.Slerp(transform.rotation, _targetRotation, Time.deltaTime * InterpolationSpeed);
|
}
|
}
|
}
|