首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Unity上使用PlayOneShot()?

如何在Unity上使用PlayOneShot()?
EN

Stack Overflow用户
提问于 2020-07-29 01:33:31
回答 1查看 1.1K关注 0票数 1

我一直在尝试使用这个函数在输入触发器时触发声音,但我不能让它工作。我一遍又一遍地读我的代码,没有任何异常,看起来完全像文档所说的那样,所以我就是找不到我的错误。

代码语言:javascript
运行
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class footsteps_script : MonoBehaviour
{

    public GameObject soundObject;
    public GameObject trigger;
    private AudioClip clip;
    public bool nextTrig;

    void Start()
    {
    nextTrig = false;
    clip = soundObject.GetComponent<AudioClip>();
    }

    void OnTriggerEnter ()
    {

        if (Bunny_script.nextTrig == true)
        {
        
            soundObject.GetComponent<AudioSource>().PlayOneShot(clip);
        nextTrig = true;
        trigger.SetActive(false);
        }
    }



  

    
}

AudioSource被附加到另一个对象。触发器应该在另一个事件发生后播放声音。触发器部分工作正常,因为nextTrig像预期的那样设置为true,但声音不能播放。此外,声音本身也工作得很好,音量也很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-29 02:35:55

它不工作是因为,这是什么?

代码语言:javascript
运行
复制
 clip = soundObject.GetComponent<AudioClip>();

没有名为AudioClip的组件。对于音频剪辑,直接从预制的脚本中获取,或者如果您想从soundObject中的音频源获取它,则它将如下所示:

代码语言:javascript
运行
复制
 clip = soundObject.GetComponent<AudioSource>().clip;

稍后,您将使用PlayOneShot播放它,这将是浪费时间,因为您播放的是最初从该音频源获取的相同剪辑。它实际上只需要这一行来播放它

代码语言:javascript
运行
复制
  soundObject.GetComponent<AudioSource>().Play();

最后,如果你想从预制工厂获取脚本中的音频片段,你的代码将如下所示:

代码语言:javascript
运行
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class footsteps_script : MonoBehaviour
{

    public GameObject soundObject;
    public GameObject trigger;
    public AudioClip clip;
    public bool nextTrig;

    void Start()
    {
       nextTrig = false;
       //don't forget to assign the your audio clip to the script from the prefabs
    }

    void OnTriggerEnter ()
    {

        if (Bunny_script.nextTrig == true)
        {
            if (clip =! null)
            soundObject.GetComponent<AudioSource>().PlayOneShot(clip);
            nextTrig = true;
            trigger.SetActive(false);
        }
    } 

  }

如果你已经在附加到声音对象的音频源中有音频剪辑,那么你的代码将是:

代码语言:javascript
运行
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class footsteps_script : MonoBehaviour
{

    public GameObject soundObject;
    public GameObject trigger;
    public bool nextTrig;

    void Start()
    {
       nextTrig = false;
    }

    void OnTriggerEnter ()
    {

        if (Bunny_script.nextTrig == true)
        {
            soundObject.GetComponent<AudioSource>().Play();
            nextTrig = true;
            trigger.SetActive(false);
        }
    } 

  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63139748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档