C# 统一:在不移动子游戏对象的情况下更改UI游戏对象父对象和位置
我有一个统一的UI,在这里我不断地将项目从一个地方移动到另一个地方 上面提到的一些物品是容器,我决定给每个容器分配它们自己的子游戏对象,这些子游戏对象表示并包含打开游戏对象后实际容器的内容。我选择这样做是为了更容易跟踪每个容器的实际容器 我想要的是:当改变物品的父对象(也就是移动它)时,因为我的父对象都有布局组,所以子游戏对象应该保持在相同的世界位置 我拥有的:当改变物品的父项时,子游戏对象会改变世界位置 我可以做什么:我可以每次重置子游戏对象的位置,就像我第一次使用此代码实例化游戏对象时所做的那样,相对游戏对象被拉伸C# 统一:在不移动子游戏对象的情况下更改UI游戏对象父对象和位置,c#,unity3d,user-interface,unity-ui,C#,Unity3d,User Interface,Unity Ui,我有一个统一的UI,在这里我不断地将项目从一个地方移动到另一个地方 上面提到的一些物品是容器,我决定给每个容器分配它们自己的子游戏对象,这些子游戏对象表示并包含打开游戏对象后实际容器的内容。我选择这样做是为了更容易跟踪每个容器的实际容器 我想要的是:当改变物品的父对象(也就是移动它)时,因为我的父对象都有布局组,所以子游戏对象应该保持在相同的世界位置 我拥有的:当改变物品的父项时,子游戏对象会改变世界位置 我可以做什么:我可以每次重置子游戏对象的位置,就像我第一次使用此代码实例化游戏对象时所做的
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);
我想知道的是:是否有某种内置的单一行为或统一性阻止了儿童游戏对象的移动
下面是它将应用的其中一种情况的逐步图像:
在我的房间里有一个叫sac a dos的包
现在我打开了袋子,它出现在屏幕中部
我现在在同一个地方创建了一个名为Coffre的箱子物品,使袋子成为箱子的容器子游戏对象的子对象
在这里,我打开了箱子,放在正确的位置,并展示了作为箱子的容器儿童游戏对象的孩子放的袋子
在这里,我打开了箱子里的袋子,导致袋子的子游戏对象放错了位置,因为袋子的位置发生了变化我认为你应该将物品数据与其显示分开 当您有一个元素的公共显示时,请编写一个Show方法,您可以在其中传递显示的项数据 例如:
public class ItemDisplay : MonoBehaviour
{
public void Show(ItemData itemData)
{
this.gameObject.SetActive(true);
foreach (var property in itemData.properties)
{
DisplayProperty(property);
}
}
private void DisplayProperty(){...}
}