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);
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.
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.
ClaveryC
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);