Unity 之第一人称无重力控制器 您所在的位置:网站首页 unity第一视角在哪找到 Unity 之第一人称无重力控制器

Unity 之第一人称无重力控制器

2024-07-15 13:22| 来源: 网络整理| 查看: 265

最近在项目中遇到一个需求,要求软件中人物的操作为第一人称视角,并且不包含重力。要求用户可以自定义重力。

在经过一番思考之后,我想到了一种解决方案,那就是通过控制相机物体的transform属性,来对相机进行移动。至于相机的视角,我参考了unity自带的第一人称视角控制器的代码来实现。经过一番折腾是实现了,但是在测试过程中发现了一个问题。 那就是

在移动过程中,相机穿越了墙壁!!!!

就算给相机物体添加一个立方体gameobject作为父物体,并且给该父物体添加刚体,也还是没有用。墙壁的碰撞器虽然会触发碰撞事件。但是并没有作用,相机还是会穿越墙壁。这样完全不符合实际的使用需求。经过一番思考,猜测,验证。并参考了系统的FirstPersonController文件,终于找到了原因。原因是对于相机的移动,我是直接了对物体的transform值进行更改来使物体移动,这样我虽然给物体添加了刚体,但是物体并有进行物理学运动,因此物体不会遵循物理学运动现象。

知道了原因,那么就好结局了,既然是因为我对物体进行移动的操作方式有问题,那就换一种操作方式。unity有提供定义好的第一人称控制器,那我去修改一下控制器的代码,变成我需要的代码即可。

在研究了unity自带的控制器代码之后,我发现unity对于移动物体的方式是,对需要移动的物体施加力来进行移动。通过获取物体的rigidbody属性,然后通过AddForce的方式,来对物体进行移动。并且找到了控制器是通过StickToGroundHelper方法将物体固定在地板上,原理是物体向下发射一条射线,如果射线的长度不为0,物体会向下运动。那么是要将StickToGroundHelper方法去除,剩下的代码进行保留,那么就可以实现最基本的无重力第一人称视角。再通过自定义按键,给物体添加向上或者向下的力,来控制物体的向上或者向下运动,就能实现第一人称无重力控制器。

最终的实现代码如下:

public Transform target; private float sliderMouseValue = 0.5f; public bool isScaleFabric = false; public float keyboardSpeed = 2f; [Serializable] public class MovementSettings { public float ForwardSpeed = 2.0f; // Speed when walking forward public float BackwardSpeed = 2.0f; // Speed when walking backwards


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有