0

我试图阻止我的角色翻滚,但让它俯仰和偏航时遇到了问题。我看到的建议是锁定不同的轴,但无论我锁定 x、y 或 z 轴,我总是遇到角色可能会摔倒的情况。我能得到的最好的方法是锁定 y 和 z 轴。这允许角色改变音高以适应地形。但是,再一次,如果我在上下山时左转或右转,我可以将角色翻过来。

这是我当前的运动代码(以防万一)。我没有其他代码,我的刚体都是默认值。我有一个用于将字符集设置为凸面的网格 Collier,但默认设置为其他。

关于如何使这项工作的任何建议?这是 y 和 z 轴被锁定的现场演示。只需在山上跳华尔兹,然后向左或向右悬挂,您就会摔倒。(ASWD 控制)

https://dl.dropboxusercontent.com/u/27946381/Builds/builds.html

非常感谢!

var speed = 3.0;
var rotateSpeed = 3.0;

function FixedUpdate() {

    var hAxis = 0;
    var vAxis = 0;

    if( Input.GetAxis("Horizontal") > 0 ) { hAxis = 1.0; } else if( Input.GetAxis("Horizontal") < 0 ) { hAxis = -1.0; } else { hAxis = 0.0; }
        if( Input.GetAxis("Vertical") > 0 ) { vAxis = 1.0; } else if( Input.GetAxis("Vertical") < 0 ) { vAxis = -1.0; } else { vAxis = 0.0; }

    var rigidBody: Rigidbody = GetComponent(Rigidbody);

    // Rotate around y axis
    // transform.Rotate(0, hAxis * rotateSpeed, 0);
    var deltaRotation : Quaternion = Quaternion.Euler(0, hAxis * rotateSpeed, 0);
    rigidbody.MoveRotation(rigidbody.rotation * deltaRotation);

    // Move forward / backward
    var forward = transform.TransformDirection(Vector3.forward);
    var currSpeed = speed * vAxis;

    rigidBody.MovePosition( rigidBody.position + (forward * currSpeed) );

    var animatorController: Animator = GetComponent(Animator);
    animatorController.SetFloat("Speed", currSpeed);

}
4

2 回答 2

0

我相信您的问题出在这些 MovePosition 和 MoveRotation 上。看看脚本参考 - 这些方法基本上会忽略碰撞,直到身体以指定的姿势传送。也就是说,当物理引擎无法找到合适的力将身体推离另一个对撞机时,您可能会将身体置于某种无法解决的情况,因此身体会掉下来。在这种情况下,最好使用 AddForce 和 AddTorque。

此外,您可以使用CharacterController代替RigidBody。虽然它根本无法旋转,但有一些精细的运动学方法可以进行精确的碰撞检测。您可以将另一个主体附加到角色控制器并根据需要旋转它。

于 2014-07-23T12:36:36.283 回答
0

好吧,也许您应该检查称为重力比例的刚体属性..将其设置为0,您将永远不会跌倒

于 2014-07-04T09:47:43.320 回答