0

我想在循环中创建 X 对象,访问和设置新创建对象的属性。我已经使用Instantiate传递刚体的方法,如教程中所示,但我需要访问连接到对象的脚本的属性,而不仅仅是刚体。

这是我正在尝试的方法:

public void makeGrid(int w = 10, int h = 10)
{
    gridWidth = w;
    gridHeight = h;

    int tileArrayLength = gridWidth * gridHeight;
    tileArray = new Tile[tileArrayLength];

    for (int i = 0; i < gridWidth; i++)
    {
        for (int j = 0; j < gridHeight; j++)
        {
            // add tiles
            Tile t = new Tile(); // !!! doesn't work >_<
            t.posX = i;
            t.posY = j;
            t.id = j + 10 * i;

            tileArray[t.id] = t;
        }
    }

}
4

1 回答 1

2

我想在循环中创建 X 对象,访问和设置新创建对象的属性。

您可以通过编辑器创建预制件,然后实例化它们,或者显式创建一个GameObject并将您需要的组件附加到它:

GameObject prefabInstance = GameObject.Instantiate(Resource.Load("path_to_prefab")) as GameObject;

GameObject instanceThroughReference = GameObject.Instantiate(aReferenceToAnInstantiableObject) as GameObject;

GameObject emptyGameObject= new GameObject("empty game object");

关心什么:

我已经将 Instantiate 方法与传递的 RigidBody 一起使用,如教程中所示,但我需要访问连接到对象的脚本的属性,而不仅仅是它的刚体。

对于属性,我认为您的意思是Components附加到GameObject实例化。如果您从引用实例化对象或通过Resources.Load加载,如果原始游戏对象具有您想要附加的组件,您可以使用GetComponent方法检索它们,或者捕获 AddComponent 的返回值。

如果你正在创建一个空GameObject的,你必须明确地附加Components你需要的:

GameObject go = new GameObject("foo");
Bar bar = go.AddComponent<Bar>(); //where Bar extends MonoBehavior
于 2013-09-27T12:38:44.317 回答