Unity摄像机跟随的几种方案
2017-02-23 本文已影响541人
Jens丶
我最喜欢的一个字是吃,两个字是旅行,三个字是你的名字.

晚上好, 接下来给大家分享摄像机的几种跟随方案.
方案1
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour
{
//跟随目标
public Transform mFollower;
//相机的高度
public float offsetY;
//摄像机移动处理一般放在LateUpdate
void LateUpdate ()
{
if (mFollower != null) {
Vector3 targetPoint = mFollower.position;
targetPoint.y += offsetY;
targetPoint.z -= 7f;
transform.position = Vector3.Lerp (transform.position, targetPoint, Time.deltaTime * 5f);
}
}
}
方案2
public class FollowPlayer : MonoBehaviour
{
//玩家
private Transform player;
public float speed = 4.0f;
void Start ()
{
player = GameObject.FindGameObjectWithTag (Tags.player).transform;
}
void Update ()
{
//摄像机跟随
Vector3 targetPos = player.position + new Vector3 (0, 2.0f, -2.7f);
transform.position = Vector3.Slerp (transform.position, targetPos, speed * Time.deltaTime);
Quaternion targetRotation = Quaternion.LookRotation (player.position - transform.position);
transform.rotation = Quaternion.Slerp (transform.rotation, targetRotation, speed * Time.deltaTime);
}
}
方案3
public class CameraScript : MonoBehaviour
{
//摄像机跟离角色有多远
public float distanceAway;
//摄像机在角色上方多高
public float distanceUp;
//摄像机移动的速度
public float smooth;
//目标位置
private Vector3 targetPosition;
//摄像机所跟随的对象的位置,此处是角色物体的位置
Transform follow;
// Use this for initialization
void Start ()
{
//得到要跟随的物体对象的位置
follow = GameObject.FindGameObjectWithTag ("Player").transform;
}
// Update is called once per frame
void Update ()
{
//得到摄像机要移动的目标位置
targetPosition = follow.position + Vector3.up * distanceUp -follow.forward * distanceAway;
//摄像机从当前位置移动到目标位置
transform.position = Vector3.Lerp (transform.position, targetPosition, Time.deltaTime * smooth);
//摄像机要看向角色物体
transform.LookAt (follow);
}
}
方案4
摄像机随鼠标旋转并且限制角度
public class CubeScript : MonoBehaviour
{
float ver;
// 限制角度
float fv = 20;
Quaternion last;
void Update ()
{
ver = Input.GetAxis ("Mouse Y");
float angle = Vector3.Angle (Vector3.up, transform.forward);
if (angle > 90 + fv || angle < 90 - fv) {
transform.rotation = last;
} else {
last = transform.rotation;
Vector3 tmp = new Vector3 (transform.eulerAngles.x - ver * Time.deltaTime * 60f,
transform.eulerAngles.y,
transform.eulerAngles.z);
transform.eulerAngles = tmp;
}
}
}
代码比较简单不在解释, 如有疑问请留言.
另外再分享一个
[仿魔兽世界视角的Demo](https://pan.baidu.com/s/1jI2YI14)
密码: jt9s