Unity3d 更改附加到许多游戏对象的脚本中的变量?

Unity3d 更改附加到许多游戏对象的脚本中的变量?,unity3d,unityscript,gameobject,Unity3d,Unityscript,Gameobject,我一直试图在我的Unity 2D游戏中实现这一点,但无法让它正常工作。在深入研究API时,我看到了这一点,但在我的案例中如何使用它呢?我有一个名为“InventoryHandler”的JS/UnityScript脚本,它被添加到由其他脚本生成的许多游戏对象中,如何更改所有游戏对象中的变量“selectedBlock”(来自InventoryHandler) 很抱歉没有代码示例,但我甚至不知道从哪里开始,有什么建议或示例吗 编辑:代码: //This is my ItemEffect.js

我一直试图在我的Unity 2D游戏中实现这一点,但无法让它正常工作。在深入研究API时,我看到了这一点,但在我的案例中如何使用它呢?我有一个名为“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;

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

因为您似乎没有正确理解这个函数是如何工作的。我会给你一个小小的解释

Object.FindObjectsOfType返回一个
数组
,其中
对象
类型
。此
类型
。例如,您可以执行以下操作

var myScripts: ScriptName[] = FindObjectsOfType(ScriptName) as ScriptName[];
现在您有了一个包含所有所需脚本的
数组。现在要处理这些,您需要一个
foreach
for
。本文件中已经给出了一个很好的示例。在文档案例中,给出了一个
HingeJoint

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

现在您所要做的就是替换
hinge.useSpring=false。如果偏离航线,变量是可访问的。但是如果没有剧本,没有人能告诉你这一点

首先,将所有这些实例列在某种数组中。并给我们一份脚本副本,您希望在其中修改值。@MXD编辑脚本中的变量不是问题,但如何在所有游戏对象中编辑它?我如何将所有这些实例放入一个数组?@MXD也许更合适的问题是:如何获取所有连接了该脚本的游戏对象,然后更改其变量?但这个问题您已经回答了。FindObjectSoftype我已经把它添加到我的代码中,但它并不是我想要的。我希望它按以下顺序操作:以“InventoryHandler”脚本作为组件获取所有游戏对象,在每个游戏对象中更改变量“selectedBlock”。@AmarKalabić答案中提供了执行此操作所需的全部操作。除非你要提供问题的代码,否则这将是你能得到的最好答案。我用三个脚本中的代码编辑了上面的问题。那么,有什么想法吗?谢谢你的帮助。