c# - Unity2D:实例化的对象总是在错误的位置
问题描述
我有一个名为“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 变换看起来像这样:
PlayerListItem 也是 PlayerList 的子项:
感谢任何帮助的人!
解决方案
实例化后尝试设置元素的位置。worldPositionStays
在父 UI 元素时设置为 false 也是一个好主意。
var obj = Instantiate(prefab, Root, worldPositionStays: false);
您可能还需要使用anchoredPosition
而不是position
.
((RectTransform)obj.transform).anchoredPosition = new Vector2(x,y);
推荐阅读
- ssis - SSIS PGP解密 - 如何在没有弹出窗口的情况下输入密码?
- java - 如何使用子列表作为键和父对象作为值来映射列表
- python - How to make a module act as package with __path__ variable?
- python - 查找短文本的模型
- php - 如何使用 PHP SimpleXMLElement 删除命名空间?
- django - DjangoAdmin:如何在使用“AutocompleteSelect”小部件时保持外键的“+✎✕”按钮打开
- chart.js - 在Chartjs中为指针填充颜色
- reactjs - Test failed of a Component in react using typescript
- sql - Trying to understand why GROUP BY and HAVING yields different output when compared to WHERE
- html - 添加容器 div 会移除 flexbox