Şifremi/Kullanıcı Adımı Unuttum
Bağlan Google+ ile Bağlan Facebook ile Bağlan
Şimdi Ara

Unity 3d Hareket Sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir Kullanıcı
19
Cevap
0
Favori
894
Tıklama
Giriş
Mesaj
  • Onbaşı
    30 Mesaj
    Merhabalar, ben android 2d bir oyun yazıyorum hatta bitti bile denebilir sadece tek bir sıkıntım kaldı, oyun karakterim ekrana dokundukça uçuyor telefonu sağa sola çevirince sağa sola gidiyor ama ekranın dışına çıkıyor bunun için bir çok yol denedim ama bir türlü beceremedim.

    Collider ekledim olmadı rigidbody ekledim collider ile birlikte boş bir gameobje ye tüm ayarlarıyla tek tek oynadım araştırmalar yaptım olmadı.

    karakterin gidebileceği sınırları belirleyerek if komutu yazdım birçok kombinasyon denedim fakat bu sefer de ya hiç hareket etmedi yada belirlediğim sınırlara gelince takıldı hareket etmedi yardımcı olur musunuz hareket kodlarımı paylaşıyorum aşağıda;

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Audio;

    public class CharacterFlying : MonoBehaviour {

    public float gravity;
    Vector3 bird_move = Vector3.zero;
    public Vector3 flyspeed;
    bool boolflapping;
    public float maxspeed;
    public static float speedforward;
    public float left = -2.38f;
    public float right = 2.43f;
    public float CharSpeed = 0.040f;
    public AudioSource jump;


    void Start()
    {

    }

    void FixedUpdate()
    {

    if (!UserSettings.GameStart)
    {
    if (!UserSettings.GameOver)
    {
    if (!UserSettings.Pause)
    {
    bird_move += new Vector3(0, /*-gravity*/-0.18f, 0);
    if (boolflapping == true)
    {
    boolflapping = false;
    bird_move += flyspeed;
    }
    if (bird_move.y <span>></span> maxspeed)
    {
    bird_move = new Vector3(bird_move.x, maxspeed, bird_move.z);
    }
    bird_move = new Vector3(speedforward, bird_move.y, bird_move.z);
    /*float rot;
    if (transform.position.y <span><</span> 0)
    {
    rot = Mathf.Lerp(0, 0, -bird_move.y / maxspeed);
    transform.rotation = Quaternion.Euler(0, 0, rot);
    }*/
    transform.position += bird_move * Time.deltaTime;
    }
    }
    }


    }

    void Update()
    {
    if (transform.position.x <span>></span> left && transform.position.x <span><</span> right)
    {
    transform.Translate(Input.acceleration.x, 0, 0); //Denenecek
    }
    if (Input.GetKeyDown(KeyCode.Space))
    {
    boolflapping = true;
    jump.Play();

    }
    if (Input.touchCount <span>></span> 0)
    {
    boolflapping = true;
    jump.Play();
    }

    /*if (Input.acceleration.x <span>></span> 0.25)
    { //sağ tarafa döndürürken yapılacak işlem
    transform.Rotate(5, 0, 0); // sağ tarafa (rotasyon.x'e) 5 ekle
    }
    if (Input.acceleration.x <span><</span> -0.25)
    { //sol tarafa döndürürken yapılacak işlem
    transform.Rotate(5, 0, 0); // sol tarafa (rotasyon.x'e) 5 eksilt
    }*/

    /*if (Input.acceleration.x <span>></span> 0.25)
    {

    if (transform.position.x <span><</span> Screen.width * 0.3f)
    {
    if (transform.position.x <span>></span> left)
    {
    transform.Translate(Vector3.right * CharSpeed);
    }
    }
    }else if (Input.acceleration.x <span><</span> -0.25)
    {
    if (transform.position.x <span>></span> Screen.width * 0.7f)
    {
    if (transform.position.x <span><</span> right)
    {
    transform.Translate(Vector3.left * CharSpeed);
    }
    }
    }*/


    /* if(Input.acceleration.x <span>></span> 0.25)
    {
    transform.Translate(Vector3.left * CharSpeed);
    }

    if (Input.acceleration.x <span>></span> -0.25)
    {
    transform.Translate(Vector3.right * CharSpeed);
    }*/

    }
    }



    |
    |
    _____________________________




  • Yarbay
    2788 Mesaj
    Ekranın çıkılmaması gereken yerlerine uzunca box collider 2d ekle ve main cameraya sabitle. Kamera gittikçe boxcollider2d de onu takip edeceğinden karakterin de çok yukarı zıplarsa veya sağa falan giderse collidere çarpacağından ekranın dışına çıkamaz. Ayrıca karakterinde de collider2d olmalı. Yoksa içinden geçer



    < Bu mesaj bu kişi tarafından değiştirildi 1ht1baron -- 10 Mart 2017; 14:44:47 >
    _____________________________
  • Onbaşı
    30 Mesaj
    Karaktere normal collider koydum 2d koymadım normal collider de aynı işlevi görmez mi ?
    _____________________________
  • Yarbay
    2788 Mesaj
    quote:

    Orijinalden alıntı: sivasle

    Karaktere normal collider koydum 2d koymadım normal collider de aynı işlevi görmez mi ?

    Hayır, görmez. İkisine de collider2d koymalısın.
    |
    |
    _____________________________
  • Onbaşı
    30 Mesaj

    3d collider ve rigidbody kullanıyorum normalde ama 2d kullan dediğiniz için denedim karakterdekini de 2d yaptım koymak istediğim sınıra da 2d ekledim z değerlerine hiç dokunmadan denedim yine çarpmıyor z değerlerini aynı yaptım yine değmiyor içinden geçip gidiyor
    |
    |
    1ht1baron kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yarbay
    2788 Mesaj
    quote:

    Orijinalden alıntı: sivasle

    3d collider ve rigidbody kullanıyorum normalde ama 2d kullan dediğiniz için denedim karakterdekini de 2d yaptım koymak istediğim sınıra da 2d ekledim z değerlerine hiç dokunmadan denedim yine çarpmıyor z değerlerini aynı yaptım yine değmiyor içinden geçip gidiyor

    Mesela karaktere circle collider 2d ekledik. Ekranın en üst kısmına da uzunca bir box collider 2d ekledik. İki colliderda da "Is Trigger" kutucukları işaretli OLMAMALI. Ayrıca Z değerleri farklı olsa bile 2d'de çarpıyor.
    ----
    Yanlışlıkla olmalı yazmışım Is trigger kutucukları işaretli OLMAMALI.



    < Bu mesaj bu kişi tarafından değiştirildi 1ht1baron -- 10 Mart 2017; 15:22:49 >
    _____________________________
  • Onbaşı
    30 Mesaj

    Is Trigger ları normalde işaretli değildi siz işaretli olmalı deyince işaretleyip denedim yine olmadı yani ikisinde de işaretli değilken bile çarpmıyor

    |
    |
    1ht1baron kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yarbay
    2788 Mesaj

    Yanlışlıkla yazmıştım. O kutucuk işaretli olunca içinden geçiyor. O yüzden işaretli olmaması gerek. Fakat yukarıya oluşturduğunuz box collider 2d'ye çarpması gerek. Şunun gibi düşünün. Bir tane kutu yaptınız ve buna box collider 2d verdiniz. Mantıken karakterin bu kutuya çarpması gerekiyor.
    |
    |
    sivasle kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Onbaşı
    30 Mesaj

    Cidden sizi de yormak istemiyorum ama 2d boş bir proje oluşturdum 2 tane sprite oluşturdum birine rigidbody 2d ve box collider 2d ekledim diğerine box collider 2d ekledim hareket kodlarını ekledim ama çarpmadılar izlediğim tüm videolarda çarpıyor hareket kodlarını kaldırıp gravity kullandım yine alttakinin içinden geçip düştü triggerlar da işaretli değil. sonra 3d rigidbody ve collider ekledim ikisine de yerçekimini açtığımda alttakine çarpıp üstünde durdu bunu benim istediğim şekil olan sağ tarafa koydum aynı ayarlarda sağa götürdüğümde içinden geçiyor fakat durmuyor ve pozisyonları kaymaya başlıyor spritelar sağa sola savruluyor
    |
    |
    1ht1baron kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yarbay
    2788 Mesaj

    Bu işte bir gariplik var. Çarpması gerekiyordu. Ben de unity'de baya bir acemiyim. Belki uzman arkadaşlar yardımcı olabilirler.
    Ayrıca bu videoyu izlemeni tavsiye ederim:
    https://www.youtube.com/watch?v=86Bgt--Ww7w
    Collider2d üzerinde karakteri yürütüyor mesela. Belki yardımcı olabilir.
    |
    |
    sivasle kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Onbaşı
    30 Mesaj

    Çok teşekkür ederim ilginiz için artık çözeceğiz bir şekilde
    |
    |
    1ht1baron kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yüzbaşı
    431 Mesaj
    quote:

    Orijinalden alıntı: sivasle

    Çok teşekkür ederim ilginiz için artık çözeceğiz bir şekilde

    Nasıl oluyor olay tam olarak yani ? Kamera ile karakterin bir ilgisi yok ki. Kamera çizimini yapar, sen GameObject'i hareket ettiriyorsun. Bunuda basit bir CameraScript ile çözebilirsin. Yani camera o karakteri takip etmesini istersin ve hiçbir zaman kamera dışına çıkmaz. Collider çarpışmalarını önlemek için de IsTrigger seçeneğini açman yeterlidir.

    Ekranının dışına çıkmaması için de X ve Y pozisyonlarına Clamp atman yeterlidir. Yani şu değerlerden az veya fazla olmasın mânâsında.
    _____________________________
    Loading...
  • Onbaşı
    30 Mesaj

    Kamera sabit, oyun sabit bir sahnede geçiyor yukarı doğru zıplıyor ama ekran sınırları içerisinde ne kamera ne karakter çıkmıyor yukarı oyun bu şekilde, benim sorunum 2d collider koyduğumda karaktere ve istediğim sınıra hiçbir şekilde çarpışmıyorlar is trigger ları işaretli değil 3d collider koyduğumda ise temas ettiğinde rotasyonları kayıyor rotasyonları kilitlediğimde de içinden geçip gidiyor çok saçma sapan bir mesele ve bir türlü çözemedim
    |
    |
    Dentrax kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Onbaşı
    30 Mesaj

    Şöyleki detaylıca anlatayım yaptığım oyunu boşverelim 2d bir proje oluşturdum ve buna 3 tane 2d sprite oluşturdum birini karakter yaptım, birini alt tarafa birini sağ tarafa koydum karaktere 2d rigidbody ve 2d box collider ekledim, alttakine ve sağdakine 2d box collider ekledim ve hareket etme kodlarını yazıp karakter sprite ına koydum o kodları ve resimleri aşağıda paylaşacağım.

    Şimdi oyunu başlattım aşağı hareket ettim çarpmıyor içinden geçiyor, sağa hareket ettim sağdakinin de içinden geçiyor bu sefer yukarı çıkartıp karakterin yer çekimini açıyorum ve aşağıdaki sprite ın üstünde kalıyor, ama kendim hareket ettiğimde içinden geçiyor.

    Sonra hepsini siliyorum ve 3d rigidbody ve 3d colliderler ekliyorum yer çekimini açıyorum içinden geçip aşağı düşüyor yer çekimini kapayıp hareket ettiriyorum içinden geçiyor ve karakterimin rotasyonları kaymaya başlıyor yani kendi etrafında yukarı aşağı sağa sola dönmeye başlıyor. Rigidbody den rotasyonları kitliyorum bu sefer de sadece içinden geçip gidiyor.

    Bunlar sprite lar 2d colliderler varken;


    Bu da hareket kodum;
     
    void Update()
    {
    if (Input.GetKey(KeyCode.A))
    {
    transform.Translate(Vector2.left * CharSpeed);
    }
    else if (Input.GetKey(KeyCode.D))
    {
    transform.Translate(Vector2.right * CharSpeed);
    }
    else if (Input.GetKey(KeyCode.S))
    {
    transform.Translate(Vector2.down * CharSpeed);
    }else if(Input.GetKey(KeyCode.W))
    {
    transform.Translate(Vector2.up * CharSpeed);
    }
    }
    |
    |
    Dentrax kullanıcısının, bahsedilen mesajını gör
    _____________________________




  • Yüzbaşı
    431 Mesaj

    İçinden geçmesinin tek sebebi vardır o da Collider çalışmıyordur. 2D olsun 3D olsun fark etmez. Collider ve Rigidbody genellikle beraber kullanılır. Fakat sen burda Collider eklemişssin ama Rigidbody yok. Onlarada eklemen gerekiyor. Daha sonra yerçekimi vs. kapatman gerekiyor ki aşağı veya yukarı düşmesin.

    Buradan şuraya varıyoruz ki Collider'ı Rigidbody ile beraber kullanıyoruz. Çünkü nesnenin fiziği yok ama collideri var ? Mantık olarak fiziği yoksa içinden geçmesi gerekir ki tam da dediğin gibi oluyor. Şöyle düşün, bir nesne yapacaksın enini boyunu metre ile ölçtün (Collider) ama nesne ortada yok ? Teorik olarak olmayan nesnenin içinden geçebilirsin. Oraya resim koymak senin içinden geçemeyeceğin anlamına gelmiyor. (:
    |
    |
    Bahsedilenler: sivasle
    _____________________________
    Loading...
  • Onbaşı
    30 Mesaj

    Şöyle anlatayım buraya yazmadan önce tüm kombinasyonları denedim siz dediniz diye tekrar denedim hepsinde 2d collider ve rigidbody var hiçbir ayarlarına dokunmadan başlattığımda hepsi birbirinin içinden geçip gidiyor hepsinin yer çekimi kapalı, karaktere yer çekimi ekliyorum yine alttakinin içinden geçip gidiyor, alttaki sprite ın rigidbody sini kinematic yapıyorum yer çekimini açıyorum karakterin de yer çekimini açıyorum karakter alttakinin üstüne konuyor, sağdakini kinematik yapıyorum yer çekimini açıyorum aşağı doğu düşmeye başlıyor ama biraz önce alttakini kinematik yapıp yer çekimini açtığımda sabit kalıyordu yani çok garip bir hata var isterseniz teamviewer ile bağlanıp ne dediğimi daha iyi anlayabilirsiniz.
    |
    |
    Dentrax kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yüzbaşı
    431 Mesaj
    Youtube üzerinde Collider ve Rigidbody 'i anlatan inglizce videolar var. Detaylı bir şekilde anlatanı bulup bakmanı öneririm. Birşeyi ters yapıyorsun ki böyle bulmak biraz zor. (:
    |
    |
    _____________________________
    Loading...
  • Binbaşı
    1124 Mesaj

    Çarpışabilir 2d sprite mı istiyorsunuz Bütün sprite lerde Rigidbody 2d ve Box collider 2d olması lazım ve hepsinde gravity scale 0 olması lazım başka bişeye gerek yok.Bu şekilde içinden geçmesine imkan yok.Mesela hepsi eşit seviyede olması için gravity scaleyi 0 yapmak yeterli ama sizin scriptin içinden de gravityi kontrol ettiğinizi görüyorum o karıştırıyor olabilir scriptden onu çıkarın veya 0a eşitleyin.



    < Bu mesaj bu kişi tarafından değiştirildi Bir internet kullanıcısı -- 11 Mart 2017; 23:10:5 >
    |
    |
    sivasle kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Onbaşı
    30 Mesaj

    Çok sağolasın hallettim dediğin gibi değil de simulated larını açtım ve x,y,z de hareket etmelerini engelledim çarpışmaya başladılar şuan karakterim ekran dışına çıkmıyor ama şöyle bir sorunum oluştu sağ ve sol sınırlara geldiğimde ve ekran dışına çıkmaya çalıştığımda titriyor içine girip girip çıkıyor yani, telefonda da çok hızlı sağa veya sola çevirdiğimde içinden geçip kayboluyor yavaş çevirince sıkıntı yok.
    |
    |
    Bir internet kullanıcısı kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Çavuş
    59 Mesaj
    transform.Translate kullandığın için objelerin içinden geçiyorsun colliderlar ile bir alakası yok.
    Karakterini rigibody ile kontrol et. Örneğin rigidbody.MovePosition(), rigidbody.velocity vs..

    Karakterinin hareket edeceği alanı sınırlamak istiyorsan Mathf.Clamp komutunu kullanabilirsin.

    Örneğin rigidbody.position = new Vector2(Mathf.Clamp(rigidbody.position.x, -5, 5), Mathf.Clamp(rigidbody.position.y, -5, 5));

    İlk değer x pozisyonu -5 ila 5 arasında sınırlar. Sadece bu alan içeriside hareket eder. İkinci değerde y pozisyonunu -5 ila 5 arasında sınırlar
    |
    |
    _____________________________
HızlıCevap
Sayfaya Git:
Sayfa:
1
Reklamlar
sohbet
üniversite
Lastik Fiyatları
haberler
son dakika
Bu sayfanın
Mobil sürümü
Mini Sürümü

BR4
0,391
1.2.165

Reklamlar
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.