实现第三人称视角有三种:

方案1:

最简单的就是 直接 把主相机作为Player角色的子物体,并自行固定好相机的位置

方案2:

设置一个空的GameObject,并且与Player的旋转和位置保持一致,然后将 主相机 设置成该GameObject的子对象。这种做法和方案 1 相似。
(这种做法好处在于 当模拟角色死亡倒地的时候比较方便,如果采用方案 1 ,只能是重新创建一个相机,因为角色倒地的时候,子物体相机也会视角倒地,所以效率肯定方案 2 高)

方案3:

通过代码动态改变相机的位置,使相机始终保持在自己想要的位置上,当物体旋转时,同理。

  • 代码实现相机跟随物体,可使用一个接口函数Vector3.SmoothDamp() 平滑阻尼 。
    函数介绍:随着时间的推移,逐渐改变一个向量朝向预期的目标(有点类似受阻力减速运动)
                     在官方的手册里也有推荐用此函数 来实现 平滑的相机跟随
                     Unity手册—-Vector3.SmoothDamp() 传送门
public static Vector3 SmoothDamp(Vector3 current,                //当前物体位置Vector3 target,                 //目标位置ref Vector3 currentVelocity,    //当前速度,这个值由你每次调用这个函数时被修改//虽然使用ref关键字,不过函数运行时会自动修改//一般传入参数值为0float smoothTime,               //到达目标的大约时间,较小的值将快速到达目标float maxSpeed = Mathf.Infinity,//选择允许你限制的最大速度(默认为正无穷)float deltaTime = Time.deltaTime//自上次调用这个函数的时间(默认为Time.deltaTime)
); 
  • 以下代码为 相机跟随物体 旋转与移动 实例:
public GameObject thirdPersonPlayer;    //角色
public GameObject FollowCamera;         //跟随相机
public float CameraSmoothTime = 0;
private Vector3 velocity = Vector3.zero;
void Update()
{
//相机跟随旋转float x = RotateSpeed * Input.GetAxis("Mouse X");//以下为相机与角色同步旋转是FollowCamera.transform.rotation = Quaternion.Euler(FollowCamera.transform.rotation.eulerAngles +  Quaternion.AngleAxis(x, Vector3.up).eulerAngles);//原理: 物体当前的欧拉角 + 鼠标x轴上的增量所产生的夹角thirdPersonPlayer.transform.rotation = Quaternion.Euler(thirdPersonPlayer.transform.rotation.eulerAngles +Quaternion.AngleAxis(x, Vector3.up).eulerAngles);//同理
//------------------------------------------------------>>>>>>>>
//相机跟随移动Vector3 TargetCameraPosition = thirdPersonPlayer.transform.TransformPoint(new Vector3(0, 4.5f, -5.5f));//获取相机跟随的相对位置,再转为世界坐标FollowCamera.transform.position = Vector3.SmoothDamp(FollowCamera.transform.position,TargetCameraPosition,ref velocity,CameraSmoothTime, //最好为0Mathf.Infinity,Time.deltaTime);
}

CameraSmoothTime 个人建议设为 <=0.001(直接为0)
由于平滑阻尼函数类似于减速运动,到达时间设定太长(例如0.5)的话,会出现相机跟随太慢。
还有一种情况就是(例如0.01),相机完成平滑阻尼运动仍需时间,但时间太短,会使相机不停前后抖动,从而产生角色抖动的现象。


题外话,关于相机跟随的一些建议与探讨:

  • 当物体移动和相机跟随的刷新频率不同时,常常会出现物体抖动的问题,解决这个问题的最好方法是:
    当角色的移动和旋转放在Update()中,那么就可以把所有相机的移动旋转放在LateUpdate()。
    这是为了在相机追踪角色位置之前,确保角色已经完成移动与旋转。

  • 如果相机在跟随物体A时,画面同时还有物体B,此时物体A和物体B的刷新频率需要保持一致,否则物体二仍然会出现抖动
    例如:物体A使用rigidbody移动物体,物体B使用改变transform.position来移动且在Update中刷新,此时物体B会发生抖动。
    原因是物体A的rigidbody刷新是在FixedUpdate()中,而物体B在Update(),刷新频率不同导致感觉物体B抖动
    此时解决方法如果不改变物体A的移动方式则需要把物体B的刷新放在FixedUpdate()中

Unity3d--实现第三人称视角(相机跟随)相关推荐

  1. Unity3D之第三人称视角相机跟随

    文章目录 前言 角色层级 挂载脚本 实现效果 后话 前言 这次实现类似绝地求生这个游戏中的 第三人称视角 的相机跟随 角色层级 直接把相机挂载到角色模型作为子级 调整好角度与位置,初步实现第三人称视角 ...

  2. Unity3D中第三人称视角的镜头跟随和目标锁定

    从2D游戏到3D游戏的进化,最重要的就是游戏视角的控制.奠定了3D游戏操作模式的1998年的神话级游戏<塞尔达传说:时之笛>中,对3D下游戏视角设计的关键即在于"镜头跟随&quo ...

  3. Unity3D第三人称视角摄像机、跟随与球面旋转

    Unity3D第三人称视角摄像机.跟随与球面旋转 逻辑释义 图解分析 Unity C#代码 逻辑释义 [关键transform] 1[玩家] 2[注视目标点] 3[摄像机] [摄像机]跟随[注视目标点 ...

  4. rust第三人称视角插件_一个第三人称游戏相机的实现(基于rust语言和cgmath库)...

    我在学校时就对角色扮演类3D游戏感兴趣,毕业那会研究过第三人称视角的游戏相机的实现(基于D3D),但由于没有想到合适的计算方法,最后实现出来的程序有BUG,并且没找出原因. 最近看到git有rust写 ...

  5. [Unity3d]第一人称和第三人称视角完美切换

    最近一直在搞3D漫游,在第一人称和第三人称视角切换碰到些问题,视角的例子我是导入的官方的character controller包,不得不佩服官方脚本语言的写法,看了一下写的很完美,新手估计比较难看懂 ...

  6. 摄像机跟随之第三人称视角(一)

    在我们开发游戏的时候,总避免不了对摄像机的设置,当然,这也因为每款游戏类型不一样,所以摄像机的跟随或者说放置位置不一样,这也要求我们写出合适的算法.本篇就主要是针对第三人称视角的摄像机,进行算法设计分 ...

  7. Three.js漫游相机控制器/three.js第三人称视角漫游/three.js第一人称视角漫游

    Three.js三维可视化引擎没有实现第三人称漫游控制器,第一人称实现的也很一般,大部分满足不了需求,需要自己手动去写一个.以下是模仿其它平台写的第三人称视角漫游,也可以简便的改写成第一人称. 下面是 ...

  8. Unity3D 人称设置(第一人称视角、第三人称视角)

    设置第一人称视角 1.把物体的坐标和摄像机的坐标设置成一样的,这样摄像机就在物体内部,就是第一人称的视角. 2.把摄像机拖拽进物体对象内,摄像机变成物体的子对象,这样摄像机就能跟着物体一起移动. 设置 ...

  9. Unity 3D第三人称视角、用途广泛限定角度(视角不能360度翻转)

    Unity第三人称相机视角控制 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心 ...

最新文章

  1. 取eclipse console 打印字符串,判断日志是否有异常
  2. eplise怎么连接数据库_基于手机信令的大数据分析教程(一)数据导入数据库
  3. 机器学习实践:了解数据核心的通用方法!
  4. 智能车竞赛技术报告 | 单车拉力组 - 沈阳航空航天大学 - 青梅绿茶队
  5. Druid.io索引过程分析——时间窗,列存储,LSM树,充分利用内存,concise压缩
  6. kotlin学习笔记——枚举、封闭类
  7. 【整理】MySQL 之 autocommit
  8. django http404 详解
  9. telnet黑屏就是通_黑屏的智能农贸市场竟通过验收?市场监管部门:工作力度不够 | 电视问政...
  10. KV型内存数据库Redis
  11. WPF系列教程(十六):文本控件——TextBox、RichTextBox、PasswordBox
  12. linux下各种后缀名文件的压缩和解压缩
  13. 网页端epub阅读器你试过吗?这些阅读器竟然这么好用,书迷必看
  14. 2022年上半年软件设计师常考概念
  15. 测评盘点2021十大淘宝购物优惠券app,高省是一个怎样的角色?
  16. 道高一尺 魔高一丈 内存泄漏智能指针
  17. html扫码支付,WEB端第三方支付接入 - 支付宝 - 扫码支付
  18. ORA-00937: 不是单组分组函数
  19. 咸鱼前端—CSS盒子模型
  20. web应用开发平台,微信web开发者

热门文章

  1. javascript工具类函数
  2. tg测试软件,TG Pro——硬件温度检测工具
  3. linux内核内存问题检测调试
  4. 数据分析--python
  5. labelmx电子监管码条码设计软件
  6. Allegro专题【1】——orcad创建元器件方法
  7. BIM Revit2016下载安装教程
  8. Revit server安装配置
  9. JavaWeb7.2【HTML标签:文件标签、文本标签】
  10. p2p半分布式开源项目调研: