第三人称角色移动及自由移动视野(RigidBody实现)
重点:向量的运算.在获得水平及垂直方向的速度之后,将方向进行重设,让方向与视野同步(即:相机的方向与人物方向相同)
下面以一个实例来说明如何操作:
1.如图创建一个地形(Terrain),两个正方体(Cube)(参照物),胶囊(Capsule)。把主摄像机放到Capsule下面当作子物体并且重置一下位置信息.
(为了方便观察可以创建几个材质球给物体附上)
2.把摄像机往后来在Game视图下可以达到如图效果即可:
3.创建两个脚本一个用来控制移动另外一个控制视野转动:(我创建的move和freeLook两个脚本)
move脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using UnityEngine; using System.Collections; public class move : MonoBehaviour { public GameObject camer; //相机 // Use this for initialization void Start () { } // Update is called once per frame void Update () { Vector3 forward = camer.transform.TransformDirection (Vector3.forward); //记录相机前方向 Vector3 right=camer.transform.TransformDirection (Vector3.right); //记录相机右方向 float H = Input.GetAxis ( "Horizontal" ); float V = Input.GetAxis ( "Vertical" ); Vector3 he = H * right + V * forward; //将速度进行合成 GetComponent<Rigidbody> ().MovePosition (transform.position+ he * 5 * Time.deltaTime); //控制移动 } } |
freeLook脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using UnityEngine; using System.Collections; public class freeLook : MonoBehaviour { public GameObject camer; private float speed=5.0f; //转速 // Use this for initialization void Start () { } // Update is called once per frame void Update () { camer.transform.RotateAround ( this .transform.position,Vector3.up,speed*Input.GetAxis( "Mouse X" )); //相机以人物为中心,自身Y轴进行旋转 } } |
4.把相机指定到脚本:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!