如何从另一个脚本 Unity C# 2D 访问任何创建的游戏对象的属性
How to access the properties of any created Game Object from another script Unity C # 2D
我已经像这部分代码一样实例化了多个游戏对象:
GameObject newCard = Instantiate(CardPrefab, new Vector3(x, y, z), transform.rotation);
x、y 和 z 是参数,因此我可以在不同位置生成对象。
我的问题是如何从另一个脚本访问游戏对象的名称或属性。我的每个游戏对象都有一个 属性 赋予它一个值。
在另一个脚本中,我想添加所有对象的值,但我不确定如何从另一个脚本访问对象以获取它们的名称和值。
感谢支持
您可以做的一件事是使用 GameObject.Find({String gameobjectname}) 方法,如 here 所述。这将搜索所有游戏对象和 return 对具有相同名称的对象的游戏对象引用。问题是它只有 return 个。
另一件事是您可以使用 GameObject.FindGameObjectsWithTag({String tag})。对于这个,您需要确保每个对象都有一个标签。根据您的对象名称是卡片,我会将标签设置为卡片。然后你可以使用你得到的数组并用它做你想做的事情。已记录 here
如果您尝试访问 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>()
当你得到更大的场景时它会非常慢,如果你有一个小场景就可以了。
我已经像这部分代码一样实例化了多个游戏对象:
GameObject newCard = Instantiate(CardPrefab, new Vector3(x, y, z), transform.rotation);
x、y 和 z 是参数,因此我可以在不同位置生成对象。
我的问题是如何从另一个脚本访问游戏对象的名称或属性。我的每个游戏对象都有一个 属性 赋予它一个值。
在另一个脚本中,我想添加所有对象的值,但我不确定如何从另一个脚本访问对象以获取它们的名称和值。
感谢支持
您可以做的一件事是使用 GameObject.Find({String gameobjectname}) 方法,如 here 所述。这将搜索所有游戏对象和 return 对具有相同名称的对象的游戏对象引用。问题是它只有 return 个。
另一件事是您可以使用 GameObject.FindGameObjectsWithTag({String tag})。对于这个,您需要确保每个对象都有一个标签。根据您的对象名称是卡片,我会将标签设置为卡片。然后你可以使用你得到的数组并用它做你想做的事情。已记录 here
如果您尝试访问 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>()
当你得到更大的场景时它会非常慢,如果你有一个小场景就可以了。