【发布时间】:2015-03-21 05:04:36
【问题描述】:
好吧..这是我第一次在这里提问,如果我遗漏了任何重要细节,我深表歉意,我会尽力提供相关信息。
这是我的问题:我正在使用脚本打开一个柜子的门,而一扇门可以正常工作。然而,另一扇门是镜像的,并沿相同的旋转打开,使其向内而不是向外打开。
我的猜测(作为一个完整的初学者,请注意)是
openRot = new Vector3 (defaultRot.x, defaultRot.y + DoorOpenAngle, defaultRot.z
需要更改为负 DoorOpenAngle(只需将 + 替换为 - 即可翻转旋转方向)。
然而,这反而使门旋转得非常快,并且不会停止“打开”,它只是在无限循环中保持完整的 360 度旋转。以下脚本是用于正常工作的门的脚本,如果我要像上面的建议那样将角度更改为负值,还有什么可能是导致门永不停止的原因?
我猜由于尝试简单的镜像旋转而导致另一段代码发生冲突,对不起,如果根据您自己的标准看起来很混乱,请在格式化方面尽我所能。
var smooth = 2.0;
var DoorOpenAngle = 90.0;
private var open : boolean;
private var enter : boolean;
private var defaultRot : Vector3;
private var openRot : Vector3;
function Start()
{
defaultRot = transform.eulerAngles;
openRot = new Vector3 (defaultRot.x, defaultRot.y + DoorOpenAngle, defaultRot.z);
}
//Main function
function Update (){
if(open)
{
//Open door
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles,
openRot, Time.deltaTime * smooth);
}
else
{
//Close door
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles,
defaultRot, Time.deltaTime * smooth);
}
if(Input.GetKeyDown("f") && enter){
open = !open;
}
}
function OnGUI(){
if(enter){
GUI.Label(new Rect(Screen.width/2 - 75, Screen.height - 100, 150, 30), "Press 'F' to open the cabinet");
}
}
【问题讨论】:
-
我相信那是 Javascript,而不是 Java。我不相信 Unity 使用 Java 作为其脚本语言。
-
谢谢,实际上不知道两者之间有区别;)更改了问题的标题。
-
实际上是 UnityScript,而不是 JavaScript(或者 ECMAScript,如果我们要准确的话):wiki.unity3d.com/index.php/UnityScript_versus_JavaScript
-
哇,我也不知道...实际上我不是试图编程的人,我正在帮助一个朋友。我个人根本没有任何编码经验,我只是阅读并基本了解逻辑。感谢您澄清它是什么语言。做这件事的中间人并不容易。
-
不明白为什么这对打开或关闭都有效。更新循环不断地调用
Slerp。 deltaTime 是自上一帧以来的时间。尝试记录按下“f”键的时间然后Slerp基于从那时起经过的时间,而不是 deltaTime。
标签: unity3d unityscript