Unity设置父对象位置等于其子位置

时间:2019-05-08 00:53:46

标签: c# unity3d vector parent-child

我最终有两个3D对象,它们将是具有不同大小和形状的3D模型,但是我试图使基础功能正确无误。

一个是常规球体,其子游戏对象位于(0,-0.5,0)位置,名为s1。

一个是缩放比例为(0.3,0.3,0.3)的圆柱体,子游戏对象位于位置(0,0.5,0)处,名为c1。

我正在尝试移动对象,以便使两个父对象对齐在相同的子对象位置。

下面的代码将骑自行车的人的位置直接移动到s1位置。我只是在计算向量数学上遇到麻烦,因此c1位置直接在s1位置。我尝试了多种不同的加法,减法,除法以使它们对齐,但没有任何运气。我们非常感谢您了解如何解决此问题。

public GameObject sphere;
public GameObject cyclinder;

private GameObject s1;
private GameObject c1;

// Start is called before the first frame update
void Start()
{
    s1 = sphere.transform.Find("s1").gameObject;
    c1 = cyclinder.transform.Find("c1").gameObject;


    cyclinder.transform.position = s1.transform.position;
}

2 个答案:

答案 0 :(得分:1)

虽然您的问题不是很清楚,但我想您的意思是,您正在尝试对圆柱和球体进行定位,以使其子对象(s1和c1)共享相同的世界位置。

我要执行的步骤是:

  • 计算子项及其父项之间的世界空间偏移量(通常这只是您的子对象的localPosition,但是由于您还要应用localScale,因此可以通过使用world手动计算偏移量向量来将其考虑在内职位)
  • 将父位置设置为新位置+上面的偏移量

例如:

Vector3 finalPos = ... // Position I want both s1 and c1 to share

// Cylinder: world offset, moving from c1 to the parent object
Vector3 cylOffset = cylinder.transform.position - c1.transform.position;

// Position the cylinder, and apply the offset
cylinder.transform.position = finalPos + cylOffset;

// Sphere: world offset, moving from s1 to the parent object
Vector3 sphereOffset = sphere.transform.position - s1.transform.position;

// Position the sphere, and apply the offset
sphere.transform.position = finalPos + sphereOffset;

答案 1 :(得分:0)

答案是这样做

cyclinder.transform.position = s1.transform.position - (c1.transform.localposition/4);