音频不会在 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 中使用相机位置重新创建的对象添加视差