在Unity中,我有一个UI,我不断地将物品从一个地方移动到另一个地方。
其中有些物品是容器,我决定给每个容器赋予自己的子gameObject,代表并包含实际容器的内容,一旦打开(也就是激活gameObject)。我选择这样做是为了更容易跟踪每个容器的实际容器。
我想要的是 当改变项目的父体时(也就是移动它,因为我的所有父体都有布局组), 子游戏对象应该保持在相同的世界位置。
我有什么。当改变物品的父体时,子体gameObject会改变世界位置
我可以做什么。我可以每次重设子gameObject的位置 就像我第一次用这段代码实例化gameObject一样(相对的gameObject被拉伸了)
Vector3[] corners = new Vector3[4];
transform.parent.parent.GetComponent<RectTransform>().GetWorldCorners(corners);
float width = corners[2].x - corners[0].x;
float height = corners[1].y - corners[0].y;
RectTransform itemTransform = item.transform.GetChild(1).GetComponent<RectTransform>();
itemTransform.position = new Vector3(width / 2, height / 2);
我想知道的是:在Monobehavior或Unity中是否有内置的东西可以阻止子游戏对象移动?在Monobehavior或Unity中是否有什么东西可以阻止子游戏对象移动?
我的房间里有一个叫 "sac a dos "的包包项目
现在,我已经打开了袋子,它显示在屏幕中央
我现在已经在同一个地方创建了一个名为 "Coffre "的箱子物品,导致袋子被放在箱子的容器子游戏对象的子游戏对象的子游戏对象中
在这里,我打开了箱子,定位在正确的位置,并显示出作为箱子的容器子游戏对象的子游戏对象的包包被放入
这里我打开了箱子里的包包,由于包包的位置发生了变化,导致包包的子gameObject错位了
我认为你应该分离项目数据从他们的显示。
当你有一个共同的显示你的元素写一个显示方法,你可以通过显示的项目数据。
例子。
public class ItemDisplay : MonoBehaviour
{
public void Show(ItemData itemData)
{
this.gameObject.SetActive(true);
foreach (var property in itemData.properties)
{
DisplayProperty(property);
}
}
private void DisplayProperty(){...}
}