我使用Unity 2d for Android和WP8开发了一款游戏。游戏是关于一个吃橙色的玩家。当玩家与橙色碰撞时,它会播放声音剪辑。
所以,当你第一次玩的时候,没有任何问题,所有声音都能发挥出色。然后当你选择进入菜单选项再次开始关卡时,游戏会在第一次碰撞时崩溃。如果那时你选择菜单,并重新加载级别,它工作正常。 所以它运作良好一次,然后失败一次,然后运作良好一次,并继续相同。
这个错误发生在WP8而非Android中。
问题出在WP8中,代码如下:
void OnTriggerEnter2D(Collider2D collider){
if (collider.tag == "Player") {
NotificationCenter.DefaultCenter ().PostNotification (this, "IncrementarPuntos", this.puntosGanados);
AudioSource.PlayClipAtPoint (itemSoundClip, Camera.main.transform.position, itemSoundVolume);
Destroy (this.gameObject);
}
}
有错误的行是
AudioSource.PlayClipAtPoint (itemSoundClip, Camera.main.transform.position, itemSoundVolume);
因为itemSoundClip为空。
我不明白为什么itemSoundClip有时会变为空。
这是例外
$exception {System.NullReferenceException: Object reference not set to an instance of an object.
at UnityEngine.AudioSource.PlayClipAtPoint(AudioClip clip, Vector3 position, Single volume)
at Item.OnTriggerEnter2D(Collider2D collider)
at Item.$Invoke0(Int64 instance, Int64* args)
at UnityEngine.Internal.$MethodUtility.InvokeMethod(Int64 instance, Int64* args, IntPtr method)} System.Exception {System.NullReferenceException}
重要的事情要知道。
我的橙色项目是预制件。这个项目有一个脚本,我添加了一个剪辑声音(itemSoundClip)
在我的场景中,我使用一个生成器脚本来获取该橙色项目,并使用此行随机创建它的实例
Instantiate (obj [Random.Range (0, obj.Length)], transform.position, Quaternion.identity);
也许当实例化ocurrs时,项目无法加载剪辑?
答案 0 :(得分:0)
在我的团结项目中,我在WP8中播放声音:
public AudioClip coinCollect;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "coin_gold")
{
AudioSource.PlayClipAtPoint(coinCollect, other.gameObject.transform.position,1);
gold++;
Destroy(other.gameObject);
}
}
在Unity Inspector中我添加声音
答案 1 :(得分:0)
我找到了解决方案。如果itemClipSound的变量为null,那么我通过Resources加载声音。
if (itemSoundClip == null)
itemSoundClip = (AudioClip) Resources.Load("cogerItem");