自定义Action-Constant ID
在上一教程中,我们创建了一个自定义Action,该Action会影响场景中任何刚体的重力设置。但是,它只适用于“编辑”模式下场景中存在的对象:它不适用于在游戏中实例化的prefab,也不适用于“ActionList”资源文件。我们现在将通过使用Constant ID来解决此问题。
Constant ID是Adventure Creator在场景之间跟踪游戏对象的方式。当Constant ID脚本附加到GameObject或Prefab时,它给自己分配了一个Constant ID号,我们可以将其合并到Action中。这将允许我们的Action在涉及资产文件时发挥作用。
当作为Assets的ActionList引用Scene中的对象时,就会自动给Scene内的对象附加Constant ID。因为Asset里面的ActionList绝大部分是为了在不同的场景中复用的,不同的场景引用不同的对象,有了Constant ID就能第一时间确定引用,但是我们的ActionGravity还不能支持这个功能,这就是这一节要添加的。
我们首先声明一个新的整数,将ID号记录下来:
1 | public GameObject objectToAffect; |
当我们在ActionGravity
面板上添加一个带有Rigidbody的对象时,我们希望自动添加一个ID号的引用,可以这样修改ShowGUI
的代码:
1 | public override void ShowGUI () |
这样我们的ActionGravity就能自动创建Constant ID了,我们将我们的ActionGravity放在一个Asset的ActionList里,然后引用一个场景里的对象的话,Constant ID便会自动创建。
最后,如果条件成立,我们将使用这个Constant ID号重新分配objectToAffect
变量。我们可以插入一个新函数AssignValues
,它将在运行Action之前被调用:
1 | public override void AssignValues() |