Şimdi Ara

Unity 3d OnTriggerExit'ten Sonra Position Çalışmıyor

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
801
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar.Bir sorunu mvar ve bir türlü işin içinden çıkamadım.Normalde İLK Void UPDATE'deki tek olunca scripti eklediğim nesneyi(uzay gemisini) hareket ettiriyor ve sürekli o yönde gidiyor.OnTriggerStay'de ise uzay gemisindeki Collider bir nesnenin içinde kaldığında(meshini kaldırdığım bi küp) duration daki zamanı da kullanarak rotatei değiştiriyor. OnTriggerExit te ise uzay gemisindeki Collider meshsiz küpten çıktığında Tıpki void update deki gibi hareket etsin istiyorum (Yani şu oldu bakın; Uzay gemisi kalkıyor,kalktıktan bir süre sonra rotatei değiştiriyor ve bu sırada halen kalkıyor.Sonra ise kübün alanından çıkında hem kalkması hem de rotatei duracak ve hızlanıp gidecek) Ama yapamadım. On Trigger Exit ' e Vector3 esrefa = new Vector3(20.5f,0,0);
    transform.position += esrefa;
    Bi javascript yazdım fakat sadece o noktaya IŞINLIYOR.Hareket etmiyor.Fakat aynı kod Update'de işe yarıyor.Javascript le yazmayı denedim bi kısmı oldu ama C# bilgidğim için bu daha rahat geldi.
    Script burda;

     
    using UnityEngine;
    using System.Collections;

    public class Pozisyon : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }
    public float duration = 10.0f;

    // Update is called once per frame
    void Update () {
    Vector3 esref = new Vector3(0,0.03f,0);
    transform.position += esref;

    }
    void OnTriggerStay(Collider other) {
    transform.Rotate (Vector3.up, 2000.0f * Mathf.Deg2Rad / duration * Time.deltaTime);
    }
    void OnTriggerExit(Collider other) {
    Vector3 esrefa = new Vector3(20.5f,0,0);
    transform.position += esrefa;
    }
    }


    Anlayamayan olursa SS atabilirim.Teşekkürler...







  • mesajınıda kodunuda anlamadım ama bildiğim kadarıyla ontriggerexit sadece 1 kere çalılıyo. yani uzay gemin o yüzeyden çıktığında 1 kere çalışır o kod.

    onun yerini yüzeye girince bi booleanı true yaparsın çıkınca false yaparsın, updatetende if girdiyse if çıktıysa diye komutları öyle yazarsın

    yani şöyle bişey

    update{

    if girdi
    kodlar....


    if !girdi
    başka kodlar...

    }


    ontriggerenter
    girdi=true


    ontriggerexit
    girdi=false
  • [__Zahid__] kullanıcısına yanıt
    Cevap için teşekkür ederim mantık olarak doğru olsa da işlevde çalışacağını sanmam.Update'de loop ediyo ise exitten bir değer tanıtıp ta update'e yüklersem aslında o kuralı çiğnemiş olurum.O zaman da exitten sonra böyle bir kural olması gerekmezdi.Bence loop ettirmek için bi yolu yok.(Şimdi farkettim de lopp demişim.Looptan kastım hareketli olması felan :D)
  • Zahidin önerdiği çözüm doğru olan, dene çalışacaktır.

    using UnityEngine; 
    using System.Collections;

    public class Pozisyon : MonoBehaviour {

    public bool kalkisTamamlandiMi = false;
    public Vector3 esref = new Vector3(0,0.03f,0);
    public Vector3 kalkisSonrasiHiz = new Vector3 (20.5f, 0, 0);
    public float duration = 10.0f;

    void Update () {
    if(kalkisTamamlandiMi)
    transform.position += kalkisSonrasiHiz;
    else{
    transform.Rotate (Vector3.up, 2000.0f * Mathf.Deg2Rad / duration * Time.deltaTime);
    transform.position += esref;
    }
    }

    void OnTriggerExit(Collider other) {
    kalkisTamamlandiMi = true;
    }
    }


    bunu dene



    < Bu mesaj bu kişi tarafından değiştirildi Just Smile -- 5 Haziran 2014; 15:34:54 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.