我有一个问题,试图阻止我的角色翻身,但允许它俯仰和偏航。我看到的建议是锁定不同的轴,但无论我是否锁定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);
}
答案 0 :(得分:0)
好吧也许你应该检查你的刚体属性称为重力比例..将它设置为0并且你永远不会掉落
答案 1 :(得分:0)
我相信你的问题出在这些MovePosition和MoveRotation中。看看脚本参考 - 这些方法基本上忽略了碰撞,直到身体以指定姿势传送。即你可能会把身体置于某种无法解决的状态,当物理探测器无法找到合适的力量将身体推离另一个对撞机时,身体就会摔倒。在这种情况下,最好使用AddForce和AddTorque。
此外,您可以使用 CharacterController 代替 RigidBody 。虽然它根本不能旋转,但是有精确的运动运动方法和精确的碰撞检测。并且您可以将另一个主体附加到角色控制器并根据需要旋转它。