1 Mart 2017 Çarşamba

Mobil Uygulama Geliştirmeye Başlangıç

Öncelikle Merhaba

Bu yazı benim bu konuda yazdığım ilk makaledir. Yazılım sektöründe az da olsa tecrübe ettiğim şeyleri işinize yaraması ümidiyle sizlerle paylaşıyorum. Umarım herkes için yararlı bir yazı olacaktır.

Mobil Uygulama Geliştirmek İçin Bazı Alternatifler

Diyelim ki bir mobil uygulama geliştirmek istiyorsunuz. İlk olarak sormanız çok muhtemel olan sorulardan başlayalım.

1 – Uygulama tüm mobil platformlarla mı çalışacak yoksa tek bir platforma özel mi olacak?
2 – Uygulamanın hızlı çalışması sizin için önemli mi?
3 – Uygulamanın boyutu sizin için önemli mi?
4 – Kullanacağınız programlama dili sizin için önemli mi?
5 – Uygulamayı bitirmek için ne kadar süreniz var ?

Şimdi yukarıdaki sorulara hep birlikte cevap arayalım. Öncelikle mobil uygulama geliştirirken önümüzde bir çok seçenek vardır. Mobil uygulama geliştirme teknikleri için 2 prensip olduğunu söyleyebiliriz. Uygulamanız ya Native yada Hibrit olacaktır. İkisininde birbirine karşı üstün ve zayıf yönleri bulunmaktadır.

Native ve Hibrit

Native direkt olarak platform için oluşturulmuş yapıları kullanarak ortaya çıkardığınız uygulamadır. Hibrit ise platform bağımsız olarak tıpkı bir web projesi gibi yazdığımız uygulamadır. Şimdi avantaj ve dezavantajlarına bakalım.

Native Uygulama Avantajları

  • Native uygulama doğrudan işletim sisteminin kaynaklarına erişebilir ve kullanabilir.
  • Native uygulama stabildir. Dışarıdan gelen veri paketlerini Hibrit uygulamalara göre daha hızlı alır.
  • Native uygulama daha performanslı ve güvenilirdir.
  • Native uygulama görsel olarak daha geniş bir yelpaze sunar.
  • Native uygulama cihazın kendi bildirim sistemini kullanmanızı sağlar.

Hibrit Uygulama Avantajları

  • Web programlar gibi mobil uygulama yapabilirsiniz. Dolayısıyla web standartlarına sahiptir.
  • Geliştirme hızı yüksektir. Herhangi bir emülatör kullanmadan web tarayıcısı üzerinde geliştirme yaptığınız için işler hızlı yürür.
  • Zaman ve para maliyeti çok düşüktür.
  • Bir kez yazmanız yeterli olacak ve bu kod tüm platformlarda çalışacaktır.

MOBİL PROGRAMLAMA TEKNİKLERİ

HİBRİT

Hibrit uygulama tüm platformlarda çalışacak uygulamalardır. Bu tür uygulamaları geliştirmek için bir çok framework vardır. Bu frameworkler uygulama geliştirmeyi kolaylaştırdığı gibi kullanıcı deneyimine yakın sonuçlar vermeyi amaçlar. Hibrit uygulamaların geneli HTML CSS ve Javascript kullanılarak yazılır. Fazlaca sayıda olan frameworkleri hız görsellik gibi faktörler birbirlerinden ayıracaktır. Bu konuda çalışmayı düşünüyorsanız ben sizlere Ionic framework’ü öneririm. Ionic görsel açıdan diğer frameworklere göre daha fazla seçenek sunarken AngularJS temelli olduğundan MVVM yapısını uygulamanıza rahat şekilde giydirmenize olanak sağlar. HTML içerisinde döngüler yaratabilir AngularJS in dinamik ve güncel tarafından faydalanabilirsiniz.

NATİVE

Native bir uygulama geliştirecekseniz önünüze iki farklı yol çıkacaktır.
  1. Uygulamayı her platform için ayrı yazıp platform için yazılmış ide nin sunduğu güzelliklerden faydalanmak.
  2. Uygulamayı tüm platformlara tek seferde yazıp ortak native çıktı almak.
Bunlardan birinci yolu seçerseniz android için Android Studio kurup java kod yazmanız , ios için XCode kurup objective-c veya swift dillerinde kod yazmanız gerekecektir. Ayrıca ios uygulama yazabilmek için MacBook bilgisayara sahip olmalısınız. İlk yazımda bahsettiğim para maliyeti bu sebepten ötürüdür. Ama tüm bu işlemlerin dışında bu idelerden uygulama geliştirmek için kaynak seçeneği oldukça fazladır. Ayrıca platform ideleri oldukları için çoğu şey zaten yazılmış ve kullanıma açıktır.
Bunlardan ikinci yolu seçerseniz sadece C# bilerek Visual Studio veya Xamarin Studio ile cross platform uygulama geliştirebilirsiniz. Xamarin C# ile tek kod mantığına sahip olduğundan genelde büyük şirketlerce büyük işlerde tercih edilmektedir. Xamarin native çıktı verir tek seferde android ios ve windows phone uygulamaları çıktıları alabilirsiniz.  2004 yılında linux ta C# yazmayı sağlayan mono altyapısı geliştirilmiş 2011 yılında da Xamarin mono altyapısının üzerine inşa edilmiştir. Buradan anlamanız gerek şey Xamarin geliştirirken hiç olmadık hatalarla karşılaşabilme ihtimalinizin olduğudur. Fazla kararlı bir geliştirme sürecine sahip değildir. Ayrıca yaptığınız projeyi ios ta incelemek isterseniz yine bir macbook id ye sahip olmanız gerekmektedir. Tasarım yönünden çoğu component bulunmamaktadır. Fakat siz yazmak isterseniz bunu sağlayacak altyapısı mevcuttur. C# dilinin güçlü ve esnek yapısını tamamıyla kullanabilirsiniz. Ayrıca Xamarin’de XAML dili de kullanılabilir. Ben yinede Xaml dan olabildiğince uzak durmanızı öneririm. C# ile tam dinamik işlemler yapabilirken XAML ile sadece izin verilen ölçüde işlem yapabilirsiniz.

26 Temmuz 2016 Salı

UNITY GETCOMPONENT KULLANIMI

Bir nesnenin componentlerine ulaşmak için kullanılır.Bu nesne dışarıdan bir nesne olabileceği gibi scriptin yazılmış olduğu nesne içinde kullanılabilir.Hatta bu komutun bazı varyasyonları ile kendi alt nesnelerinin componentlerine de ulaşabilirler.

public class UsingOtherComponents : MonoBehaviour
{
    public GameObject otherGameObject;
    
    
    private AnotherScript anotherScript;
    private YetAnotherScript yetAnotherScript;
    private BoxCollider boxCol;
    
    
    void Awake ()
    {
        anotherScript = GetComponent<AnotherScript>();
        yetAnotherScript = otherGameObject.GetComponent<YetAnotherScript>();
        boxCol = otherGameObject.GetComponent<BoxCollider>();
    }
    
    
    void Start ()
    {
        boxCol.size = new Vector3(3,3,3);
        Debug.Log("The player's score is " + anotherScript.playerScore);
        Debug.Log("The player has died " + yetAnotherScript.numberOfPlayerDeaths + " times");
    }
}

public class AnotherScript : MonoBehaviour
{
    public int playerScore = 9001;
}
public class YetAnotherScript : MonoBehaviour
{
    public int numberOfPlayerDeaths = 3;
}

UNITY ONMOUSEDOWN KOMUTU

void OnMouseDown ()
    {
        rigidbody.AddForce(-transform.forward * 500f);
        rigidbody.useGravity = true;
    }
Bu komut ile nesnenin üzerine mouse ile tıklanıldığında ne yapılacağını göstermiş olursunuz.Mouse ile tıklanıldığında sadece 1 kez çalışır.Basılı tutulması gibi durumlar için veya mouse üzerine gelince bırakınca gibi kodlar için IPointer interfaceleri tanımlanmalıdır.Bunlar ise eventSystem içindedir.Genelde canvas ve UI elemanlar için kullanırım.Lakin onMouseDown komutu oyun için de kullanılır. 

22 Temmuz 2016 Cuma

GETBUTTON VE GETKEY

Bu kavramlar kullanıcının klavye etkileşimini ifade eder.Şimdi daha akından bakalım

- GetButton = Belirlenen bir tuşa basılı kaldığı sürece true değer döner.

- GetButtonDown = Belirlenen bir tuşa ilk basıldığında 1 kez true değer döner.

- GetButtonUp = Belirlenen ve basılan tuş bırakıldıında 1 seferlik true değer döner

GetKey bundan farklı değildir sadece getButton da Key ile ulaşılan bir yerin ismini direkt olarak kullanırsınız. Örneğin "jump" derseniz space olduğunu anlar ama getkey de space e basılacağını söylemelisiniz.  .

GetKey Kullanımı

  void Update ()
    {
        bool down = Input.GetButtonDown("Jump");
        bool held = Input.GetButton("Jump");
        bool up = Input.GetButtonUp("Jump");
        
        if(down)
        {
            graphic.texture = downgfx;
        }
        else if(held)
        {
            graphic.texture = heldgfx;
        }
        else if(up)
        {
            graphic.texture = upgfx;
        }
        else
        {
            graphic.texture = standard;
        }
    
        guiText.text = " " + down + "\n " + held + "\n " + up;
    }

GetButton Kullanımı

 void Update ()
    {
        bool down = Input.GetKeyDown(KeyCode.Space);
        bool held = Input.GetKey(KeyCode.Space);
        bool up = Input.GetKeyUp(KeyCode.Space);
        
        if(down)
        {
            graphic.texture = downgfx;
        }
        else if(held)
        {
            graphic.texture = heldgfx;
        }
        else if(up)
        {
            graphic.texture = upgfx;
        }
        else
        {
            graphic.texture = standard; 
        }
        
        guiText.text = " " + down + "\n " + held + "\n " + up;
    }

UNITY DESTROY

Destroy oyun objelerini oyundan kaldırmaya yarar. Hatta sadece oyun objelerini değil obje componentlerinide kaldırmaya yarar.

if(Input.GetKey(KeyCode.Space))
        {
            Destroy(gameObject);
        }
Burada scriptin bağlı oldugu objeyi kaldırma işlemi gerçekleştiriyoruz.

if(Input.GetKey(KeyCode.Space))
        {
            Destroy(other);
        }
Burada ise dışarıdan gelen other isimli bir nesneyi space tuşuna basınca yoketmeyi sağlıyoruz.

if(Input.GetKey(KeyCode.Space))
        {
            Destroy(GetComponent<MeshRenderer>());
        }
Hatta objenin görünürlüğünü de silebiliyoruz.

21 Temmuz 2016 Perşembe

LookAt FONKSİYONU

Bu fonksiyon nesnenin belirlenen koordinatlara dönmesini sağlar. Örneğin oyundaki bir kameraya aşağıdaki kod verirsek

using UnityEngine;
using System.Collections;

public class CameraLookAt : MonoBehaviour
{
    public Transform target;
    
    void Update ()
    {
        transform.LookAt(target);
    }
}
Kameranın yeri değişmez lakin sürekli o cisme doğru bakar. Sadece kamera değil her objede bullanılabilir. Örneğin üzerine doğru gelen bir zombie için :) 

TRANSLATE VE ROTATE



 void Update ()
    {
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
        
        if(Input.GetKey(KeyCode.DownArrow))
            transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
        
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
        
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
    }
Bu kod ile Translate ve Rotate fonksiyonunu görmekteyiz. Translate bir nesnenin hareketini sağlar. Eski konumunun üzerine ekleme usülü ile çalışır. Rotate ise bir nesneyi belirletiğimiz yönde döndürmeye yarar aynı translate mantığıyla çalışır.