在以前的仿真项目中用到了第三人称视角的移动,
W
、
S
、
A
、
D
控制角色的前后左右移动,摄像机跟随角色移动,并且摄像
机做了缓冲处理。鼠标右键长按旋转控制镜头旋转,中键滑轮控制镜头拉进拉远。分为两个脚本,
CharacterThirdControl
挂在角色身上,
CameraThirdControl
挂在跟随摄像机身上。角色的标签设置为
Player
。跟随摄像机为主摄像机(可以根据
自己需求改变)
。下面直接贴代码,代码中已有注释:
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();
}
void
LateUpdate()
{
PlayerControl();
}
///
///
计算方向向量函数
///
private
void
CalculateDirection()
{
Vector3 temp = transform.position - myCamera.position;
temp =
new
Vector3(temp.x, 0, temp.z);
front = temp;
if
(correctDirect!=Vector3.zero && Mathf.Abs(correctDirect.x-front.x)
Mathf.Abs(correctDirect.z - front.z)
//
判断是否在误差范围内
{
front = correctDirect;
}
back = -front;
left =
new
Vector3(-front.z, 0, front.x);
right = -left;
correctDirect = front;
}