【问题标题】:Smooth character rotation平滑的字符旋转
【发布时间】:2011-11-06 10:45:09
【问题描述】:

这是我在四个主要方向上移动的代码:

    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);
        }

我的角色会立即在四个行进方向上旋转我遇到的问题是试图弄清楚如何在两个方向之间进行平滑处理。我想说的是,如果角色指向北方并且您按下按钮向西移动,而不是立即向西转,我希望看到角色向西方向平稳地旋转度数。

我搜索并尝试了教程,但没有一个有效。有什么解决办法吗?

【问题讨论】:

    标签: c# unity3d rotation game-physics path-finding


    【解决方案1】:

    看看 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);
    

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

    【讨论】:

    • 这不起作用,也没有给出一个很好的例子来接受按键命令。
    • @Paul 您已经有一个关于如何获取 KeyPresses 的示例。您所要做的就是在其中添加那个sn-p。我编辑了我的帖子以显示一个简单的示例。
    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多