Soru & Cevap

Unity 3D'de Mobil Kontrol

29.08.2016 - 12:41

Unity 3D sayesinde bir android oyun geliştiriyorum ama bir sorunum var bir karakter var ve bu karakter telefonun sağ kısmına dokundum mu sağa sol kısmına dokundum mu sola gitmesini istiyorum ama bir türlü başaramadım.Bu işlerde yeniyim oyunu c# ile geliştiriyorum yardımcı olursanız sevinirim. 

840 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user doktorbune41
doktorbune41
29.08.2016 - 09:00

Ekranda sağa doğru harekette sağa sola doğru harakette sola gidicek şekilde benim yazdığım bi kod var bakabilirsin.

   public Vector3 karakterPoz;
   //karakterimizin GameObject ve unitydeki adi karakterimizin o anki pozisyonunu her update'de almamız gerekir.
   karakterPoz = GameObject.Find("karakterimiz").transform.position;
   private Vector2 startPos;
   private Vector2 fingerStart;
   private Vector2 fingerEnd;
   //Karakterimiz Transform olarak tanımlı
   public Transform karakter;
   //time global olarak 0.0f olarak tanımla.Her updatedeşu işlem yapılması gerekiyor.
   time -= Time.deltaTime;
foreach (Touch touch in Input.touches)
                {
                    //Hassaslık Oranı şuan çok düşük ama artırabilirsin.
                    if (time < 0.75f)
                    {
                        //Parmak Hareketi Başladıysa(Örn : Sağ'a doğru) , Parmak Hareketimiz sonucu parmağımız başlangıç ve bitiş noktalarını kaydediyoruz.
                        if (touch.phase == TouchPhase.Began)
                        {
                            fingerStart = touch.position;
                            fingerEnd = touch.position;
                        }
                    
                        if (touch.phase == TouchPhase.Moved)
                        {
                            fingerEnd = touch.position;

                            //Burası sağa veya sola doğru kontrolü.Başlangıç Olarak X=1 Y=2 olsun.Bitiş olarakda sağa çektiğmizi düşünürsek,
                            // X=2 Y=2 aynı kalsın. |(1-2)| > |(2-2)| koşulunu sağladığı için bu if'e giricek değilse aşağı yukarı hareketidir.Diyim başka bir method yazmamız lazım
                            //Eğer istersen onuda eklerim
                            if (Mathf.Abs(fingerStart.x - fingerEnd.x) > Mathf.Abs(fingerStart.y - fingerEnd.y))
                            {

                                //Bitiş x=2 başlangıç x=1 olduğuiçin bu koşulu sağladı yani sağa doğru bir çekme var.
                                if ((fingerEnd.x - fingerStart.x) > 0)
                                {

                                         //Örneğin Her sağa doğru el hareketi yapıldığında karakterimiz 1 adım sağa gitmesini istiyorsak
                                         //O anki karakter Pozisoyununda x'ine 1 eklememeiz lazım.Koordinat sisteminde düşün x+1 olursa y ve z sabitse sadece sağa doğru 1 adım gitmiş olur.
                                         karakter.position = new Vector3(karakterPoz.x + 1, karakterPoz.y, karakterPoz.z);
                                         time = 1.00f;
                                
                                  }
                          
                                else
                                {
                                  // Sola Doğru
                                }

                            }

                            //Aşağı ve Yukarı 
                            else
                            {
                                //Yukarı
                                if ((fingerEnd.y - fingerStart.y) > 0)
                                {
         
                                }
                                //Aşağı
                                else
                                {
                                   

                                }
                            }
                        }
            
        }
    }

 

Adım Soyadım
29.08.2016 - 09:11
Eğer sen ekrana button koyup yapıcaksan; karakter.position = new Vector3(karakterPoz.x + 1, karakterPoz.y, karakterPoz.z); şu kısım yeterli olur sana.
Nazmi Berat Hamzaoğlu
29.08.2016 - 12:36
yok buton koymicam.
Nazmi Berat Hamzaoğlu
29.08.2016 - 12:36
bide kardeşim şu time larda hata veriyo nasıl çözebilirim
Nazmi Berat Hamzaoğlu
29.08.2016 - 12:49
private float time; ekledim çözdüm bide şu public transform karakter de sıkıntı çıkıyo acaba onu nasıl çözerim
Nazmi Berat Hamzaoğlu
29.08.2016 - 01:02
saol abi verdiğin kod çalışmadı neden olduğunu bilmiyorum ama bir takım hatalar verdi o hataları gidermeme rağmen çalışmadı genede teşekkürler.
Adım Soyadım
29.08.2016 - 01:51
O public transform karakter'i MainCamera varya orda Script tarafından, yani mainCamerana tıklayınca sağ tarafda Script kısmında aşağıda karakter olucak.O karakterin değerine kendi karakterini ata.