2011-11-06 132 views
4

这是我在四个主要方向移动代码:平滑字符旋转

if (Input.GetKeyDown(KeyCode.RightArrow)){ 
     transform.forward = new Vector3(0f, 0f, 1f); 
     } 
    else if (Input.GetKeyDown(KeyCode.LeftArrow)){ 
     transform.forward = new Vector3(0f, 0f, -1f); 
     } 
    else if (Input.GetKeyDown(KeyCode.DownArrow)){ 
     transform.forward = new Vector3(1f, 0f, 0f); 
     } 
    else if (Input.GetKeyDown(KeyCode.UpArrow)){ 
     transform.forward = new Vector3(-1f, 0f, 0f); 
     } 

我的性格立即在旅游的四个方向,我遇到的问题是试图找出我怎么能平滑旋转在两个方向之间。我想说的是,如果角色指向北方,而你按下按钮向西,而不是立即向西转,我希望看到角色向西方向平滑地旋转。

我搜索并尝试过的教程,但没有一个工作。任何解决方案

回答

4

看看Slerp功能。这可能会做你想做的。

http://unity3d.com/support/documentation/ScriptReference/Quaternion.Slerp.html

简单的例子:

newdir.y=-135; // depends on which axis you want to turn... 

transform.rotation = Quaternion.Lerp(transform.rotation, newdir, Time.deltaTime * smoothSpeed); 

所以你基本上得到您的当前旋转的四元数。将其复制到新的四元数中,并增加或减少一个或多个轴上的旋转。

+0

这不起作用,也没有给出一个很好的例子在键盘命令。 – SpicyWeenie

+1

@Paul你已经有了一个关于如何获得KeyPresses的例子。你所要做的就是在那里添加那个片段。我编辑我的帖子来展示一个简单的例子。 – w00