在碰撞(Unity)上播放随机声音剪辑

本文关键字:随机 声音 播放 碰撞 Unity | 更新日期: 2023-09-27 17:49:24

我有4个声音文件,我希望玩家在与地面碰撞时发出着陆噪音,目前没有声音正在播放。c#和编程新手需要一些帮助。

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(AudioSource))]
public class Bhop : MonoBehaviour{
public AudioClip[] list;
AudioSource audio;
CharacterController characterController;
int number;
void Start () 
{
    audio = GetComponent<AudioSource>();
    characterController = GetComponent<CharacterController>();
    //Loading the items into the array
    list =  new AudioClip[]
    {
        (AudioClip)Resources.Load("Sound/jumplanding1.wav"),
        (AudioClip)Resources.Load("Sound/jumplanding2.wav"), 
        (AudioClip)Resources.Load("Sound/jumplanding3.wav"), 
        (AudioClip)Resources.Load("Sound/jumplanding4.wav")
    };
}
void OnCollisionEnter (Collision col)
{
    int number;
    number = Random.Range(0, list.Length);

    if (col.gameObject.name == "Sound") 
    {
        audio.PlayOneShot(list[number], 0.5f);
    }
}
}

在碰撞(Unity)上播放随机声音剪辑

Here Mate

指令:1 -将其附加到任何游戏对象上2 -将带有AudioSource组件的游戏对象放到mySource中3 -假设你有3个音频剪辑你想使用,设置范围扫描和我的音频元素为34 -添加3个剪辑作为元素5 -启用调试以获得控制台上的剪辑列表,但当你玩游戏时,它们也会显示在编辑器上

提示:这是启用的,所以每次这个对象是启用的,它会运行一个新的范围和分配剪辑,希望它花了我大约5分钟,如果这有助于你考虑关注我的facebook开发组这里
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class randomSound : MonoBehaviour {

    public AudioSource mySource;
    public int rangeScan;
    public AudioClip[] myAudio;
    public int toPlay;
    public bool debugging;
    void OnEnable () {
        toPlay = Random.Range(0,rangeScan);
        if (debugging) {
            foreach (AudioClip value in myAudio) {
                print (value);
            }
        }
        mySource.PlayOneShot(myAudio[toPlay], 0.9F);
        mySource.Play ();
    }
}

如果你在添加[RequireComponent(typeof(AudioSource))]行之前将脚本附加到GameObject上,你很可能没有为GameObject添加音频源组件(检查你的检查器)。如果是这种情况,您可以:

  • 在检查器中手动添加音频源组件,或者
  • 删除然后重新将脚本附加到GameObject,这将自动添加Audio Source组件。如果你正在使用一个公共的AudioClip变量为你的音频文件(OP不是),记得再次拖放声音资源到脚本的公共变量(它清除与脚本重新附件)。
Audio.PlayOneShot(AudioClip[UnityEngine.Random.Range(0,AudioClip.Length)], 0.8f);