gpt4 book ai didi

c# - Unity3d:CharacterController 不接地;无法连续播放脚步声

转载 作者:行者123 更新时间:2023-11-30 18:28:11 25 4
gpt4 key购买 nike

我需要检查我的角色何时停飞,这样当他从某物上掉下来(或跳到空中)时我就不会继续播放走路的声音。

这是处理跳跃、下落和重力的代码。此代码块中的 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行在yesno之间波动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

最后,我添加了简单的解决方法:

  1. 移动 dX = V · dt + U,其中 U 是常数向量 (0,-u,0)
  2. 如果角色在第 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com