Unity的四种常见移动方法

        能让自己的物体动起来一定很酷,让我们来总结一点关于移动的方法吧

一.Transform组件

        你知道的我们总是可以调用物体的身上的组件,修改组件上的参数,以此来完成我们对物体的控制,在transform中有关于物体的三维坐标,角度等。

        我首先定义了一个公共的浮点型变量,用它来实现我们对速度大小的控制。

        在Update中我调用transform组件中Translate方法来改变他的三维坐标,Translate方法会将身后的括号内的三维向量加到物体坐标上。

Translate ( x轴,y轴,z轴,(参考系) ); 

//(默认为自身参考系)

        在为三维坐标赋值的时候可以发现 我使用了speed * Time.deltaTime以此将每帧赋值变为每秒赋值。这样更符合人的直觉。

        值得一提的是,这种坐标改变默认参考的是自身坐标系,物体自己的旋转会影响移动的方向。也可以在三维向量后面标明 Space.World ,会发现相机旋转不会改变物体移动的方向,有种脖子落枕的美。

二.Lerp插值方法

        如果说transform中的移动像是物理中的路程,只在意过程。那Lerp方法就像是物理中的位移,只在意起点和终点。

Lerp(当前位置(v1),目标位置(v2),时间(t))

//时间越小,物体移动速度越慢

        我定义了一个公共的Transform组件,它的position就是目标位置,物体的跟随速度是非线性的,所以看起来很丝滑,适合做一些动画或者摄像机跟随。也可以使用Slerp (v1,v2,t)函数它的跟随曲线是圆弧过渡效果更好。

三.Rigidbody组件

        Rigidbody会为物体附上灵魂,符合物理规则的灵魂,也可以通过调整参数来控制它。

        如果走在路上想让一块石头向前移动,那我可能会从后面踢它一脚,因为现实中石头一定有Rigidbody组件,它的其中几种方法是:

1.AddForce(力的大小和方向(v3),力的模式)

//力的大小和方向可以用一个三维向量来表示。

//力的模式

1.Force(一直给这个力,受到质量影响)

2.Acceleration(一直给这个加速度,无视质量)

3.Impulse(给一次这个力,受到质量影响)

4.VelocityChange(给一个这个加速度,无视质量)

        通常会把涉及物理计算和逻辑判断放在FixedUpdate()函数中,这样会更精准,是的他们都这么说,可能和更新频率有关系。我尝试了把这段代码放到Update()中,但它显然不会使用牛顿第二定律。

2.MovePosition(目标位置(v4))

//它和transform.translate()差不多 别忘了乘上Time.deltaTime,让他慢一点,更符合直觉一点。

3.Velocity(一个速度向量(v5))

//直接更改一次物体的速度,很适合用来做跳跃,大家一般都会用它。

//注:Vector3 b = (0,20,0);

        当我点击鼠标左键时,物体的速度被设置为(0,20,0),它看起来就像是突然跳起来一样哈哈。

四.CharacterController组件

        终于到最后一个了,就和它的名字一样角色控制器,它天生就该来控制角色移动,它的其中一个方法是:

Move(一个三维向量(v6))

        有意思的是它没有重力效果,但是他有刚体的部分性质(比如碰撞体),想要模拟重力效果可以通过改变y轴的值来实现。

五. 真酷啊,来总结一下吧。

        1.transform中我可以调用translate方法直接更改物体的坐标同时乘上Time.deltaTime来让物体按时间移动,相较于Rigidbody和CharaterController,它可能没有碰撞和物理效果。

        2.Lerp和SLerp函数通过给起点和终点,来进行平滑的移动,用在摄像机跟随上可能会不错

        3.Rigidbody可以让物体符合力学,可以用在很多场景。

        4.CharacterController可以用于人物控制,它的自定义程度很高,感觉可以用来优化人物移动和下落的手感。       

现在我已经学会了基础的移动方法,和我一起动手做起来吧!

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Unity物理系统常用的方法包括: 1. 创建碰撞体:使用Colliders组件来添加碰撞体,如BoxCollider、SphereCollider和CapsuleCollider等。碰撞体负责检测对象之间的碰撞和触发事件。 2. 添加刚体:使用Rigidbody组件来给物体添加刚体属性。刚体可以模拟物体的质量、重力、速度、受力等物理属性,并与其他物体进行交互。 3. 碰撞检测:利用OnCollisionEnter、OnCollisionExit和OnCollisionStay等方法来检测对象之间的碰撞。可以在碰撞发生时触发相应的事件或执行特定的操作。 4. 触发器:使用Trigger来进行触发器的判定,使用OnTriggerEnter、OnTriggerExit和OnTriggerStay等方法来触发相应的事件。 5. 物理材质:通过给对象添加PhysicMaterial来模拟物体的摩擦力和弹性等特性。可以调整材质的属性来改变物体之间的碰撞效果。 6. 接触点信息:使用Collision和Collider组件来获取碰撞点的信息,如碰撞点的坐标、法线方向、碰撞力等。 7. 约束和关节:可以使用关节和约束来模拟物体之间的连接和限制。常见的约束和关节包括HingeJoint、FixedJoint和SpringJoint等。 8. 物理效果:可以模拟物体的运动效果,如重力、摩擦力、空气阻力等。可以使用AddForce、AddTorque等方法来给物体施加力或扭矩。 9. 物理射线:使用Physics.Raycast和Physics.RaycastAll等方法来进行射线检测。可以检测射线与物体之间是否发生碰撞,并获取碰撞点的信息。 10. 物理特效:使用Particle System组件来添加粒子效果,如火花、烟雾、水花等。可以通过设置粒子的速度、大小和颜色等属性来模拟物理现象。 以上是Unity物理系统常用的方法,可以用来实现物体之间的碰撞、运动、连接等物理效果。 ### 回答2: Unity物理系统常用方法包括: 1. 添加碰撞器(Collider):在物体上添加碰撞器组件,可以使物体参与碰撞检测和物理模拟。 2. 添加刚体(Rigidbody):在具有碰撞器的物体上添加刚体组件,使物体具有物理属性,如重力、施力和受力的效果。 3. 碰撞检测:使用碰撞器进行碰撞检测,可以通过判断是否发生碰撞来进行相关处理,比如触发事件、改变游戏状态等。 4. 物理模拟:通过刚体组件和物理材质(Physic Material)来模拟物体的物理行为,如弹力、摩擦力、空气阻力等。 5. 使用力(Force):通过添加力的方式来施加物体的作用力,可实现物体的移动、旋转等效果。 6. 刚体运动控制:通过改变刚体的速度、角速度或应用力矢量来控制物体的运动,以实现自定义的物理模拟效果。 7. 碰撞事件:当物体发生碰撞时,可以通过碰撞事件(OnCollisionEnter、OnCollisionStay、OnCollisionExit)来触发特定的逻辑或动作。 8. 触发器(Trigger)和触发事件:触发器是一种特殊的碰撞器,不会产生物理效果,但可以检测两个物体之间的触发事件(OnTriggerEnter、OnTriggerStay、OnTriggerExit)。 9. 射线投射:通过创建射线(Ray)对象并进行投射,可以检测物体是否被射线所穿过,常用于射线检测碰撞或点击选择物体。 10. 物理层和层掩码:通过设置物理层和层掩码,可以对不同物体进行过滤,控制碰撞或触发事件的发生。 以上是Unity物理系统常用的一些方法,在游戏开发中,熟练掌握这些方法可以实现丰富多样的物理效果和交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值