gpt4 book ai didi

c# - 尝试访问二维数组 Unity c# 中的实例化对象。无法访问或更改元素?

转载 作者:行者123 更新时间:2023-11-30 16:51:27 24 4
gpt4 key购买 nike

第一次提问。我正在尝试构建一个游戏板,就像您在下棋中看到的那样。我制作了两个脚本,一个生成棋盘并将每个实例化的图 block 存储在二维数组中。另一个设置行和列位置的脚本和 onMouseOver 将该位置打印到控制台。然而,这始终是打印 Row = 0Col = 0

我得出的结论是,二维数组只是在内存中设置一个克隆,因此我通过调用函数 setRC(); 设置的存储值没有被发现,因为Unity 场景中的实例化对象不共享内存位置。

有人知道我该如何解决这个问题吗?

public class Map : MonoBehaviour {

public static int Row = 7;
public static int Col = 7;


private GameObject[,]boardPiece = new GameObject[Row,Col];

public GameObject prefab;
public GameObject prefab2;

void Start () {
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++)
{
if(i%2 ==1 && j%2 ==1 || i%2 ==0 && j%2 ==0)
{
boardPiece[i,j] = (GameObject)Instantiate(prefab, new Vector3(i*4.0f,0,j*4.0f),Quaternion.identity);
}else{
boardPiece[i,j] = (GameObject)Instantiate(prefab2, new Vector3(i*4.0f,0,j*4.0f),Quaternion.identity);
}
boardPiece[i,j].GetComponent<BoardPiece>().setRC(i,j);
}

}

}

}

public class BoardPiece : MonoBehaviour {

private int rowPlace;
private int colPlace;

// Use this for initialization
void Start () {
rowPlace = 0;
colPlace = 0;

}

// Update is called once per frame
void Update () {

}

void OnMouseOver(){
string message = "Row: " + rowPlace + " Col: " + colPlace;
print (message);
}

public void setRC(int R, int C)
{
rowPlace = R;
colPlace = C;
print ("set " + rowPlace + "," + colPlace);
}

}

最佳答案

没有a complete code example (我知道为 Unity3d 项目提供困难甚至不切实际,但仍然......)很难确定问题是什么。然而……


虽然 Start() 方法通常以类似于构造函数的方式使用,但了解它实际上并不是构造函数很重要。我认为当您的代码在您的新对象上调用 setRC() 方法时它还没有被调用。

这意味着执行流程是首先根据需要设置行和列值,然后Unity3d框架调用BoardPiece.Start()方法,设置行并将列值返回到 0

由于 rowPlacecolPlace 字段在创建对象时默认设置为 0,我认为最好的解决方法是只需从 Start() 方法中完全删除这两行即可。不需要它们,我相信它们对您遇到的问题负有责任。

关于c# - 尝试访问二维数组 Unity c# 中的实例化对象。无法访问或更改元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com