我正在创建一个简单的基于文本的难题,它将在运行时确定各种线索。我认为我应该通过实例化多个预制件来做到这一点。这就是现在的样子。
注意变换值。资产中的预制件具有完全相同的值。
为了测试我是否可以在运行时实例化一堆Puzzle对象,我创建了一个简单的循环:
for (int x = 1; x < 6; x++)
{
Debug.Log(15-x);
Instantiate(puzzle, new Vector2(0, 15 - x), Quaternion.identity, GameObject.FindGameObjectWithTag("Canvas").transform);
}
所有克隆的想法都将堆积在第一个Puzzle对象的下面。但是,这是我运行它时发生的情况:
克隆被堆叠在错误的位置。我使用调试日志来确认向量使用了正确的值,并且我也尝试使用Vector3。团结论坛上有很多类似的问题,但是这些解决方案都不适合我。任何见识将不胜感激。
答案 0 :(得分:2)
要设置画布元素的位置,您需要使用anchoredPosition中的RectTransform。
因此,您需要获取目标元素的anchoredPosition,以便可以相对于该元素定位下一个元素。
public RectTransform firstPuzzle;
public GameObject puzzle;
private void InstantiatePuzzle()
{
for (int x = 1; x < 6; x++)
{
RectTransform spawnedPuzzle = Instantiate(puzzle, GameObject.FindGameObjectWithTag("Canvas").transform).GetComponent<RectTransform>();
spawnedPuzzle.anchoredPosition = new Vector2(firstPuzzle.anchoredPosition.x, firstPuzzle.anchoredPosition.y - (50 * x));// 50 is the gap you want it to be.
}
}
分配当前在检查器中的第一个元素(拼图)的参考,它将开始将下一个元素定位在其下方,且间距为50。