【发布时间】:2020-09-21 10:16:07
【问题描述】:
我有一个名为“PlayerList”的游戏对象,其中有一个“PlayerListItem”,我将其实例化并在 PlayerList 中克隆,其代码如下所示:
private void CreatePlayerList()
{
int y = 0;
foreach (var player in gameState.PlayerNames)
{
GameObject PlayerName = Instantiate(playerListItem, new Vector3(0, y), Quaternion.identity, playerList.transform);
PlayerName.GetComponentInChildren<TMP_Text>().text = player.FirstName;
PlayerObjects.Add(PlayerName);
y -= 130;
if (player.FirstName == gameState.PlayerNames[currentPlayer].FirstName)
{
UpdatePlayerStates();
}
}
// Destroying the first empty item
Destroy(playerListItem);
}
现在我的问题是,克隆的项目总是在一个完全错误的位置,而不是我实际实例化它们。第一项(实际上是第二项,因为我删除了第一项,因为它是空的)始终具有 X/Y 位置:-420 (x) 和 -573 (y)
奇怪的是之后总是使用-130 y,所以下一项的X Position 和-703 与Y-Position 相同。
看来这是 vector3 函数的问题,因为当我删除它时,所有项目的位置都只有 0,0。我是不是用错了 Vector3 函数?
顺便说一下,我的 GameObjects 的 Rect Transform 看起来像这样:
而且 PlayerListItem 也是 PlayerList 的子项:
感谢任何帮助的人!
【问题讨论】:
-
在循环的第二次迭代中。 Y 为 -130。所以是的。除非它是第一个项目。这就是它的产卵地
-
我相信这里的问题是:为什么第二项是
(-420,-573)而不是(0,-130)? -
没错。我希望第二个项目位于 0, -130,其他所有项目位于 0, y-130
-
应该 new Vector3(0, y) 是 new Vector2(0, y) 吗?另外,也许您对孩子和相对位置有疑问。您的任何对象是其他对象的子对象吗?
-
@pseudoabdul vector2 做同样的事情。是的,PlayerListItem 是 PlayerList 的子项,我将更新我的初始帖子!
标签: c# visual-studio unity3d