【问题标题】:How to change the AudioClip of an AudioSource from script in Unity?如何从 Unity 中的脚本更改 AudioSource 的 AudioClip?
【发布时间】:2020-10-13 17:09:53
【问题描述】:

我要做的是根据按下按钮时的按钮文本(游戏难度)更改要从 AudioSource GameObject 上的脚本播放的 AudioClip。

using UnityEngine;
using UnityEngine.UI;

public class AudioEffects : MonoBehaviour
{
    public AudioClip easyMusic;
    public AudioClip hardMusic;

    public AudioSource audioSource;

    [SerializeField]
    private Text difficultyButtonText;

    public void ChangeMusic()
    {
        var difficultyText = difficultyButtonText.text;
        var audioClip = audioSource.clip;
        
        if (difficultyText == "Easy")
        {
            audioClip = easyMusic;
            audioSource.Play();
        }
        else if (difficultyText == "Hard")
        {
            audioClip = hardMusic;
            audioSource.Play();
        }
    }
}

Unity Documentation 中搜索,但对项目没有任何用处。在 StackOverFlow 中找到了一个answer,但是没有更好的方法吗?

【问题讨论】:

  • 应该是audioSource.clip= easyMusic; 不需要将引用存储在本地audioClip 然后永远不要使用它...

标签: c# unity3d


【解决方案1】:

您从未真正更改过audioSource 组件中的值。仅仅返回clip 不会给你一个属性的引用,它会返回clip 的值。在您的情况下,您正在创建一个变量audioClip,其值是当时audioSource.clip 的值。从那时起,您只需更改变量中的值,而不是您的 AudioSource 组件。

要解决它:您可以一起删除 audioClip 变量并直接分配 audioSource.clip 或将代码末尾的 audioSource.clip 设置为 audioClip

【讨论】:

  • 谢谢!想的正是你写的。问题是按钮从未调用过ChangeMusic() 函数。最终我也会偶然发现这个错误。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2016-01-16
相关资源
最近更新 更多