我一直在努力将这个实现到我的Unity 2D游戏中,但无法让它发挥作用。通过API挖掘我已经看到了这个Object.FindObjectsOfType.html,但我如何在我的情况下使用它?我有一个名为“InventoryHandler”的JS / UnityScript脚本,它被添加到由其他脚本生成的许多游戏对象中,如何在所有游戏对象中更改变量“selectedBlock”(来自InventoryHandler)?
很抱歉没有代码示例,但我甚至不知道从哪里开始,有任何建议或示例吗?
编辑:代码:
//This is my ItemEffect.js
var itemname = this.gameObject.name;
this.gameObject.AddComponent(InventoryHandler);
var itemnamenew = itemname.Replace("_pickup", "");
selectedBlock = itemnamenew;
var myScripts : InventoryHandler[] = FindObjectsOfType(typeof(InventoryHandler)) as InventoryHandler[];
for (var hinge : InventoryHandler in myScripts) {
hinge.selectedBlock = selectedBlock;
}
//This is my InventoryHandler.js
public var selectedBlock : String;
function Start () {
if (gameObject.name.ToString() != "blok_placed")
{
selectedBlock = gameObject.GetComponent(ItemEffect).selectedBlock.ToString();
}
//This is my BlockSystem.js where I actually read and use selectedBlock var
var block = new GameObject("blok_placed", typeof(SpriteRenderer), typeof(CircleCollider2D), typeof(BoxCollider2D));
block.GetComponent(BoxCollider2D).size = Vector2(1,1);
block.GetComponent(CircleCollider2D).radius = 0.5;
block.tag = "blok";
block.GetComponent(SpriteRenderer).sortingLayerName = "blokovi";
block.AddComponent("BlockSelecting");
block.AddComponent("Blok");
block.AddComponent("InventoryHandler");
var selectedBlock = block.GetComponent(InventoryHandler).selectedBlock;
答案 0 :(得分:0)
我想你已经回答了自己的问题。更改脚本中的变量,该变量分布在多个对象上。您首先需要获取所有这些对象。这可以使用您在问题中提到的Object.FindObjectOfType函数来完成。
因为您似乎无法正确理解此功能的工作原理。我会给出一个小解释。
Object.FindObjectsOfType返回array
Objects
的{{1}}。这type
。例如,您可以执行以下操作
type
现在您拥有所需脚本的var myScripts: ScriptName[] = FindObjectsOfType(ScriptName) as ScriptName[];
。现在要处理这些,您需要Array
或foreach
。在这份文件中已经给出了一个很好的例子。在文件案例中,for
HingeJoint
现在你所要做的就是用一些逻辑替换for (var hinge : HingeJoint in hinges) {
hinge.useSpring = false;
}
来替换变量。如果偏离变量,则可以访问该变量。但如果没有脚本可以查看,没有人能够告诉你这一点。