Unity3D DLL Projesi Oluşturma

Bugün Visual Studio üzerinden bir DLL dosyası oluşturarak bunu Unity içerisinde kullanmaya bakacağız. Böyle bir şey kullanma sebebimiz ise paylaştığımız script dosyalarının içerisinde ki kodları okumalarını engellemek. Tabi bunun bazı dezavantajları da mevcut. Örneğin oluşturduğunuz projeyi Asset Store üzerinden satmayı düşünürseniz projeyi DLL olarak almaya kullanıcılar pek sıcak bakmıyorlar. Sebebi ise, her hangi bir hata durumunda projenin her hangi bir yerine müdahale edemiyorlar. Tabi diğer taraftan bazen bunu yapmak size güvenlik olarak katkı sağlayabiliyor. Örneğin Google reklam servisi olan Admob ‘u projeye dahil etmek isterseniz, bazı dosyaların DLL olarak geldiğini görebilirsiniz. Artık başlayalım.

Öncelikle bir Visual Studio projesi oluşturacağız. Yani Unity den bağımsız olarak Visual Studio’yu açalım. Buradan “File -> New -> Project” yolunu izleyelim. Ardından “Visual C# -> Class Library” seçelim.

Proje için isim, dizin ve “solution” ismini değiştirebilirsiniz.
Proje oluşturulduktan sonra “Solution Explorer” içerisinde “References” altında ki bütün kütüphaneleri siliyoruz.
Daha sonra sağ tıklayarak “Add Reference” seçiyoruz. Daha sonra “C:\Program Files (x86)\Unity\Editor\Data\Managed” dizini içerisinde “UnityEngine.dll” ekliyoruz. “OK” diyerek kapattıktan sonra artık “UnityEngine” kullanıma hazır durumda.
Şöyle toplama işlemi yapabileceğimiz küçük bir metot ekleyelim.

Artık “build” işlemi yaparak Unity içerisinde kullanmaya başlayalım.
Öncelikle “Solution Explorer” üzerinden projeye sağ tıklayarak “Properties” seçelim. “Target Framework” altında “Unity 3.5 .net full Base Class Library” seçeneğini seçerek kapatalım.
Şimdi “Solution Explorer” üzerinden projeye sağ tıklayarak “Build” seçelim. “Output” ekranında her hangi bir hata vermez ise projeyi oluşturduğumuz dizinde proje içerisinde “bin -> debug” altında “.dll” uzantılı bir dosya oluşacak.
Şimdi Unity her hangi bir proje açalım. Proje “Assets” klasörü altına yukarıda ki “.dll” uzantılı dosyayı sürükleyerek ekleyelim. Yeni bir C# “script” dosyası ekleyerek test işlemini yapalım.

Gördüğünüz gibi kütüphaneyi “using UnityTestDLL” diyerek projeye dahil ettik ve “Start” fonksiyonu içerisinde yeni bir “Test” sınıfı nesnesi oluşturarak toplama işlemini gerçekleştirdik.
Bir “Game Object” üzerine “script” dosyasını ekleyerek test edelim.

Teşekkürler, görüşmek üzere.

Kaynaklar;
https://docs.unity3d.com/Manual/UsingDLL.html
https://forum.unity3d.com/threads/compiling-c-scripts-to-dll-files.318803/

Unity3D Editor Log Kullanımı

Bugün Unity3D içerisinde çıktı aldığımız zaman dosya boyutumuzla ilgileneceğiz. Unity3D ile proje oluştururken “Asset Store” üzerinden veya farklı kaynaklardan proje içerisine bir çok “Asset” dahil etmiş olabiliriz. Bunların içerisinde çok fazla dosya olabilir ancak biz bunlardan birkaçını kullanabiliriz. Yani proje dosyamız gb boyutlarında olabilir ancak çıktı aldığımız zaman bu boyut mb olabilir. Bunun en temel sebebi, Unity3D dosyaları çıktı dosyası içerisine eklerken tamamen projeyi eklemek yerine kullanılan ve o kullanılan dosyaya gerekli dosyaları ekliyor. Hatta bunun yanı sıra bazı sahneler oluşturmuş olabiliriz ve bu sahneleri “Build Settings” altında eklemediysek onları da çıktı dosyası içerisine eklememekte. Böylelikle çıktı dosyamızın boyutu küçülüyor.
Okumaya devam et Unity3D Editor Log Kullanımı

Unity3D ile 2D Geliştirmede Ekran Boyutlandırması

Bugün Unity3D içerisinde 2D olarak oyun geliştirirken oyun içerisinde “Sprite” yapılarının her cihazda aynı şekilde görüntülenmesine bakacağız. Genel olarak Android cihazların sayısı oldukça fazla. Bununla birlikte birbirinden farklı ekran çözünürlükleri kullanılıyor. Bu demek oluyor ki, bir oyun yapmaya başladığımız zaman oyunumuz farklı ekran çözünürlüklerinde oynanacak. Örneğin oyunda bir arka plan için bir “Sprite” koyduğumuzda her cihazda yatay ve dikey olarak kaplamasını isteyebiliriz. Yani ekranın sağında ve solunda boşluklar olması ya da altında veya üstünde boşlukların bulunması istenmeyen bir durum oluyor.
Okumaya devam et Unity3D ile 2D Geliştirmede Ekran Boyutlandırması

Unity3D PlayerPrefs Kullanımı

Bugün Unity3D ile C# kullanarak “PlayerPrefs” yapısına bakacağız. Genel olarak farklı oyun motorlarında veya native kodlama yapısında bu yapı değişik isimlerle mevcut. Burada Unity3D içerisinde bakacağız.
Oyunlarımızda her hangi bir giriş anında veya her hangi bir sahnede yapılmış sonuçları daha sonraki girişler de veya diğer sahnelerde kullanmak isteyebiliriz. Örneğin bir sahnemizde top ile elmas topladık ve diğer sahnede bunu toplam elmas değerini göstermek istiyoruz. Normal durumda o sahnede toplanan elmaslar sahne kapatılınca değişkenin değeri gideceği için daha sonra öğrenemeyiz. Ancak bunu bir “PlayerPrefs” ile birlikte cihazın hafızasında tutarsak daha sonra o değerlere erişmemiz mümkün olur.
Okumaya devam et Unity3D PlayerPrefs Kullanımı

Unity3D Inspector Özellikleri – List Yapısı

Merhaba, bu yazımda Unity3D içerisinde “Inspector Panel” özelleştirilirken kullanmamız gerekebilen liste yapısı eklemeye bakacağız.
Öncelikle daha önceki yazılarımda bahsettiğim gibi “Inspector” için kullanılabilen bir script yapısını objenin üzerine sürükle bırak ile bırakamıyoruz. Sebebi oluşturacağımız script yapısını “Editor” sınıfından türetmiş olmamızdır. Bunun için ana dizin içerisinde “Editor” adında bir klasör oluşturalım ve içerisine “Menu.cs” adında bir C# scripti ekleyelim. Daha sonra normal scriptleri koyacağımız bir “Scripts” klasörü oluşturarak içerisine “MainScript.cs” oluşturabiliriz.
Okumaya devam et Unity3D Inspector Özellikleri – List Yapısı

Unity3D UI Sistemi Çapa Noktaları Yapısı

Bu yazımda kısaca Unity3D versiyon 4.6’dan sonra gelen “UI(User Interface)” yapısına bakacağız. Bununla birlikte çok sık olarak karşılaştığım “UI yapısının her telefonda aynı görünmesi” durumuna bakacağız. Kullanışlı ve temel olarak basit bir yapıdır.
Okumaya devam et Unity3D UI Sistemi Çapa Noktaları Yapısı

Unity3D Inspector Özellikleri – 2 Menu Yapımı

Merhaba, bir önceki yazımda kullanılabilecek temel yapılardan bahsetmiştim. Şimdi “inspector” paneli üzerinden bir menü yapacağız.
Menü yapımına geçmeden önce küçük bir şeyden bahsetmek istiyorum. Bir görsel öğe kullanmak istediğimiz zaman “public” olarak bir değişken tanımlayıp, o değişkene Unity arayüzü üzerinden görsel öğeyi sürükleyerek göstermek istediğimiz yerde gösterebiliriz. Eğer kullanacağımız görsel farklı sahnelerde değişmeden kalacak ise bunu doğru klasörlere yerleştirerek yapabiliriz.
Projemizin ana dizini içerisine “Resources” adında bir klasör oluşturarak kullanacağımız görseli içerisine atalım. C# script içerisinde bir adet “Texture2D” değişkeni tanımlayalım. Bu değişkeni “private” yapacağız. Daha sonra C# script içerisinde “Awake” fonksiyonunda “Resources” sınıfının “Load” metodu ile ilk parametre klasör içerisindeki görselin ismi, ikinci parametre ise değişkenin tipi olacak şekilde kullanalım ve “private” tanımladığımız değişkene atama yapalım.

Burada bir de “as” yapısı var. Bu dönüştürme işlemi yapmakta. Eğer dönüştürme mümkün olmazsa “null” döndürmekte.
Artık menü yapacağımıza göre “MonoBehaviour” sınıfı yerine “Editor” sınıfını “extend” ediyoruz. Tabi burada “using UnityEditor” eklemeyi unutmuyoruz. Yukarıda “Resources” klasörü oluşturmadan bahsetmiştim. “Inspector” üzerinde Editor yapılarını kullanabilmek içinde “Editor” adında bir klasör oluşturarak, scripti içerisine atmamız gerekmekte. İsmini “Menu.cs” yaptım.
Bir sınıfa “Editor” sınıfını “extend” edersek o script yapısını her hangi bir “GameObject” yapısı üzerine koyamayız. Bunun için “Editor” script yapısı ile başka bir scripti yönetmemiz gerekmekte. İlk olarak bu işlemi yapmak için Unity arayüz üst tarafına bir menü yerleştireceğiz.
Bir önceki yazımda da örneklerinden bahsettiğim gibi ek olarak “MenuItem” yapısına bakalım. Bu yapı Unity arayüzünün üst tarafına yeni bir menü eklememizi sağlamakta. Aralarına “/” koyarak yan yana açılan bir menü yapısı elde edebiliyoruz. Örneğin;

Bu yapıyı bir metot üzerine yazıyoruz. Tıklandığı zaman altına yazılmış olan metod çalışmakta. Biz buna basıldığı zaman seçili olan obje üzerine yeni oluşturacağımız “MainScript.cs” i ekleyelim. MainScript;

Şimdi, Menu.cs script içerisine alttaki kodu ekleyelim.

Buradaki kodu biraz inceleyelim. Öncelikle “Selection.activeGameObject”, hiyerarşi paneli üzerinden seçilen “gameobject” yapısını döndürmekte. Eğer böyle bir obje seçilmemiş ise ilk koşula girecek seçilir ise “else” durumuna girecek. Eğer seçildiyse ve üzerinde “MainScript” yok ise eklemek için soru soracak ve “Yes” durumunda eklenecek.
Burada kullanmış olduğumuz “DisplayDialog” yapısına da bakalım. Kullanılan 2 tür yapısı mevcut. Bir tanesi 3 farklı parametre almakta; başlık, içerik ve bir adet buton. Butona basılınca koşula girebilmekte. İkinci türü ise 4 farklı parametre almakta; başlık, içerik, buton1, buton2 olarak. Buton1 ‘e basılırsa koşula girebilmekte yani “true” dönmekte.
Şimdi “inspector” panelini kontrol edeceğimiz yapı olan “OnInspectorGUI()” metoduna bakalım. Eklediğimiz “MainScript” üzerinde “inpsector” panelinde yapıları kontrol etmemizi sağlamakta. Biz bu örneğimizde 3 tane buton koyarak butonlara tıklandığı zaman alt taraflarında yeni menüler açacağız.
Öncelikle yerleştirme işlemi için “EditorGUILayout.BeginHorizontal()” ile yatay olarak “layout” oluşturabiliriz. Bitirmek içinde “EditorGUILayout.EndHorizontal()” yazmamız gerekmekte. Şimdi bunların içerisine buton eklemek için “GUILayout.Button()” yapısını kullanacağız. Tıklandığı zaman “true” döndürmekte. Buraya kadar olan script yapısı aşağıda.

Artık elimizde tıklandığını bildiğimiz “boolean” değişkenler bulunmakta. Bu değişkenlere göre işlemler yapabiliriz. Yorum satırının hemen altından devam edelim,

Burada 2 yeni yapı kullandık. Birincisi “HelpBox”, 2 parametre almakta. İlk parametresi yazacak olan değer, ikinci parametresi ise sol tarafında görünecek olan işaret. İkinci olarak “Space”, koyulduğu yere boşluk bırakmakta.
Son olarak o kadar “MainScript” oluşturduk içerisinde ki değişkene bu panel üzerinden müdahale etmezsek olmaz :). “MainScript” içerisine bir tane “bool” değişken tanımlıyoruz ve “public” olmalı.

Şimdi, bu değişkenlere erişirken “serializedObject” yapısını kullanacağız. 2 temel metodu üzerinde yoğunlaşacağız. “OnInspectorGUI” metodu içerisine en başına “serializedObject.Update()” ve en sonuna da “serializedObject.ApplyModifiedProperties()” ekliyoruz.
Menu1 yapısının içerisine “PropertyField” ekleyelim. Biz iki parametreli olan yapısını kullanalım. Birinci parametre olarak “serializedObject.FindProperty()” ile diğer script içerisinde tanımladığımız “valueBool” değişkeninin özellikleri alalım. İkinci parametre olarak onun sol tarafında yazacak olan açıklamayı girelim.
EditorGUILayout.PropertyField(serializedObject.FindProperty(“valueBool”), new GUIContent(“Boolean Value”));

Örnek olması açısından bir tane tam sayı ve bir tane “string” değer tanımlayalım.
MainScript

Menu

Birazda ekran görüntüsü
image-9-1

image-9-2
Teşekkürler, görüşmek üzere.

Cocos2D-x Nasıl Kurulur?

Cocos2D-x, 2 boyutlu ve açık kaynaklı olarak geliştirilen oyun motorudur. Cocos2D-x C++ veya Lua temel alınmaktadır. Ek olarak Cocos2D-js olarak Javascript versiyonu bulunmaktadır. Bu yazımız da Cocos2D-x Android için kurulumunu Windows ortamında gerçekleştireceğiz. Bu süreç de karşılaştığım 2 hatayı da yazıma ekleyeceğim. IDE Eclipse kullanacağım.Gerekli olan araçların linklerini vererek başlayalım.

www.cocos2d-x.org/download
Adresinden Cocos2D-x V3.4 ‘ü indirebiliriz. Bu sürüm ile birlikte Android 5 desteği de gelmiş. Ancak şu an V3.6 da mevcut.

http://developer.android.com/ndk/downloads/revision_history.html
Adresinden android-ndk-r10c indiriyoruz. R10c olması önemli diğerleri ile çalışmamaktadır(r9d ile çalışıyor ek olarak ancak Android 5 desteği yok).

http://developer.android.com/sdk/index.html#Other
IDE olarak Eclipse kullanacağımız için Android Studio ihtiyacımız yok. Bu yüzden alt taraftan “SDK Tools Only” altında bulunan sisteminize uygun olanı indirebilirsiniz.

https://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2
Adresinden sağ tarafta bulunan “Download Links” üzerinden sisteminize göre olanı indirebilirsiniz. Daha güncel versiyonları da olabilir fark etmez diye düşünüyorum ben çalıştığım ve denediğim için aynı versiyonları vermekteyim 🙂

https://www.python.org/downloads/
Adresinden Python Versiyon 2 olanı indiriyoruz.

http://ant.apache.org/bindownload.cgi
Ve son olarak yukarıdaki adresten Apache Ant indiriyoruz. Bendeki versiyonu 1.9.4. Alt tarafta zip olarak indirebiliriz.

İndirmelerin ardından Cocos2D-x, SDK, NDK, Apache Ant dosyalarını rardan çıkararak ben C içerisine attım, python ise C içerisine kurdum. Eclipse ise istediğiniz yerden erişebilirsiniz. Burada önemli bir nokta bana göre, eğer bilgisayar kullanıcı adında Türkçe karakter bulunuyorsa sorun yaratabiliyor cmd içerisinde o yüzden direk C içerisine kurdum.

Şimdi cmd açıyoruz. Cocos2D-x klasörüne gireceğiz.
cd C:\cocos2d-x-3.4
Girdikten sonra setup.py ile kurulumuna başlayacağız.
İlk olarak NDK yolunu isteyecek.
cd C:\android-ndk-r10c
Ardından SDK yolunu isteyecek.
cd C:\adt-bundle-windows-x86_64-20140321\sdk
ANT yolunu isteyecek, burada önemli olan nokta bin klasörünü veriyoruz.
cd C:\apache-ant-1.9.4\bin
Cocos2d-x Anlatım1 - Temp - 1

Daha sonra cmd yi tekrar başlatalım.
Şimdi artık projeyi açabiliriz.
cd C:\cocos2d-x-3.4 içerisine giriyoruz.
cocos.py new ProjeIsmi –p paketIsmi(com.deneme.test) –l kullanılacakdil(cpp) yazarak tamamlamasını bekliyoruz. -d ile yolu da belirtebiliriz ancak ben cocos2d-x-3.4 klasörü içerisine yerleştirmesini istediğim için orada bıraktım.
Cocos2d-x Anlatım1 - Temp - 2

Artık projemiz hazır. Gelelim Apk almaya ve proje üzerinde işlem yapmaya. Eclipse programını açıyoruz. “File” menüsünden “Import” seçerek Android sekmesi altında “Existing Android Code Into Workspace” tıklıyoruz. “Root Directory” yanından dosya yolunu veriyoruz. Bu dosya yolumuz cocos2d-x-3.4 içerisinde proje ismidir.
Sağ taraftan “Dselect All” yaparak temizleyebiliriz. Ardından ilk olarak
Cocos2d\cocos\platform\android\java
Cocos2d-x Anlatım1 - Temp - 3

Ardından
Proj.android seçiyoruz. Finish diyerek bitiriyoruz.
Cocos2d-x Anlatım1 - Temp - 4

Project menüsünden “Properties” içerisinde Android kısmında alt tarafta Library olarak libcocos2dx yanında yeşil tik var ise çalışması gerekir. Eğer kırmızı çarpı var ise remove yaparak 2. hatamız kısmını uygulamanız gerekmekte. İşlemin sonunda “Add” diyerek eklenmesi gerekebilir.

Eğer her hangi bir hata yoksa ki bende 2 tane çıkarak oldukça uğraştırdı 🙂 Projeye sağ tıklayarak “Run as” yanında “Android Application” C:\cocos2d-x-3.4\TestForCpp\proj.android\bin konumuna apk çıktısını veriyor.
Cocos2d-x Anlatım1 - Temp - 5

Gelelim aldığım ilk hataya. Hata kodunu her hangi bir yere yapıştırmadığım için gösteremeyeceğim ancak PATH olarak python’ı görmüyordu. Çözüm olarak,
– Bilgisayarıma Sağ tıklıyoruz.
– Özellikler
– Gelişmiş sistem ayarları
– Gelişmiş sekmesi altında en altta bulunan Ortam Değişkenleri
– Sistem değişkenleri altında Path değerini buluyoruz.
– Düzenle diyerek en sonuna noktalı virgül(;) ile ayırarak ;C:Python27 ekliyoruz ve tamam diyerek çıkıyoruz. Garanti olması açısından bir bilgisayarı yeniden başlatabiliriz.

2. Hatamız, ProjeIsmi/src/org.cocos2dx.cpp/Appactivity.java/AppActivite altında
org.cocos2dx.lib.Cocos2dxActivity paketini görmez ise,
– Proje ismine sağ tıklıyoruz.
– En altta “properties” içerisine giriyoruz.
– “Java build path” seçiyoruz.
– “source” sekmesine geliyoruz.
– “Link source” diyoruz.
– “Linked folder location” yanında bulunan “Browse” ile dosya yolumuzu seçiyoruz bu dosya yolu C:cocos2d-x-3.4cocosplatformandroidjavasrc oluyor.
– Dosya ismi veriyoruz. Cocos2d-x-source yazdım.
– “Finish” ile bitiriyoruz. Böylelikle paket yolunu vermiş ve eklemiş olduk.
Not : Bu hatamızın çözümünü http://discuss.cocos2d-x.org/t/cant-link-to-cocos2dx-using-eclipse-for-android-on-osx/5149 Bu linkten aldım onu da eklemek isterim 🙂
Cocos2d-x Anlatım1 - Temp - 6

Cocos2d-x Anlatım1 - Temp - 7

Evet, hatalar bitti ise umarım bitmiştir 🙂 Tekrar projeye sağ tıklayarak “Run as” yanında “Android Application” seçimini yaparak apk dosyasını elde edebiliriz.
Hatalarım veya her hangi bir sorunuz için ulaşabilirsiniz.
Teşekkürler, iyi günler.