using UnityEngine;
using System.Collections;
public class ControlObject : MonoBehaviour {
public GameObject target;
Vector3 screenPoint;
Vector3 StartPosition;
Vector3 previousPosition;
Vector3 offset;
Vector3 finalOffset;
Vector3 eulerAngle;
public float RotateSpeed = 1; //旋转速度
public float RotateInertiaSpeed = 0; //旋转惯性速度
bool isSlide;
float angle;
public float MouseWheelSensitivity = 10; //缩放单位
public float MouseZoomMin = 1f; //最小缩放
public float MouseZoomMax = 100f; //最大缩放
void Start()
{
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
screenPoint = Camera.main.WorldToScreenPoint(target.transform.position);
offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, 0, screenPoint.z));
}
if (Input.GetMouseButton(0))
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
target.transform.position = curPosition;
}
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
if (Camera.main.GetComponent<Camera>().fieldOfView >= MouseZoomMin && Camera.main.GetComponent<Camera>().fieldOfView <= MouseZoomMax)
{
Camera.main.GetComponent<Camera>().fieldOfView += Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;
}
if (Camera.main.GetComponent<Camera>().fieldOfView < MouseZoomMin)
{
Camera.main.GetComponent<Camera>().fieldOfView = MouseZoomMin;
}
if (Camera.main.GetComponent<Camera>().fieldOfView > MouseZoomMax)
{
Camera.main.GetComponent<Camera>().fieldOfView = MouseZoomMax;
}
}
if (Input.GetMouseButtonDown(1))
{
StartPosition = Input.mousePosition;
previousPosition = Input.mousePosition;
}
if (Input.GetMouseButton(1))
{
offset = Input.mousePosition - previousPosition;
previousPosition = Input.mousePosition;
transform.Rotate(Vector3.Cross(offset, Vector3.forward).normalized, offset.magnitude * RotateSpeed, Space.World);
}
if (Input.GetMouseButtonUp(1))
{
finalOffset = Input.mousePosition - StartPosition;
isSlide = true;
angle = finalOffset.magnitude;
}
if (isSlide)
{
transform.Rotate(Vector3.Cross(finalOffset, Vector3.forward).normalized, angle * RotateInertiaSpeed * Time.deltaTime, Space.World);
if (angle > 0)
{
angle -= 5;
}
else
{
angle = 0;
}
}
}
}