我试图阻止我的角色翻滚,但让它俯仰和偏航时遇到了问题。我看到的建议是锁定不同的轴,但无论我锁定 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);
}