使用Vector3翻译对象

本文关键字:对象 翻译 Vector3 使用 | 更新日期: 2023-09-27 18:21:25

我的Translate函数有问题。我想做的是通过点击来打开门。我成功地用所有的门做到了这一点,但现在我添加了一个新的门,当我关闭它时,它不会回到原来的位置。

我会尝试更好地解释问题,显示代码:

public override void OpeningDoor() {
    Vector3 movement = new Vector3 (2.006f, 0.0f,1.793f);
    Vector3 rotate = new Vector3 (0.0f, 108.3f, 0.0f);
    transform.Translate (movement);
    transform.Rotate (rotate);
    toClose = true;
}
public override void ClosingDoor() {
    Debug.Log ("Closing Door");
    Vector3 movement = new Vector3 (-2.006f, 0.0f,-1.793f);
    Vector3 rotate = new Vector3 (0.0f, -108.3f, 0.0f);
    transform.Translate (movement);
    transform.Rotate (rotate);
    toClose = false; 
}

旋转是可以的,没有问题。当我打开门的时候正确的位置,但当我关闭它时,它不会回到它的位置,它会转换成错误的位置。理论上,我只是在X轴和Z轴上施加一定的运动,当我关门时,我会将它们减少相同的值。

我希望我已经清楚地解释了这个问题,如果没有,请告诉我。

使用Vector3翻译对象

尝试更改变换的顺序。旋转和变换。翻译ClosingDoor函数中的行。

因为平移是相对于门的方向进行的,所以在门旋转之前平移会将其移动到错误的位置。

public override void OpeningDoor() {
    Vector3 movement = new Vector3 (2.006f, 0.0f,1.793f);
    Vector3 rotate = new Vector3 (0.0f, 108.3f, 0.0f);
    transform.Translate (movement);
    transform.Rotate (rotate);
    toClose = true;
}
public override void ClosingDoor() {
    Debug.Log ("Closing Door");
    Vector3 movement = new Vector3 (-2.006f, 0.0f,-1.793f);
    Vector3 rotate = new Vector3 (0.0f, -108.3f, 0.0f);
    transform.Rotate (rotate);
    transform.Translate (movement);
    toClose = false; 
}