音频不会在 Unity 中的实例化对象上播放

Posted

技术标签:

【中文标题】音频不会在 Unity 中的实例化对象上播放【英文标题】:Audio won't play on instantiated object in Unity 【发布时间】:2015-02-01 06:37:25 【问题描述】:

我有一个名为 gameOverScreen 的 Canvas 预制件,它附有一个音频剪辑。每当调用以下函数时都会克隆它。

public static void GameOver()

    GameObject gameOverScreen = Instantiate(Resources.Load("gameOverScreen")) as GameObject;
    gameOverScreen.audio.Play();


问题是无法播放音频。我通过在另一个函数中使用 audio.PlayOneShot() 解决了这个问题,但是有什么原因导致它在这种情况下不起作用?

【问题讨论】:

当你使用audio.PlayOneShot()时,你是如何引用音频剪辑的? @Agumander audio.PlayOneShot(Resources.Load("Sounds/Death") as AudioClip); 看起来在加载预制件时,预制件使用的资源可能不会自动加载。如果这是真的,那么这应该扩展到预制件使用的图形。这与您观察到的一致吗? @Agumander 的 gui 项目加载得很好。只有音频有问题,我不知道为什么。在函数中,一切都正确执行,除了音频不会播放。 资源文件夹中有GUI项目吗? 【参考方案1】:

在 c# 中你可以这样使用:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SoundController : MonoBehaviour 
    public AudioClip clip;  

    void Start () 
        Audiosource.PlayClipAtPoint(clip, Vector3.zero, 1.0f);      
    

javascript 中你可以使用这个:

var myClip : AudioClip;
function Start () 
 AudioSource.PlayClipAtPoint(myClip, transform.position);

但是如果你想在实例化中播放声音:

#pragma strict
var prefabBullet : Transform;
var forwardForce = 1000;
var myClip : AudioClip;
function Update()

if (Input.GetButtonDown("Fire2"))

var instanceBullet = Instantiate (prefabBullet, transform.position, 
Quaternion.identity);
instanceBullet.GetComponent.<Rigidbody>().AddForce(transform.forward * 
forwardForce);
AudioSource.PlayClipAtPoint(myClip, transform.position);


【讨论】:

以上是关于音频不会在 Unity 中的实例化对象上播放的主要内容,如果未能解决你的问题,请参考以下文章

如何为在播放模式下实例化并在 Unity 3d 中使用相机位置重新创建的对象添加视差

在 Unity 中销毁实例化游戏对象的问题

Unity Photon:实例化非预制对象?

单击按钮时的音频播放问题

如何在 Unity 游戏引擎平台上的单元测试中实例化 MonoBehaviour 对象

当对象在运行时实例化时,如何使 Unity UI 对象可拖动?