geliştirme etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
geliştirme etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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;
}

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;
    }

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 :) 

19 Haziran 2016 Pazar

ACTİVE KAVRAMI ACTİVESELF SETACTİVE KOMUTLARI VE HİERARCHY

Active komutu inspectordeki nesnenin en başındaki toggle ile aynı işlevi görür. Active komutu ile enabled rasındaki fark ise enabled bir değişkendir ve componentler için kullanılır fakat Active bir fonksiyondur nesneler için kullanılır. Eğer nesne için aşağıdaki gibi bir kod yazılırsa sonuç nesne oyun alanında yok gibi varsayılacaktır.


public class ActiveObjects : MonoBehaviour
{
    void Start ()
    {
        gameObject.SetActive(false);
    }
}
İşte bu şekilde nesneyi yok edip tekrar ortaya çıkarabiliriz.Korku oyunlarındaki jump scaneler genellikle bu şekilde yapılmaktadır.

Hierarchy kavramı ise bir nesnenin alt nesneleri için kullanılır yani şu şekilde açıklanabilir.


public class tik : MonoBehaviour
{
    public GameObject Objem;
    
    
    void Start ()
    {
        Debug.Log("Actif mi: " + Objem.activeSelf);
        Debug.Log("Hiyerarşi aktif mi" + Objem.activeInHierarchy);
    }
}
İşte bu kod ile aşağıdaki sonuçları alabiliriz.



Burada 2 cisimde aktif






13 Ocak 2016 Çarşamba

Unity3D Parçacık Sistemi

UNITY 3D PARTICLE SYSTEM

Merhaba. Bu yazı Unity oyun motorunda parçacık sistemi konusunda sürekli yararlanabileceğiniz tanımlar içeren bir yazıdır.




Öncelikle en baştan tanımlara göz atalım.

Duration 


Parçacık üretme süresidir.Duration değeri saniye cinsinden alınır örnek fotoğrafta 5.00 demesi 5 saniye boyunca parçacık üretileceği anlamına gelir.5 saniye sonunda ise bu üretim bitecektir.

Looping


Loop tekrar etme anlamı taşır.Parçacık üretim süresi bittiğinde tekrar başlatmak için loop kutucuğu işaretli olmalıdır.Sürekliliği sağlar.

Prewarm


Normal şartlarda ilk kez çalışmaya başlayan parçacık sistemi hızlanan bir tempoda çalışır.Yeni başladığı bellidir.Fakat bu seçenek açıksa yeni değilde sürekli açıkmış gibi çalışır başlangıçtaki hızlanma temposuna hiç girmeden direkt olarak hızlı başlar.

Start Delay


Parçacık tetiklendiğinde delay kutusunda yazan değer kadar (saniye) bekler parçacık üretmez.Sonra normal şekilde üretime başlar.

Start Lifetime


Üretilen her bir parçacığın hayatta kalma süresidir.Parçacıklar burada yazan değer (saniye) süre sonra yok olacaktır.

Start Speed


Parçacık dağılma hızıdır.

Start Size


Parçacık genişliğidir.

Start Rotation


Parçacık dönme açısıdır.Yuvarlak parçacıklarda fazla belli olmaz.

Start Color


Parçacık rengidir.4 farklı türü vardır.Default,gradient,random,gradient-random bu dörtlüyü oluşturur.



Default 

 Normal olarak parçacığa renk verir.

Gradient 

Başlangıç ve Bitiş rengi verilir.Ara renkleri Unity ayarlar Duration a bağlı olarak parçacık rengi değişir.

Random 

Random ise iki farklı renk veririz ve her parçacık için iki renk arası rastgele renk seçer.

Gradient - Random 

Bu özellik ise Gradient ve Random birleşimidir.

Gravity Modifier


Parçacıklar dağılmaya başladıktan sonraki hareketlerinde yerçekimi etkisini ayarlar.Eksi değer verilirse yukarı artı değer verilirse aşağı yönde hareket eder.

Play On Awake


Oyun ilk açıldığında bu parçacık nesnesinin başlayıp başlamayacağını belirtir.Eğer seçili ise oyun başlayınca parçacık sistemi de başlar değilse kod ile tetiklenerek çalıştırılır.

Max Particles


Kaç adet parçacık üretileceği buradan ayarlanır.Maximum değere gelirse üretim duracaktır.

Emission




Rate eğer zamana bağlı ise (Time) 1 saniyede ki parçacık üretimini yönetir.(Adet) 
Bursts ise sürekli simetrik üretilen parçacıkların belli bir zaman içinde belli bir parçacığı bir anda üretimini sağlar.Bir patlama etkisi oluşturur.


Rate eğer distance e bağlıysa bu parçacık sistemi bulunduğu yerden bir birim yer değiştirmesi ile aktif olacak ve rate değeri kadar parçacık üretecektir.


Shape


Bu bölümde parçacık çıkış ve dağılış hareketleri ayarlanır.



Shape bölümü yayılış şeklidir.Fotoğrafta koni şeklinde yayıldığını göstermektedir. Ama bir çok farklı yayılışı vardır.Angle açı belirtir.Radius ta öyle.Random direction dersek şekle bakmaksızın dağılacaktır.


Son olarak Wildframe seçili iken parçacıklar kutu seklinde görülür.Sadece sahne ekranında böyle olacaktır.