项目实训(十二)FPS游戏之角色移动的脚步声


前言

FPS游戏之角色移动的脚步声
FootstepAudioData 脚本起到了保存人物的脚步声的作用,使得人物在行进过程中伴随着产生已保存的能够增强体验感的脚步声。
PlayerFootstepListener 在脚本中会判断角色发出声音的必备条件,当角色移动或者发生较大幅度动作的时候发出脚步的声音,使用Physic API检测角色是否有移动,同时用Physic API来实现角色踩踏位置的对应材质的声音。


一、存放脚步声音

创建一个FootstepAudioData脚本存放,并用一个列表存放声音
在这里插入图片描述

CreateAssetMenu(menuName = "FPS/Footstep Audio Data")]
public class FootstepAudioData : ScriptableObject
{
    
    
    public List<FootstepAudio> FootstepAudios = new List<FootstepAudio>();
}


[System.Serializable]
public class FootstepAudio
{
    
    
    public string Tag;
    public List<AudioClip> AudioClips = new List<AudioClip>();
    public float Delay;
}

并在物体上设置好对应的组件
在这里插入图片描述

二、设置脚步声

1.角色发出声音的必备条件

角色移动或者发生较大幅度动作的时候发出声音

2.如何检测角色是否有移动

用Physic API检测

if (characterController.velocity.normalized.magnitude >= 0.1f)
            {
    
    
                nextPlayTime += Time.deltaTime;

                if (characterController.velocity.magnitude >= 4)
                {
    
    
                    characterState = State.Sprinting;
                }
                
                bool tmp_IsHit = Physics.Linecast(footstepTransform.position,
                    footstepTransform.position +
                    Vector3.down * (characterController.height / 2 + characterController.skinWidth-characterController.center.y),
                    out RaycastHit tmp_HitInfo,
                    LayerMask);

3.如何实现角色踩踏位置的对应材质的声音

用Physic API检测

 if (tmp_IsHit)
                {
    
    
                    //TODO:检测类型
                    foreach (var tmp_AudioElement in FootstepAudioData.FootstepAudios)
                    {
    
    
                        if (tmp_HitInfo.collider.CompareTag(tmp_AudioElement.Tag))
                        {
    
    
                          
                            if (nextPlayTime >= tmp_AudioElement.Delay)
                            {
    
    
                                //TODO:播放移动声音
                                int tmp_AudioCount = tmp_AudioElement.AudioClips.Count;
                                int tmp_AudioIndex = UnityEngine.Random.Range(0, tmp_AudioCount);
                                AudioClip tmp_FootstepAudioClip = tmp_AudioElement.AudioClips[tmp_AudioIndex];
                                FootstepAudioSource.clip = tmp_FootstepAudioClip;
                                FootstepAudioSource.Play();
                                nextPlayTime = 0;
                                break;
                            }
                        }
                    }
                }

三、修复下蹲移动时没有脚步声音

选中一个物体,点击面板中的layer

在这里插入图片描述
然后点击addlayer 点击player如下图
在这里插入图片描述
然后将layer mask设置为default
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45856546/article/details/125193415
今日推荐