【问题标题】:Audio won't play on instantiated object in Unity音频不会在 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项目吗?

标签: audio unity3d


【解决方案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);
}
}

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2019-04-17
    • 2015-06-29
    相关资源
    最近更新 更多