unity3d 团结,刚体角色不断倒下

ntjbwcob  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(747)

我有一个问题,试图保持我的角色从滚动,但允许它俯仰和偏航。我已经看到的建议是锁定不同的轴,但无论我锁定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);

}
qgelzfjb

qgelzfjb1#

好吧,也许你应该检查一下你的刚体属性,叫做重力标度。。把它设为0,你就永远不会掉下去了

bvn4nwqk

bvn4nwqk2#

我相信你的问题是在这些移动位置和移动旋转。看看脚本参考-这些方法基本上忽略碰撞,直到身体被传送到指定的姿势。即你可能会把身体到某种无法解决的情况下,当物理工程师无法找到适当的力量推动身体远离另一个碰撞,和AddTorque,这样会更好。
此外,您可以使用CharacterController代替RigidBody。虽然它根本不能旋转,但有一些很好的方法可以通过精确的碰撞检测进行运动学运动。您可以将另一个身体附加到角色控制器并根据需要旋转它。

odopli94

odopli943#

更改代码不会改变什么。
1.试着把玩家的hitbox改成一个大的立方体2。(更好)试着看看刚体属性,据我所知我有同样的问题,并以这种方式修复它,它可能会有帮助

相关问题