Şimdi Ara

Scripti bir süreliğine açmak

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
115
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • A Scripti

    function Update () {
    Debug.DrawRay(transform.position,Right*3f,Color.green);


    if(Physics.Raycast(transform.position,Right,hitR,3f)){
    if(hitR.collider.tag == "Right"){
    gameObject.GetComponent(B Scripti).enabled=true;
    }}}

    Arkadaşlar burada A scripti içinde if olayı her gerçekleştiğinde B scriptini açıp hemen geri kapatmak istiyorum yani 0.5 veya 1 saniye falan ama bu şekilde hep açık kalıyor.B scriptinde bir anlık gösterilmesi gereken bir efekt yazdım o yüzden açık kalmamalı.Şöyle birşey deniyorum olmuyor;


    function Update () {
    Debug.DrawRay(transform.position,Right*3f,Color.green);


    if(Physics.Raycast(transform.position,Right,hitR,3f)){
    if(hitR.collider.tag == "Right"){
    wait();
    }}}

    function wait(){
    yield WaitForSeconds (1);
    gameObject.GetComponent(B Scripti).enabled=true;
    }

    Burada yieldin içine girdiğm kodu 1 saniyeliğine çalıştırması gerekiyor 1 saniyeliğine çağırıyorum ama yine istediğim olmuyor 1 saniye sonra çalıştırıyor ve yine açık kalıyor.Bu konuya hakim arkadaşlar bi incelerse sevinirim nerede hata yapıyorum.







  • Javascript'i pek bilmiyorum fakat C#'da WaitForSeconds'ı kullanmak için şöyle yapman gerekiyor.

    void Update {
    if(birşeyler olduysa){
    StartCoroutine(wait());
    }
    }

    IEnumerator Wait(){
    yield return new WaitForSeconds(1f);
    //Gereken islemleri yap
    }

    Javascript yerine C# kullanmanı öneririm.
    Denetleme olayı Update içinde olduğu için Raycast her tetiklendiğinde 1 saniye bekleme işlemini çalıştıracaktır. Oraya bir önlem alman lazım.

    Diğer yöntem ise A scriptinde işlem gerçekleştiğinde B scriptini çalıştır. B scriptinin Start fonksiyonuna IEnumerator ile 1 saniye bekletip scripti kapat. Ya da Invoke yöntemini kullanarak 1 saniye sonra scripti kapat.
  • Clavery C kullanıcısına yanıt
    Teşekkürler cevap için.Evet Yield her durumda geç çalıştırıyormuş komutun görevini yanlış anlamışım.Ben belli bir süreliğine çalıştırıyor sanıp boşa uğraşıyormuşum.İşlem gerçekleşince b'yi true yapıyorum yieldi de kapatmak için kullanıyorum.

    function Update () {
    Debug.DrawRay(transform.position,Right*3f,Color.green);


    if(Physics.Raycast(transform.position,Right,hitR,3f)){
    if(hitR.collider.tag == "Right"){
    gameObject.GetComponent(B Scripti).enabled=true;
    wait();
    }}}

    function wait(){
    yield WaitForSeconds (1/2);
    gameObject.GetComponent(B Scripti).enabled=false;
    }
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.