【静下心学习Unity】学习笔记 (三)Unity Physics - Hinge Joint(铰链关节) 实现门的功能

来源:互联网 发布:mpp文件打开软件 编辑:程序博客网 时间:2024/05/04 12:10

Hinge Joint

摘自Unity圣典 - Hinge Joint 章节

The Hinge Joint groups together two Rigidbodies, constraining them to move like they are connected by a hinge. It is perfect for doors, but can also be used to model chains, pendulums, etc.

铰链关节由两个刚体组成,约束它们像连在一个铰链上一样运动,适用于门,不过对于典型的链子、钟摆等同样适用。

在通过浏览Unity圣典中的用户手册进行重新学习Unity的过程中,看到了之前并未学习的Joint(圣典中翻译为:关节)一章,其中的Hinge Joint(铰链关节)指出,可以通过该组件实现门与墙(门柱)的连接功能,以此来实现玩家打开门时,对门施加一个力,通过这个力与铰链关节内部力的作用,使得门有一种被推开的表现。

接下来进入实际操作阶段。

步骤

  1. 新建两个Cube,一个作为墙体(门柱)命名为Wall,一个作为门命名为Door,Scale与Position可以按照自己的喜好定义。
  2. 再新建一个Cube,作为玩家的代替物,命名为Person。
  3. 接下来,为Wall、Door、Person都添加RigidBody组件,将三者的RigidBody组件的Use Gravity属性的勾去掉(设为false,不使用重力,因为此处我们没有地面),其中,Wall与Person的RigidBody组件的Is Kinematic属性打上勾(设为true,使其不受物理引擎驱动,Wall是为了防止其移动,Person是为了防止其受到力不断旋转—看的心塞=v=)
  4. 在Door物体上添加Hinge Joint组件,这里就不解释Hinge Joint组件的各属性名了,有兴趣的朋友可以访问Unity官方手册或者Unity圣典中的用户手册查阅,这里也给出圣典链接:(http://www.ceeger.com/Components/class-HingeJoint.html)
  5. 为Hinge Joint组件设置值:

    1. Connected Body 连接的物体保留为None。
      这里有的朋友可能就会问了,为什么不是将Wall赋值到这里来,使得门与墙连接呢?因为留空的话,会默认与世界连接,而这一点,在手册上也有提到:

      A single Hinge Joint should be applied to a GameObject. The hinge will rotate at the point specified by the Anchor property, moving around the specified Axis property. You do not need to assign a GameObject to the joint’s Connected Body property. You should only assign a GameObject to the Connected Body property if you want the joint’s Transform to be dependent on the attached object’s Transform.

      单独的铰链关节要连在游戏对象上。铰链会绕着Anchor 属性指定的点,沿着 指定的Axis 属性方向移动。不需要给关节的Connected Body 属性分配游戏对象。只有希望关节的Transform依赖附加对象的Transform时,才需要分配游戏对象给Connected Body属性。

    2. Anchor 锚点位置,该值按照门与墙的相对位置来设置,如下图:
      Anchor设置
      这里的Wall在Door的z轴的负方向上,所以将Anchor设为0,0,-0.5。Anchor的x y z值对锚点的影响为:z为0时,z轴方向上锚点在原点,z=0.5时,z轴方向上锚点在物体的边缘,大家多设置几个值就明白了。在这,我们需要将锚点设置到门与墙连接的位置。

    3. Axis 坐标轴,有点类似与Rotation对物体的影响一样,这里我们需要门以与墙连接的位置为轴进行旋转,所以设置Axis = 0,1,0
  6. 设置完毕,运行项目,点击Person物体,直接通过移动工具使其移动,并令其撞上门(像推开门一样),就可以看到门被推开,过一会儿会旋转回原位(但由于我们设置比较简单,若门陷入墙中时将无法自行返回,这需要进行进一步的设置,子旭表示还未实现- -因为我也是刚学到这里的嘛~求谅解。)如下图:
    推门
    进入
    归位

Over~

0 0