C# 如何在场景中调用游戏对象位置

C# 如何在场景中调用游戏对象位置,c#,unity3d,C#,Unity3d,我目前正在代码中生成一定数量的游戏对象。在循环中调用平面位置的最佳方法是什么?在循环中,我可以获得每个平面的位置,以确保墙在其中繁殖 public class LevelGenerator: MonoBehaviour { public NavMeshSurface surface; private float[,] positionX = { {-9.5f, 9f}, {12f, 30f}, {12f, 30f}}; private float[,] positionZ

我目前正在代码中生成一定数量的游戏对象。在循环中调用平面位置的最佳方法是什么?在循环中,我可以获得每个平面的位置,以确保墙在其中繁殖

public class LevelGenerator: MonoBehaviour
{
    public NavMeshSurface surface;
    private float[,] positionX = { {-9.5f, 9f}, {12f, 30f}, {12f, 30f}};
    private float[,] positionZ = {{9f, -9.5f}, {9f, -9.5f}, { 11.5f,30f}};  
    public GameObject wall;

    void OnEnable(){
        GenerateMaze();

        surface.BuildNavMesh();
    }

    void GenerateMaze(){
    //For every plane 
        for (int i = 0; i<=2  ; i++){    
        //Place some walls on that plane  
            for (int j = 0; j <= 10; j++)
            {       
                Vector3 pos = new Vector3(Random.Range(positionX[i,0], positionX[i,1]), 0.5f, Random.Range(positionZ[i,0], positionZ[i,1])); 
                Instantiate(wall, pos, Quaternion.identity, transform);
            }
        }
    }
}  
公共类级别生成器:单行为
{
公共水面;
私有浮点[,]位置x={-9.5f,9f},{12f,30f},{12f,30f};
私有浮点[,]positionZ={{9f,-9.5f},{9f,-9.5f},{11.5f,30f};
公共游戏对象墙;
void OnEnable(){
GenerateMaze();
surface.BuildNavMesh();
}
void GenerateMaze(){
//每架飞机
对于(int i=0;i您可以在
实例化对象时使用。之后,您可以存储它们,也可以随意修改它们。还有其他函数,如and。我只会在您绝对需要的情况下使用它们,而不会在经常调用的函数中使用它们,如
Update
给我一笔可观的开销

我不确定您希望在对象上访问的脚本的名称,因此我将使用
YourScriptHere
填充它

// if you want to store the objects, creat a list to reference them
private List<YourScriptHere> yourScripts = new List<YourScriptHere>();

void GenerateMaze(){
//For every plane 
    for (int i = 0; i<=2  ; i++){    
    //Place some walls on that plane  
        for (int j = 0; j <= 10; j++)
        {       
            Vector3 pos = new Vector3(Random.Range(positionX[i,0], positionX[i,1]), 0.5f, Random.Range(positionZ[i,0], positionZ[i,1]));
            
            YourScriptHere tmpScript = Instantiate(wall, pos, Quaternion.identity, transform).GetComponent<YourSciptHere>();
            
            // mutate the data in tmpScript however you like
            tmpScript.FunctionCall(data);
            
            // if you want to track and store the data, then add it to a list for further processing later
            yourScripts.Add(tmpScript);
        }
    }
}
//如果要存储对象,请创建一个列表来引用它们
private List yourScripts=new List();
void GenerateMaze(){
//每架飞机

对于(int i=0;i您的确切意思是什么?是否要存储这些对象并稍后访问它们?是否只想访问您实例化的对象?我添加了一个片段,以防您想要的数据存储在您正在实例化的脚本中。一旦您完全清除了您想要的内容,我就可以编辑我的响应。基本上,我想要实例化如果这更有意义的话,在3个平面内随机放置x个立方体数量。谢谢你,先生。我已经使用了FindAllGameObjectswithTag,并给出了3个平台的特定标记。现在我只是想弄清楚如何使我的第2个foreach循环在每个平台上实例化10个立方体。基本上这行代码需要更改:Vector3 pos=新矢量3(随机范围(位置X[i,0],位置X[i,1]),0.5f,随机范围(位置Z[i,0],位置Z[i,1]));您可以将立方体分为每个平面,然后只随机选择两个轴。然后立方体将从每个平面偏移。我制作了第二个forloop在xnumber个墙之间迭代,并在3个平台的边界内实例化每个墙。感谢您的帮助!