首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Vector3翻译对象

使用Vector3翻译对象
EN

Stack Overflow用户
提问于 2015-11-11 11:18:02
回答 1查看 348关注 0票数 1

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

我将尝试更好地解释这个问题,展示代码:

代码语言:javascript
复制
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轴上做了一个特定的运动,当我关上门的时候,我会把它们的值降低。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-11 11:33:08

尝试更改transform.Rotate和transform.Translate行在ClosingDoor函数中的顺序。

因为翻译是相对于门的方向,在它旋转之前翻译它会把它移到错误的地方。

代码语言:javascript
复制
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; 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33649424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档