-1

我一直试图在我的 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;
4

1 回答 1

0

我想你已经回答了你自己的问题。要更改脚本中的变量,即分布在多个对象上。您首先需要获取所有这些对象。这可以使用问题中提到的Object.FindObjectOfType函数来完成。

因为您似乎没有正确理解此功能的工作原理。我会做一个小小的解释。

Object.FindObjectsOfType 返回一个arraywith Objectsof a type。这type. 例如,您可以执行以下操作

var myScripts: ScriptName[] = FindObjectsOfType(ScriptName) as ScriptName[];

现在你已经拥有了Array你需要的所有脚本。现在要处理这些,您将需要 aforeachfor. 在这个文档中已经给出了一个很好的例子。在文档案例中,哪个给出了HingeJoint

for (var hinge : HingeJoint in hinges) {
        hinge.useSpring = false;
    }

现在你所要做的就是hinge.useSpring = false;用一些逻辑来替换变量。如果偏离路线,该变量是可访问的。但是如果没有一个脚本来查看,没有人能够告诉你这一点。

于 2015-02-16T14:45:29.433 回答