我需要检查我的角色何时停飞,这样当他从某物上掉下来(或跳到空中)时我就不会继续播放走路的声音。
这是处理跳跃、下落和重力的代码。此代码块中的 cc
是 CharacterController 组件。如果角色已经在地面上并且没有按下跳跃键,垂直速度将保持为零;如果他没有接地,则重力作用在 y
方向。
if (cc.isGrounded) {
grounded = true;
if (Input.GetButton ("Jump") == true) {
ySpeed = jumpSpeed;
jumpSound.audio.Play();
} else {
ySpeed = 0;
}
} else {
grounded = false;
ySpeed += Physics.gravity.y * Time.deltaTime;
}
Debug.Log (cc.isGrounded == true ? "yes" : "no");
问题是isGrounded
值不断波动,Debug.Log
行在yes
和no
之间波动code>,所以当我使用 isGrounded
条件播放脚步声时,声音会随机停止并再次开始,即使我一直只是在一个简单的光滑平面上直线行走。
有解决办法吗?
我不担心 isGrounded
是波动的并且它是不正确的,因为在游戏玩法中这是不明显的。我只担心如何在角色行走时不断播放脚步声,不跳跃,不跌倒。就我的担忧而言,这可以通过实际修复波动或其他解决方法来解决;我会很高兴。
这些是我播放脚步声的条件:
if((Input.GetAxis("Vertical") != 0 || Input.GetAxis("Horizontal") != 0) && grounded == true) {
if(this.audio.isPlaying != true) {
this.audio.Play ();
}
} else if (this.audio.isPlaying) {
this.audio.Stop ();
}
最佳答案
我遇到过使用 PhysX 引擎开发角色运动的类似情况。更准确地说,我的角色无法下楼。相反,他总是试图跳过台阶并自由落体。他的 isGrounded 也在看似平坦的表面上波动。
我的运动代码也是基于速度积分 dX = V · dt。
最后,我添加了简单的解决方法:
- 移动 dX = V · dt + U,其中 U 是常数向量 (0,-u,0)。
- 如果角色在第 1 步后不是isGrounded,它会向后(向上)移动(0,u,0)
使用 u 的常量值,我发现它在小于或等于楼梯高度时提供合理的行为。
要解释此解决方法,有必要明确角色 Controller 不是人体。即使使用像速度积分这样复杂的方法,你仍然使用实体,而人体是复杂的机制,你现在,它由腿、脚等组成。
事实上,当我的角色开始下楼时,重力累积 dV = G · dt 有点滞后,但这足以让角色在楼梯上自由落体。
我的故事到此结束:)
附言。我找到了相应的代码:
// move character
NxU32 activeGroups = getCharacter()->getScene()->getActiveGroups( cg::protagonist );
_character->_nxController->move(
( _character->_vy + _character->_vxz ) * timeStep,
activeGroups, 0.001f,
_character->_collisionFlags, 0.01f
);
// press character to floor
if( pressDown )
{
// press character down on step offset distance
_character->_nxController->move(
NxVec3( 0, -_character->_stepOffset, 0 ),
activeGroups, 0.001f,
_character->_collisionFlags, 0.01f
);
// if press-down actions does not reveal floor under feets
if( !( _character->_collisionFlags & NXCC_COLLISION_DOWN ) )
{
// return character to its presios position
_character->_nxController->move(
NxVec3( 0, _character->_stepOffset, 0 ),
activeGroups, 0.001f,
_character->_collisionFlags, 0.01f
);
}
}
关于c# - Unity3d:CharacterController 不接地;无法连续播放脚步声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25461105/