Unity3d 更改附加到许多游戏对象的脚本中的变量?
我一直试图在我的Unity 2D游戏中实现这一点,但无法让它正常工作。在深入研究API时,我看到了这一点,但在我的案例中如何使用它呢?我有一个名为“InventoryHandler”的JS/UnityScript脚本,它被添加到由其他脚本生成的许多游戏对象中,如何更改所有游戏对象中的变量“selectedBlock”(来自InventoryHandler) 很抱歉没有代码示例,但我甚至不知道从哪里开始,有什么建议或示例吗 编辑:代码:Unity3d 更改附加到许多游戏对象的脚本中的变量?,unity3d,unityscript,gameobject,Unity3d,Unityscript,Gameobject,我一直试图在我的Unity 2D游戏中实现这一点,但无法让它正常工作。在深入研究API时,我看到了这一点,但在我的案例中如何使用它呢?我有一个名为“InventoryHandler”的JS/UnityScript脚本,它被添加到由其他脚本生成的许多游戏对象中,如何更改所有游戏对象中的变量“selectedBlock”(来自InventoryHandler) 很抱歉没有代码示例,但我甚至不知道从哪里开始,有什么建议或示例吗 编辑:代码: //This is my ItemEffect.js
//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ć答案中提供了执行此操作所需的全部操作。除非你要提供问题的代码,否则这将是你能得到的最好答案。我用三个脚本中的代码编辑了上面的问题。那么,有什么想法吗?谢谢你的帮助。