@Alex_Schultz

Как сделать ограничение события в update?

Есть 2 объекта: obj1 и obj2. Между ними отслеживается дистанция. Когда дистанция становится меньше 10, то воспроизводиться звук (sfx.PlayOneShot(qfx)). Проблема в том, что этот звук воспроизводится по миллиарду раз. Как сделать чтобы он воспроизводился всего 1 раз?

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

public class SoundDetected : MonoBehaviour
{
    public Transform obj1;
    public Transform obj2;
    public float distantion;
    public AudioSource sfx;
    public AudioClip qfx;

    void Start()
    {
        sfx = GetComponent<AudioSource>();
    }

    void Update()
    {
        distantion = Vector3.Distance(obj1.position, obj2.position);

        if(distantion <= 10)
        {
            sfx.PlayOneShot(qfx);
        }
    }
}
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
&& !sfx.isPlaying
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vfirstvf
Чтобы ограничить вызов Update(), нужно поставить булевый флаг по-типу ( private bool _isSoundPlayed = false )
void Update()   
{
   if(Vector3.Distance(obj1.position,obj2.position) <= 10 && !_isSoundPlayed)
   {
      _isSoundPlayed = true;
      sfx.PlayOneShot(qfx);
   }           
}

В данном случае, эта конструкция больше не повторится
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы