【问题标题】:Unity - Overriding GameObject's position attributeUnity - 覆盖游戏对象的位置属性
【发布时间】:2015-05-21 06:08:55
【问题描述】:

我有一个复杂的游戏对象(即它是许多其他游戏对象的父对象),我想覆盖它的位置属性。

以下面的游戏对象为例

ParentGameObject
-Child1
-Child2

现在我想相对于 Child2 的位置定位 ParentGameObject,即当我设置 ParentGameObject.transform.position 时,它应该相对于 Child2 重新定位所有元素

将父对象的位置设置为零实际上应该定位 Child2,但整个游戏对象应该移动。

【问题讨论】:

  • 非常感谢更多解释。我真的不明白你的要求。
  • 您所说的“相对于”是什么意思?你的意思是 Child2 不应该移动,而是所有其他对象?
  • 除非你能详细说明,否则我将不得不同意投票结束
  • 我添加了一张图片,是否有帮助?我实际上必须用 child2 重新定位 child2 和所有其他游戏对象
  • 好的。现在我懂了。您希望父对象的中心/轴位于 object2 的中心。我说的对吗?

标签: c# unity3d overriding gameobject


【解决方案1】:

如果我理解正确,这就是你想要的。

将父游戏对象的中心/轴移动到子游戏对象之一。

Vector3 object2Pos = Object2.transform.position;
int deltaX = object2Pos.x;
int deltaY = object2Pos.y;
int deltaZ = object2Pos.z;
foreach(GameObject childObj in parentGameObject.Children)
{
    childObj.transform.position.x -= deltaX;
    childObj.transform.position.y -= deltaY;
    childObj.transform.position.z -= deltaZ;
}
//Now to bring back all objects where ever they were,
parentGameObject.transform.position.x += deltaX;
parentGameObject.transform.position.y += deltaY;
parentGameObject.transform.position.z += deltaZ;

我不确定确切的语法。我会纠正它,但这是逻辑。

【讨论】:

  • 我得到了逻辑,我可以通过创建自己的 SetPosition() 函数来做到这一点,但我想知道覆盖位置属性的方法,以便我可以在那里实现这个逻辑。 ParentObject.transform.position 应该做所有这些事情,有没有办法做到这一点?
  • 如果你想重写,你应该创建你自己的继承GameObject的类。好吧,那不是您想做的事情,因为那时您将无法使用可视化编辑器。为什么不使用函数本身?
  • @mdanishs “但我想知道如何覆盖位置属性,以便我可以在那里实现这个逻辑” - 这是个坏主意。您将把这个特定的场景应用到所有相当灾难性的事情上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
相关资源
最近更新 更多