在以前的仿真项目中用到了第三人称视角的移动,W、S、A、D控制角色的前后左右移动,摄像机跟随角色移动,并且摄像机做了缓冲处理。鼠标右键长按旋转控制镜头旋转,中键滑轮控制镜头拉进拉远。分为两个脚本,CharacterThirdControl挂在角色身上,CameraThirdControl挂在跟随摄像机身上。角色的标签设置为Player。跟随摄像机为主摄像机(可以根据自己需求改变)。下面直接贴代码,代码中已有注释:
1,CharacterThirdControl.cs
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class CharacterThirdControl: MonoBehaviour {
Transform myCamera; //跟随摄像机
private CharacterController cc;
Vector3 playerDirect; //角色的目标方向
Vector3 correctDirect; //为了矫正计算方向向量的误差
float perError = 0.2f; //误差与摄像机缓冲存在关系
float speed = 0.1f; //速度与Update的帧数有关,同样数据帧数越多,速度越快
Vector3 front; //前
Vector3 back; //后
Vector3 left; //左
Vector3 right; //右
// Use this for initialization
void Start()
{
myCamera = Camera.main.transform; //将主摄像机设置为跟随摄像机
front = Vector3.zero;
back = Vector3.zero;
left = Vector3.zero;
right = Vector3.zero;
correctDirect = Vector3.zero;
cc = transform.GetComponent<CharacterController>();
}
void LateUpdate()
{
PlayerControl();
}
/// <summary>
/// 计算方向向量函数
/// </summary>
private void CalculateDirection()
{
Vector3 temp = transform.position - myCamera.position;
temp = n