c# - 如何从另一个脚本访问任何创建的游戏对象的属性 Unity C# 2D

标签 c# unity-game-engine gameobject

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

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

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

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

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

感谢您的支持。

最佳答案

如果您尝试访问 GameObjects 名称,按照您的方式,就很简单:

newCard.name = "The new name!";

如果您尝试访问分配给该特定游戏对象的脚本的属性,最好执行如下操作:

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>()当你得到更大的场景时,这会非常慢,如果你有一个小场景,那就没问题了。

关于c# - 如何从另一个脚本访问任何创建的游戏对象的属性 Unity C# 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660278/

相关文章:

c# - 参数错误c#

c# - int.ToString(CultureInfo.InvariantCulture) 是必要的吗?

c# - 在碰撞上创建贴花 Unity3d C#

c# - 我想获取一个巨大字符串的特定部分

c# - 有没有办法检查对象的所有子对象是否都处于事件状态?

c# - 如何以不同的速度交换两个物体的位置,而不是立即交换?

c# - VS2012调试,不要进入某些自定义例程

c# - 发送 HTTP header 后服务器无法设置内容类型

android - Unity Android 应用程序上的 Facebook API,登录时说它是 "cancelled by the Player"?

c# - 检查脚本附加的每个游戏对象的变量值