如何从另一个脚本Unity C#2D

时间:2018-08-02 18:43:45

标签: c# unity3d gameobject

我已经实例化了多个游戏对象,例如代码的这一部分:

GameObject newCard = Instantiate(CardPrefab, new Vector3(x, y, z), transform.rotation);

x,y和z是参数,因此我可以在不同位置生成对象。

我的问题是如何从另一个脚本访问游戏对象的名称或属性。我的每个游戏对象都有一个为其赋予值的属性。

在另一个脚本中,我想添加所有对象的值,但是我不确定如何从另一个脚本访问对象以获取其名称和值。

感谢支持。

2 个答案:

答案 0 :(得分:2)

如果您尝试使用完成的方式访问GameObjects名称,则只需说一遍即可:

newCard.name = "The new name!";

如果您尝试访问分配给此特定GameObject的脚本的属性,则最好执行以下操作:

public class card : MonoBehavior {
    public int faceValue;
    public int suitValue;
    //  or whatever else you need in your card...

}

在生成器对象中:

public class Spawner : MonoBehaviour {
    public Card cardPrefab;  // Instantiate will spawn this correctly and return the attached component to you.  
                             // Less prone to error for this specific script since we are expecting a prefab
                             // with a card script attached.

    // Spawn Method
    void SpawnCard(float x, float y, float z, int value, int suitValue)
    {
        Card newCard = instantiate(cardPrefab, new Vector3(x, y, z), transform.rotation);
        newCard.gameObject.name = "someName";
        newCard.faceValue = value;
        newCard.suitValue = suitValue;
    }

}

要使用此脚本访问所有游戏对象,您可以创建某种形式的管理器来跟踪创建它们的所有对象(首选方法),

或...

您可以使用GameObject.FindObjectsOfType<Card>(),当您获得更大的场景时,它会非常慢,如果您的场景很小,那就可以了。

答案 1 :(得分:1)

您可以做的一件事是使用 GameObject.Find({String gameobjectname})方法,如here所述。这将搜索所有游戏对象,并将游戏对象引用返回给具有相同名称的对象。问题是它只会返回一个。

另一件事是您可以使用 GameObject.FindGameObjectsWithTag({String tag})。为此,您需要确保每个对象都有一个标签。根据您的对象名称为card,我将标签设置为Cards。然后,您可以使用返回的数组并对其进行所需的处理。已记录为here