Şimdi Ara

unity 2d obje üretmek (yardım lütfen)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
23
Cevap
0
Favori
3.343
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • arkadaşlar unity'de beginner sayılırım ve bi tane 2d oyun yapmaya çalışıyorum fakat obje üretme de problem yaşıyorum. hangi scripti denediysem olumlu sonuç alamadım. benim tek istediğim belli aralıklarla objenin doğması. yani 1. ve 2. objenin arasında 10px olacak ve bu sonsuza kadar devam edecek doğdukça doğacak. bunu nası yapcam söyler misiniz? daha yeniyim bu işlerde günlerdir uğraştım yapamadım.



  • Bunu birden çok yöntemle yapabilirsin. En basit olarak bir tane obje için prefab oluştur. While döngüsü içinde Instantiate fonksiyonuyla prefab çağır ve prefab pozisyonunu döngüde değerle arttır.

    Tabi böyle birşey yaparsan unity 10 saniye içinde patlar çünkü sahnede binlerce aynı objeden oluşur. Bunun çözümü içinde birçok metod mevcut. Örneğin karakterin hızına göre zamanla nesneler oluşturabilirsin veya trigger kullanabilirsin. Karakterin arkasından kalan objeleride yoketmen gerek.

    Yada bir döngü yaparak her arka tarafta kalan objeyi geri en öne yerleştirebilirsin. Bu şekilde belki 10 tane objeyle sonsuz bir döngü yapabilirsin. Sana tavsiyem şu live training izlemen. Bunu izledikten sonra daha iyi bir fikre kavuşabilirsin.

    https://www.youtube.com/watch?v=7dP7R-GbFkM




  • quote:

    Orijinalden alıntı: Androgate

    Bunu birden çok yöntemle yapabilirsin. En basit olarak bir tane obje için prefab oluştur. While döngüsü içinde Instantiate fonksiyonuyla prefab çağır ve prefab pozisyonunu döngüde değerle arttır.

    Tabi böyle birşey yaparsan unity 10 saniye içinde patlar çünkü sahnede binlerce aynı objeden oluşur. Bunun çözümü içinde birçok metod mevcut. Örneğin karakterin hızına göre zamanla nesneler oluşturabilirsin veya trigger kullanabilirsin. Karakterin arkasından kalan objeleride yoketmen gerek.

    Yada bir döngü yaparak her arka tarafta kalan objeyi geri en öne yerleştirebilirsin. Bu şekilde belki 10 tane objeyle sonsuz bir döngü yapabilirsin. Sana tavsiyem şu live training izlemen. Bunu izledikten sonra daha iyi bir fikre kavuşabilirsin.

    https://www.youtube.com/watch?v=7dP7R-GbFkM

    burdaki scripti kullandım ben ama olmadı. 2d rope system kullanıyorum dediğini uyguladığımda ise ip sürekli iki objenin arasında doğuyor yani yeni bi obje olarak değil




  • quote:

    Orijinalden alıntı: WOLKY DJ

    quote:

    Orijinalden alıntı: Androgate

    Bunu birden çok yöntemle yapabilirsin. En basit olarak bir tane obje için prefab oluştur. While döngüsü içinde Instantiate fonksiyonuyla prefab çağır ve prefab pozisyonunu döngüde değerle arttır.

    Tabi böyle birşey yaparsan unity 10 saniye içinde patlar çünkü sahnede binlerce aynı objeden oluşur. Bunun çözümü içinde birçok metod mevcut. Örneğin karakterin hızına göre zamanla nesneler oluşturabilirsin veya trigger kullanabilirsin. Karakterin arkasından kalan objeleride yoketmen gerek.

    Yada bir döngü yaparak her arka tarafta kalan objeyi geri en öne yerleştirebilirsin. Bu şekilde belki 10 tane objeyle sonsuz bir döngü yapabilirsin. Sana tavsiyem şu live training izlemen. Bunu izledikten sonra daha iyi bir fikre kavuşabilirsin.

    https://www.youtube.com/watch?v=7dP7R-GbFkM

    burdaki scripti kullandım ben ama olmadı. 2d rope system kullanıyorum dediğini uyguladığımda ise ip sürekli iki objenin arasında doğuyor yani yeni bi obje olarak değil

    Değer vererek vector2 değerini değiştir. Bu söylediğin yerin kodunu paylaşırsan daha iyi olur.




  • quote:

    Orijinalden alıntı: Androgate

    quote:

    Orijinalden alıntı: WOLKY DJ

    quote:

    Orijinalden alıntı: Androgate

    Bunu birden çok yöntemle yapabilirsin. En basit olarak bir tane obje için prefab oluştur. While döngüsü içinde Instantiate fonksiyonuyla prefab çağır ve prefab pozisyonunu döngüde değerle arttır.

    Tabi böyle birşey yaparsan unity 10 saniye içinde patlar çünkü sahnede binlerce aynı objeden oluşur. Bunun çözümü içinde birçok metod mevcut. Örneğin karakterin hızına göre zamanla nesneler oluşturabilirsin veya trigger kullanabilirsin. Karakterin arkasından kalan objeleride yoketmen gerek.

    Yada bir döngü yaparak her arka tarafta kalan objeyi geri en öne yerleştirebilirsin. Bu şekilde belki 10 tane objeyle sonsuz bir döngü yapabilirsin. Sana tavsiyem şu live training izlemen. Bunu izledikten sonra daha iyi bir fikre kavuşabilirsin.

    https://www.youtube.com/watch?v=7dP7R-GbFkM

    burdaki scripti kullandım ben ama olmadı. 2d rope system kullanıyorum dediğini uyguladığımda ise ip sürekli iki objenin arasında doğuyor yani yeni bi obje olarak değil

    Değer vererek vector2 değerini değiştir. Bu söylediğin yerin kodunu paylaşırsan daha iyi olur.

    unity dokümanların da instantiate etmenin kodu var onu yazdım fakat hep aynı yerde doğuyor. ve belli bi adet sayısı vererek ürüyor. ayrıca oyunda camera follow kullanıyorum yani prefablar yerlerinde duruyor hareket etmiyorlar. benim isteğim (spawn işi tamam) sadece ilerlerken prefabların belli aralıklarla doğması falppy bird'deki gibi belli aralıklarla borular doğuyor ya aynısı işte ama sabit olarak flappy bird'de borular hareket ediyordu sola doğru gidiyordu yani kuş olduğu yerde duruyor ama borular kuşa doğru geliyordu. ben tam tersini istiyorum ama yapamadım ztn unity'de beginner sayılırım. anlamadıysan video ile gösterebilirim.

    using UnityEngine; 
    using System.Collections;

    public class SpawnArea : MonoBehaviour {
    public Transform prefab;
    void Start() {
    for (int i = 0; i < 2; i++) {

    Instantiate(prefab, new Vector3(i * 2.0F, 0, 0), Quaternion.identity);
    }
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi Guest-97901DBF5 -- 23 Eylül 2015; 20:31:13 >




  • Anladım mesela bak benim bu attığım kodda aynı hizada nesne oluşturur. width değeriyle genişlik aralığını ayarlarsın. prefabCount ile de kaç adet olacağını seçersin. Inspector de bu değerleri değiştirirsin. Ama dediğim gibi bir yöntem kullanman lazım yoksa belirli bir noktadan sonra patlar.

     
    using UnityEngine;
    using System.Collections;

    public class SpawnArea : MonoBehaviour
    {
    public Transform prefab;
    public float width = 3;
    public int prefabCount = 0;
    void Start()
    {
    for (int i = 0; i < prefabCount; i++)
    {
    Instantiate(prefab, new Vector3(i*width,0,0), Quaternion.identity);
    }
    }
    }


    Prefabların belirli bir aralıkta doğmasını istiyorsan start fonksiyonunda kullanamazsın. Çünkü Start fonksiyonu bir kere çalışır ve daha çalışmaz. Instantiate bir fonksiyon içinde yazman lazım sonrada oyun zamanına veya trigger koyarak oluşturmalısın. Basit bir örnek göstereyim.


     
    using UnityEngine;
    using System.Collections;

    public class SpawnArea : MonoBehaviour
    {
    public Transform prefab;
    public float width = 3;
    public float second = 1;
    private bool create = true;
    void Update()
    {
    if(create)
    StartCoroutine("CreatePrefab");
    }

    IEnumerator CreatePrefab()
    {
    create = false;
    width += width;
    Instantiate(prefab, new Vector3(width, 0, 0), Quaternion.identity);
    yield return new WaitForSeconds(second);
    create = true;
    }
    }


    Burada zaman ile nesne oluşturuyor. Mesela 1 saniyede bir ileriye doğru bir nesne oluşturuyor.



    < Bu mesaj bu kişi tarafından değiştirildi Androgate -- 23 Eylül 2015; 20:49:25 >




  • quote:

    Orijinalden alıntı: Androgate

    Anladım mesela bak benim bu attığım kodda aynı hizada nesne oluşturur. width değeriyle genişlik aralığını ayarlarsın. prefabCount ile de kaç adet olacağını seçersin. Inspector de bu değerleri değiştirirsin. Ama dediğim gibi bir yöntem kullanman lazım yoksa belirli bir noktadan sonra patlar.

     
    using UnityEngine;
    using System.Collections;

    public class SpawnArea : MonoBehaviour
    {
    public Transform prefab;
    public float width = 3;
    public int prefabCount = 0;
    void Start()
    {
    for (int i = 0; i < prefabCount; i++)
    {
    Instantiate(prefab, new Vector3(i*width,0,0), Quaternion.identity);
    }
    }
    }


    Prefabların belirli bir aralıkta doğmasını istiyorsan start fonksiyonunda kullanamazsın. Çünkü Start fonksiyonu bir kere çalışır ve daha çalışmaz. Instantiate bir fonksiyon içinde yazman lazım sonrada oyun zamanına veya trigger koyarak oluşturmalısın. Basit bir örnek göstereyim.


     
    using UnityEngine;
    using System.Collections;

    public class SpawnArea : MonoBehaviour
    {
    public Transform prefab;
    public float width = 3;
    public float second = 1;
    private bool create = true;
    void Update()
    {
    if(create)
    StartCoroutine("CreatePrefab");
    }

    IEnumerator CreatePrefab()
    {
    create = false;
    width += width;
    Instantiate(prefab, new Vector3(width, 0, 0), Quaternion.identity);
    yield return new WaitForSeconds(second);
    create = true;
    }
    }


    Burada zaman ile nesne oluşturuyor. Mesela 1 saniyede bir ileriye doğru bir nesne oluşturuyor.

    yemin ediyorum belli aralıklarla doğma işi işe yaradı teşekkür ederim. :D günlerdir uğraştım ama bir türlü yapamadım unity forumlarında bile bana yardımcı olamadılar. ilk yazdığın kodu denedim oldu fakat o da belli bi adet üzerinde oluyor tabi alttaki kodu denemedim onu denicem bide şu var hani mesela 100'üncü veya 200'cü ipe yada her ipe atlayışta bir onraki ipin sallanma hızının artmasını istiyorum aslında bunu araştırarak belki bulabilirim bilmiyorum. ilk yazdığın kod çok iyi oldu fakat adet kısmına mesela 1000 yazınca oyun kasmaya başladı alttakini de denicem sonucu yazarım. teşekkürler.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-97901DBF5 -- 23 Eylül 2015; 22:13:20 >




  • alttaki kodu denedim ama belli aralıklarla doğmuyor mesela 1. ve 2. nesne yakınken 3. nesne bayağı uzakta doğuyor anlamadım
  • Aynen. Orada bir tane değişken atasam daha iyi olurmuş. Şu şekilde kullan.

     
    using UnityEngine;
    using System.Collections;

    public class SpawnArea : MonoBehaviour
    {
    public Transform prefab;
    public float width = 3;
    public float second = 1;
    private float sum;
    private bool create = true;
    void Update()
    {
    if(create)
    StartCoroutine("CreatePrefab");
    }

    IEnumerator CreatePrefab()
    {
    sum += width;
    Instantiate(prefab, new Vector3(sum, 0, 0), Quaternion.identity);
    yield return new WaitForSeconds(second);
    create = true;
    }
    }


    İpin hızının nerede hesapladığını bilmiyorum ama CreatePrefab() fonksiyonu içinde yapabilirsin.
  • Androgate A kullanıcısına yanıt
    second kısmında bi sıkıntı var play'e bastığım zaman 5'er tane 1 salise'de oluturuyor. ayrıca scripti gameobjecte atadığım zaman ip görünüyor. ayne şöyle:

     unity 2d obje üretmek (yardım lütfen)



    < Bu mesaj bu kişi tarafından değiştirildi Guest-97901DBF5 -- 23 Eylül 2015; 22:18:52 >
  • Satırı silmişim kopyalarken. Şunu Ienumerator içine ekle yeniden.

    create = false;

    Hız değerini nereden ayarlıyorsun? Bende unity olmadığı için bakamıyorum şuanda. Bir resmini atsana



    < Bu mesaj bu kişi tarafından değiştirildi Androgate -- 23 Eylül 2015; 22:24:31 >
  • Androgate A kullanıcısına yanıt
    bende koda bakarken diyorum bi sıkıntı var nası göremedim ya :D bide resimde gördüğün gibi bi nesne oluşuyor onu anlamadım nedir o??

    hızın kodu bu:



     unity 2d obje üretmek (yardım lütfen)



    < Bu mesaj bu kişi tarafından değiştirildi Guest-97901DBF5 -- 23 Eylül 2015; 22:34:50 >
  • Oraya şu şekilde ulaşırsın. Bundan sonrası da artık sana kalmış. Youtube daki Unity kanalındaki beginner scripting videolarını izlemeni tavsiye ediyorum.

     
    IEnumerator CreatePrefab()
    {
    SwingForce currentSwingForce;
    create = false;
    sum += width;
    currentSwingForce = Instantiate(prefab, new Vector3(sum, 0, 0), Quaternion.identity) as SwingForce;
    currentSwingForce.forceStrength = 10;
    currentSwingForce.maxSpeed = 3;
    currentSwingForce.timePerOneSide = 10;
    yield return new WaitForSeconds(second);
    create = true;
    }



    Yani burada currentSwingForce ile şuan sahne de oluşan prefab değerlerini ayarlıyorsun. Örnek olarak forceStrength , maxSpeed ,timePerOneSide gösterdim. Bu değerler sırayla artacaksa veya azalacaksa aynı width de yaptığım gibi bir şekilde değerleri ayarlarsın.




  • Androgate A kullanıcısına yanıt
    kod çalıştı fakat o zaman da üremeyi durduruyor. hızı arttırıyor mu anlayamadım
  • Ters yapmışım. Şu şekilde dene birde.

     
    IEnumerator CreatePrefab()
    {
    prefab.GetComponent<SwingForce>().forceStrength = 10;
    prefab.GetComponent<SwingForce>().maxSpeed = 3;
    prefab.GetComponent<SwingForce>().timePerOneSide = 10;
    create = false;
    sum += width;
    Instantiate(prefab, new Vector3(sum, 0, 0), Quaternion.identity);
    yield return new WaitForSeconds(second);
    create = true;
    }



    < Bu mesaj bu kişi tarafından değiştirildi Androgate -- 23 Eylül 2015; 23:16:50 >
  • Androgate A kullanıcısına yanıt
    NullReferenceException: Object reference not set to an instance of an object
    SpawnScript+<CreatePrefab>c__Iterator2.Movenext() hatası verdi şu başında prefab yazan kısımda

    aslında ben oyunu zorlaştırmak için hızı arttırmak istedim ama denemekte fayda var.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-97901DBF5 -- 23 Eylül 2015; 23:30:14 >
  • Olması lazımdı ama Unity olmadığı için bakamıyorum. Bayramdan sonra tekrardan bi bakarım.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • Androgate A kullanıcısına yanıt
    tamam yinede herşey için teşekkür ederim. hakkını nası ödicem bilmiyorum günlerdir uğraştım bunu yapmak için ama başaramadım unity forumlarında bile yardımcı olamadılar scriptler denedim işe yaramadı hiç birisi saol yinede
  • Rica ederim. Yardımcı olduysam ne mutlu bana. Kolay gelsin
  • Androgate A kullanıcısına yanıt
    bide oyunu başlatırken şu nesne çıkıyo nedir bu anlamadım neden çıkıyo olabilir??

     unity 2d obje üretmek (yardım lütfen)
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.