Я хочу запустить определенную функцию, когда значение bool станет истинным

#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тип