#c# #unity3d
Вопрос:
Я хочу играть на SE, когда IsReceive=true
.
коллайдер.cs
public class ParentSlimeWeaponCollider : MonoBehaviour
{
public bool IsReceive=false;
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Weapon") || other.gameObject.CompareTag("MolotovCocktail"))
{
IsReceive=true;
}
}
}
playerSE.cs
public class SlimesReceiveSE : MonoBehaviour
{
[SerializeField] private AudioClip WeaponReceiveSE;
AudioSource audioSource;
private ParentSlimeWeaponCollider _parentSlimeWeaponCollider;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void ReceiveSe()
{
audioSource.PlayOneShot(WeaponReceiveSE);
}
}
Комментарии:
1. В чем проблема, с которой вы столкнулись?
2. Знакомы ли вы со свойствами и событиями C#?
3. Сделать это собственностью легко, я с Джо
Ответ №1:
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Weapon") || other.gameObject.CompareTag("MolotovCocktail"))
{
IsReceive=true;
FindObjectOfType<SlimesReceiveSE>().ReceiveSe();
}
}
и не забудьте сделать эту функцию общедоступной.
или вы можете проверить, является ли это полученным bool в обновлении и в скрипте SlimesReceiveSE, и когда это верно, называется ReceiveSe.
Комментарии:
1. Спасибо за ответ. «FindObjectOfType<SlimesReceiveSE>().ReceiveSe ();», похоже, требует тяжелой обработки, поэтому я переписал его на » GetComponent<SlimesReceiveSE><SlimesReceiveSe>().ReceiveSe();».
2. если у вас есть оба сценария в одном и том же игровом объекте, вы можете использовать GetComponent в противном случае findobjectтип