我有四个游戏对象A,B,C和D。
A是固定的,它的位置和旋转是已知的。 B是围绕A移动的移动物体。B的位置和旋转也是已知的。
C是固定的(放置在A附近,但它们之间没有关系),并且其位置和旋转是已知的。 D是围绕C移动的移动对象。但是,D的位置和旋转是未知的。 D的位置和旋转需要根据B的位置和旋转值得出。
因此,在运行时,当B在A周围移动时,D的相似移动也将在C周围发生。 如果B从A移开,D也应从C移开相同的距离(在A和B之间)。 如果B绕A旋转一些旋转值,则D也将绕C旋转相同的旋转值。
对象B仅绕X和Y轴旋转。不希望绕Z轴旋转。
使用以下代码,我错了D的动作。有时这是预期的,有时不是。 我在哪里做错了?
任何指向此的指针将非常有帮助。 谢谢。
private float distance;
private float newDistance;
private Quaternion quaternion;
private Quaternion newQuaternion;
void Update()
{
if (A != null && B != null)
{
this.distance = Vector3.Distance(A.transform.position, B.transform.position);
Vector3 relativePos = A.transform.position - B.transform.position;
this.quaternion = Quaternion.LookRotation(relativePos, Vector3.up);
CalculateValuesForD();
}
}
public void CalculateValuesForD()
{
GameObject tempGameObject = new GameObject();
Vector3 newPos = C.transform.position - C.transform.forward * distance;
tempGameObject.transform.position = newPos;
//tempGameObject.transform.RotateAround(C.transform.position, Vector3.up, this.quaternion.eulerAngles.y);
//tempGameObject.transform.RotateAround(C.transform.position, Vector3.right, this.quaternion.eulerAngles.x);
tempGameObject.transform.RotateAround(C.transform.position, C.transform.up, this.quaternion.eulerAngles.y);
tempGameObject.transform.RotateAround(C.transform.position, C.transform.right, this.quaternion.eulerAngles.x);
D.transform.position = tempGameObject.transform.position;
D.transform.rotation = tempGameObject.transform.rotation;
this.newDistance = Vector3.Distance(C.transform.position, D.transform.position);
Vector3 relativePos = C.transform.position - D.transform.position ;
this.newQuaternion = Quaternion.LookRotation(relativePos, Vector3.up);
GameObject.Destroy(tempGameObject);
}
答案 0 :(得分:1)
如果您想复制所有内容!!!!
只需让B
的{{1}}的孩子和A
的{{1}}的孩子
然后,您只需要使D
的{{1}}的局部值等于C
中的transform
D
这将起作用,因为B
和Update
的本地空间应该是相同的,因为在本地以d.transform.localRotation = b.transform.localRotation;
d.transform.localPosition = b.transform.localPosition ;
和B
为父级时,它们都以{{1}开始}。