在碰撞时播放随机音频片段(Unity)

3

我有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);
    }
}
}

如果您在碰撞上进行调试,应该会发出声音,那么 col.gameObject.name == "Sound" 是否为真? - Jacob Lambert
可能还需要检查Resources/Sound文件夹中的声音资源。为了确保,您可以将每个剪辑拖放到检查器列表中,而不是在Start()中加载它们。 - Geri Borbás
你确定碰撞处理程序得到了调用吗?试着在那里输出一些东西。如果这个方法行得通,那么请尝试将“PlayOnShot”放在Start方法的最后,看看声音是否播放,以排除其他变量。让我们知道结果。 - Reasurria
3个回答

1

这里,伙计

说明: 1-将此附加到任何游戏对象上 2-将具有AudioSource组件的游戏对象放置在mySource中 3-假设您有3个要使用的音频剪辑,请将范围扫描和我的音频元素都设置为3 4-将您的3个剪辑作为元素添加 5-启用调试以获取控制台上的剪辑列表,但它们也会在您玩游戏时显示在编辑器上

提示:这是在启用时进行的,因此每次启用此对象时,它都会运行新的范围并分配剪辑。希望它能帮助您,我大约花了5分钟,如果这对您有所帮助,请考虑关注我的Facebook开发组HERE

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 ();
    }
}

0

如果您在添加[RequireComponent(typeof(AudioSource))]行之前将脚本附加到GameObject上,则很可能没有Audio Source组件用于您的GameObject(请检查检查器)。 如果是这种情况,您可以:

  • 在检查器中手动添加音频源组件,或者
  • 删除然后重新附加脚本到GameObject上,这将自动添加音频源组件。 如果您正在使用公共AudioClip变量来播放音频文件(OP不是),请记得再次将声音资产拖放到脚本的公共变量中(重新附加脚本时会清除它)。

-2
Audio.PlayOneShot(AudioClip[UnityEngine.Random.Range(0,AudioClip.Length)], 0.8f);

你能为此提供一些解释吗? - Theresa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接