【问题标题】:How can I trigger sound on killing enemy?如何在杀死敌人时触发声音?
【发布时间】:2018-11-12 02:01:37
【问题描述】:

我试图在玩家杀死敌人时触发声音,如下面的代码所示。虽然与敌人碰撞会导致其被摧毁并成功提高击杀数,但它不会产生所需的声音。当玩家跳跃时,类似的脚本确实会触发声音,所以我不确定我做错了什么。

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

public class CollectibleItem : MonoBehaviour {
[SerializeField] private string itemName;
[SerializeField] private int pointsValue;
[SerializeField] private AudioSource soundSource;
[SerializeField] private AudioClip killSound;

ScoreBoard board;

void Start() {
    var uiObject = GameObject.Find("Timer");
    ScoreBoard board = uiObject.GetComponent<ScoreBoard>();
}

void OnTriggerEnter(Collider other) {
    soundSource.PlayOneShot(killSound);
    Managers.Inventory.AddItem(itemName);
    Destroy(this.gameObject);
}
}

【问题讨论】:

  • 只是一个猜测,但在你销毁游戏对象之前可能没有时间玩?如果你把Destroy注释掉怎么办?
  • 就是这样。谢谢你,Crowcoder!

标签: c# unity3d


【解决方案1】:

问题是没有引用AudioSource 组件。 我假设您的 AudioSource 附加到与此脚本相同的 GameObject 上。只需将以下内容添加到您的 Start 方法中即可。

soundSource=GetComponent<AudioSource>();

我也有点怀疑你的AudioClip

【讨论】:

  • 我认为[SerializeField] private xxx 使变量在编辑器中可见。
  • 如果您将检查器切换到调试模式,您总是可以看到发生了什么。我手头没有 Unity 安装,但我很确定您可以在编辑器中分配 SerializeField 成员:forum.unity.com/threads/…
  • 我也刚刚意识到这一点。我一定一直在考虑构建游戏。该代码在生产中不起作用,对吗?是的,你是对的。
  • 什么代码?所有这些都可以在生产中工作(这些字段毕竟是序列化的)并且生产中没有编辑器,因此无需担心检查员。还是你指的是别的东西?
  • 我认为你是对的。谢谢指正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多