Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# unity


mcErykO

Rekomendowane odpowiedzi

Opublikowano

Cześć , próbuję napisać kod który włączy audio po pewnym czasie np. 5s  i wyłączy się jak będzie 30s .

Timer działa prawidłowo . Jak zrobić aby instrukcja if  sprawdzała czy ma włączyć audio lub wyłączyć ?

 

Mój kod : 

using UnityEngine;
using System.Collections;


public class Timer : MonoBehaviour
{
    public int playtime = 0;
    private int seconds = 0;
    private int minutes = 0;
    private bool timeVisible = true;
    public bool test = true ;



   

    void Start()
    {
        StartCoroutine("PlayTime");

       
    }

    void update()
    {
        if (playtime < 5)
        {


            Debug.Log("off", gameObject);
        }
        else
        {
            test = false;
            Debug.Log("on", gameObject);

            AudioSource audio = GetComponent<AudioSource>();
            audio.Play();


        }
    }

    private IEnumerator PlayTime()
    {
        while (true)
        {
            yield return new WaitForSeconds(1);
            playtime += 1;
            seconds = (playtime % 60);
            minutes = (playtime / 60) % 60;
           
        }
    }
    void OnGUI()
    {
        GUI.Label(new Rect(50, 50, 100, 50), minutes.ToString() + " : " + seconds.ToString());
    }


       
     
}
Opublikowano

Ale po co tak się męczyć? Nie lepiej napisać skrypt, który włącza komponent Audio Source po 5 sekundach i wyłącza po 30 sekundach?

 

Proszę:

 

using UnityEngine;
using System.Collections;
 
public class Timer : MonoBehaviour {
 
     public float startAudio = 5.0f;
     public float stopAudio = 30.0f;
 
     private AudioSource source;
     private float timer = 0.0f;
 
     // Use this for initialization
     void Start () {
          source = GetComponent<AudioSource>();
          source.gameObject.GetComponent<AudioSource>().enabled=false;
     }
 
     // Update is called once per frame
     void Update () {
          timer += Time.deltaTime;
          if(timer > startAudio) {
               source.gameObject.GetComponent<AudioSource>().enabled=true;
          }
          if(timer > stopAudio) {
               source.gameObject.GetComponent<AudioSource>().enabled=false;
               //timer = 0;
          }
     }
}
Sprawa wygląda bardzo prosto. Tworzysz pusty GameObject, dodajesz do niego komponent Audio Source, a następnie do komponentu Audio Source wrzucasz muzykę, która ma być grana, następnie do GameObject wrzucasz powyższy skrypt i to wszystko. Ustalasz tylko czas po jakim muzyka ma zacząć grać, a po jakim ma się wyłączyć. Ten skrypt jest o wiele prostszy od Twojego i krótszy przez co wykonywanych jest mniej obliczeń. Działa on na zasadzie, że po 5 sekundach włącza komponent AudioSource, a po 30 sekundach go wyłącza. Oczywiście czas ten można zmieniać, ponieważ są to zmienne publiczne. Jeżeli chcesz zapętlić działanie skryptu, aby włączał i wyłączał muzykę w kółko wystarczy, że usuniesz // z linijki //timer = 0;. Lub zamiast takiego rozwiązania możesz dodać zmienną bool, a następnie if'a, który sprawdza, czy bool ma wartość true, jeżeli tak to resetuje timer, a jeżeli nie to czas zliczany jest nadal. Dzięki zmiennej bool będziesz mógł zawsze z poziomu gry ustawić, czy skrypt ma być zapętlony, czy też nie.

2cf6pe0.jpg


"Hmm jak by to powiedzieć... Moje pierwsze wrażenie o grupie... Nie lubię was..." - Kakashi


Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...