unity 摄像机跟随物体 第一人称跟随
2017-08-17 14:01
417 查看
摄像机跟随物体的实现方式很多,也都是现成的代码可以直接拿过来用,但是项目中难免围绕这个功能做扩充,所以简单了解下实现原理还是有必要的, 这边简要介绍两种实现方式:以第一人称视角跟随角色。
第一种方式,比较简单:
void cameraFollowFunc_1(){
//先改变坐标
//先设置目标坐标
Vector3 targetPosition = player.position + Vector3.up*_cameraDefaultHeight - player.forward*_cameraDistance;
_camera.position = Vector3.Lerp(_camera.position,targetPosition,Time.deltaTime*4.0f);
//改变方向
//始终观察角色
_camera.LookAt(player);
} 注意:player.forward默认角色z轴为摄像机前方,否则调整这个参数
第二种方式,稍微麻烦:
void cameraFollowFunc_2(){
//摄像机距离差值
float cameraDistance = Mathf.Lerp(30,35,Time.deltaTime*1.5f);
//设置摄像机的方向
//角色y轴偏移为摄像机偏移
float cameraDir = Mathf.Lerp(0,plyer.localEulerAngles.y,Time.deltaTime4.0f);
//设置摄像机偏移
camera.localEulerAngles = new Vector3(0,cameraDir,0);
//开始计算坐标
//以角色为起点,计算角色背后坐标偏移量(y轴不变)
Vector3 direction = rotateAlongY(new Vector3(0,0,-1),player.localEulerAngles.y);
//设置坐标
camera.position = new Vector3(player.position.x + direction.x*cameraDistance,
Mathf.Lerp(camera.position.y,player.position.y+20,Time.deltaTime*70),
Mathf.Lerp(camera.position.z,player.position.z+direction.z*cameraDistance,Time.deltaTime*50)
);
}
/// <summary>
/// 计算相对于角色的坐标偏移向量
/// </summary>
/// <param name="v3">V3.</param>
/// <param name="rotationDeg">Rotation deg.</param>
void rotateAlongY(Vector3 v3,float rotationDeg){
//生成零向量
Vector3 finalVector = Vector3.zero;
//转化成弧度
float Red = rotationDag * Mathf.Deg2Rad;
finalVector.z = Mathf.Cos(-rad)*v3.z;
finalVector.x = Mathf.Sin(-rad)*v3.z;
return finalVector;
}
第一种方式,比较简单:
void cameraFollowFunc_1(){
//先改变坐标
//先设置目标坐标
Vector3 targetPosition = player.position + Vector3.up*_cameraDefaultHeight - player.forward*_cameraDistance;
_camera.position = Vector3.Lerp(_camera.position,targetPosition,Time.deltaTime*4.0f);
//改变方向
//始终观察角色
_camera.LookAt(player);
} 注意:player.forward默认角色z轴为摄像机前方,否则调整这个参数
第二种方式,稍微麻烦:
void cameraFollowFunc_2(){
//摄像机距离差值
float cameraDistance = Mathf.Lerp(30,35,Time.deltaTime*1.5f);
//设置摄像机的方向
//角色y轴偏移为摄像机偏移
float cameraDir = Mathf.Lerp(0,plyer.localEulerAngles.y,Time.deltaTime4.0f);
//设置摄像机偏移
camera.localEulerAngles = new Vector3(0,cameraDir,0);
//开始计算坐标
//以角色为起点,计算角色背后坐标偏移量(y轴不变)
Vector3 direction = rotateAlongY(new Vector3(0,0,-1),player.localEulerAngles.y);
//设置坐标
camera.position = new Vector3(player.position.x + direction.x*cameraDistance,
Mathf.Lerp(camera.position.y,player.position.y+20,Time.deltaTime*70),
Mathf.Lerp(camera.position.z,player.position.z+direction.z*cameraDistance,Time.deltaTime*50)
);
}
/// <summary>
/// 计算相对于角色的坐标偏移向量
/// </summary>
/// <param name="v3">V3.</param>
/// <param name="rotationDeg">Rotation deg.</param>
void rotateAlongY(Vector3 v3,float rotationDeg){
//生成零向量
Vector3 finalVector = Vector3.zero;
//转化成弧度
float Red = rotationDag * Mathf.Deg2Rad;
finalVector.z = Mathf.Cos(-rad)*v3.z;
finalVector.x = Mathf.Sin(-rad)*v3.z;
return finalVector;
}
相关文章推荐
- Unity 3d 实现物体跟随摄像机视野运动
- unity-实现摄像机跟随物体(Vector3.SmoothDamp)
- Unity 控制摄像机跟随运动物体
- Unity 控制摄像机跟随运动物体
- unity中摄像机的跟随移动
- Unity摄像机跟随角色移动
- 【Unity&摄像机&NGUI&2.5D】UILabel跟随角色移动和其参数调整
- Unity)摄像机Camera跟随
- Unity射线,摄像机和物体发射射线
- Unity中物体跟随鼠标的位置
- ugui物体随着摄像机跟随3d场景物体显示
- unity之摄像机跟随玩家移动
- unity 赛车相机跟随物体移动
- [Unity][Camera]判断物体是否在摄像机的可视范围内
- unity中移动摄像机时物体闪烁模糊
- Unity教程之-让物体朝摄像机Camera观察方向移动(一)
- unity3d 摄像机跟随角色时被物体遮挡解决方案
- Unity摄像机跟随Player
- unity3d 摄像机跟随角色时被物体遮挡解决方案
- 【Unity快速实现小功能】动画系统学习小技巧篇(二)——摄像机跟随角色移动