参考官网实例:http://wiki.unity3d.com/index.php?title=MouseOrbitImproved
using UnityEngine;
using System.Collections;
public class Follow : MonoBehaviour
{
// 目标对象
public Transform targetObj = null;
// 摄像头与目标的最远距离
public float maxDistance = 100;
// 摄像头与目标的最小距离
public float minDistance = 1;
// 摄像头与目标的当前距离
public float currentDistance = 50;
// 滚轮与距离的控制粒度,值越大,粒度越大;反之越小
public float scrollWheelSpeed = 3;
public Vector3 velocity = Vector3.zero;
// public Vector3 direct = new Vector3(0, 0, 1);
private float rotateX = 0.0f;
void Start()
{
Cursor.visible = false;
}
void LateUpdate()
{
if (null == this.targetObj)
return;
FollowTarget();
RotateCamera();
}
/// <summary>
/// 跟随目标
/// </summary>
private void FollowTarget()
{
// 鼠标滚轮值
float scrollWheel = Input.GetAxis("Mouse ScrollWheel");
this.currentDistance -= scrollWheel * this.scrollWheelSpeed;
this.currentDistance = Mathf.Clamp(this.currentDistance, this.minDistance, this.maxDistance);
Vector3 vector = new Vector3(0, 1.5f, this.currentDistance * -1);
vector = this.targetObj.TransformVector(vector);
this.transform.LookAt(this.targetObj.position);
Vector3 targetPosition = this.targetObj.transform.position + vector;
this.transform.position = Vector3.SmoothDamp(this.transform.position, targetPosition, ref velocity, 0.3f);
}
/// <summary>
/// 鼠标控制摄像头旋转代码
/// </summary>
private void RotateCamera()
{
this.rotateX += Input.GetAxis("Mouse X");
this.targetObj.rotation = Quaternion.Euler(0, this.rotateX, 0);
}
}