C# Unity проблема с воспроизведением звука и уничтожением эффекта
public class GasBottle : MonoBehaviour
{
public GameObject BangEffectPref;
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Bullet")
{
Collider[] allCollider = Physics.OverlapSphere(transform.position, 5f);
foreach(var item in allCollider)
{
if (item.attachedRigidbody)
{
if (item.GetComponent<BodyPart>())
{
item.GetComponent<BodyPart>().ThisEnemy.TakeDamage(10000);
}
/* else if (item.GetComponent<PlayerHealth>())
{
item.GetComponent<PlayerHealth>().TakeDamage(10000);
}
*/
Vector3 direction = (item.transform.position - transform.position).normalized;
item.attachedRigidbody.AddForce( direction * 2000);
}
}
Instantiate(BangEffectPref, transform.position, Quaternion.identity);
GetComponent<AudioSource>().Play();
Destroy(BangEffectPref);
Destroy(gameObject);
}
}
}
Вот код моей газовой бочке, которая взрывается при попадании в нее пули. Есть две проблемы
- Звук взрыва не воспроизводится (Can not play a disabled audio source) (хотя audiosource включен)
- Эффект взрыва не удаляется в иерархии, он остается, хоть и невидим, но в целях оптимизации хочется его убрать (Destroying assets is not permitted to avoid data loss
Ответы (2 шт):
Автор решения: Yaroslav
→ Ссылка
1 Было бы странно, если бы мёртвые котята мяукали. Вот тут тоже самое.
gameObject.GetComponent<AudioSource>().Play();
Destroy(gameObject);
2 Ну так и удаляй эффект а не...
public GameObject BangEffectPref;
...
Destroy(BangEffectPref);
Автор решения: user412051
→ Ссылка
Ты можешь использовать PlayOneShot к компоненту AudioSource. Таким образом ничего удалять или отключать не придётся.
Касательно первой ошибки: получая ссылку на AudioSource, попробуй включить этот компонент: используй GetComponent<AudioSource>().enabled = true;