【问题标题】:Play random sound clip on collision (Unity)在碰撞时播放随机声音片段(Unity)
【发布时间】:2015-07-29 02:33:57
【问题描述】:

我有 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" 是否等于 true?
  • 可能还会仔细检查Resources/Sound 文件夹中的声音资源。为了确保这一点,您可以将每个剪辑拖放到检查器的列表中,而不是将它们加载到Start()
  • 你确定碰撞处理程序被调用了吗?尝试在那里输出一些东西。如果可行,则尝试将“PlayOnShot”放在 Start 方法的末尾,看看是否播放声音只是为了消除任何其他变量。让我们知道结果是什么。

标签: c# audio random unity3d collision


【解决方案1】:

这里是伙伴

说明: 1 - 将此附加到任何游戏对象 2 - 将带有 AudioSource 组件的游戏对象放置到 mySource 3 - 假设您有 3 个要使用的音频剪辑,将 Range Scan 和 My Audio Elements 都设置为 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 ();
    }
}

【讨论】:

    【解决方案2】:

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

    • 在检查器中手动添加音频源组件,或
    • 删除脚本,然后重新附加到游戏对象,游戏对象会自动添加音频源组件。如果您为音频文件使用公共 AudioClip 变量(OP 不是),请记住再次将声音资源拖放到脚本的公共变量中(它会在脚本重新附加时清除)。

    【讨论】:

      【解决方案3】:
      Audio.PlayOneShot(AudioClip[UnityEngine.Random.Range(0,AudioClip.Length)], 0.8f);
      

      【讨论】:

      • 你能解释一下吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多