Unity ve Eclipse Entegrasyonu

Merhabalar,

Bugün Unity 3.5.3f ve Android 2.3.3 versiyonlarını kullanarak Unity'nin geçici klasörlerinde oluşturduğu projeyi Eclipse içinde nasıl kullanacağımızı örnekleyeceğim.

Unity her ne kadar şu sıralar bu işlemleri çok daha kolaylaştıracak bir çözüm üstünde çalışıyor olsada, resmi çözüm Eclipse tarafında "Android Plugin" yazmak ve bunu Unity tarafında çağırmak. Biz ise Unity projesini Eclipse tarafında çağıracağız.

Temel olarak işlem 2 adımdan oluşuyor. Önce Unity tarafında hazırlanan projeyi kütüphane olarak hazırlıyoruz. Sonra da başka bir proje daha yaratarak bu kütüphaneyi çağırıyoruz. Eğer Eclipse tarafında uygulamamız hazır ise ve buna sadece bazı 3 boyutlu görseller yada Unity ile oluşturulabilecek başka özellikler katmak istiyorsak oldukça ideal bir çözüm.
  • Öncelikle sadece küp gösteren bir Unity projesi oluşturalım ve çalıştığına emin olalım. Dikkat etmemiz gereken hususlar "Build Settings" kısmında "Bundle Identifier" (bunu Eclipse tarafında proje ayarlarımıza gireceğiz), "Minimum API Level" (bunu da Eclipse tarafında aynen seçeceğiz), Device Filter ("ARM v6 with VFP" olmalı). 
  • Herşey hazırsa "Build" yapalım ve sonuçtan emin olalım. Unity tarafında işimiz bu kadar.
  • Unity projesi altındaki "Temp\StagingArea" klasörünü başka bir yere taşıyalım. "Eclipse Workspace" altında olmayan ayrı bir yere kopyalayalım. Bu klasörü direk kullanamıyoruz çünkü Unity tarafında birşey değiştirirsek bu klasörde hemen değişiyor ve Eclipse tarafında bazı problemlere yol açıyor.
  • Eclipse tarafında yeni bir proje açalım. "Create from existing source" seçeneğini seçerek az önce oluşturduğumuz "StagingArea" klasörünü gösterelim. Bu proje diğer uygulamamız için kütüphane olacağından ismine "UnityLibrary" koyabiliriz. Android versiyonunu (API Level) ve "Bundle Identifier" kısımlarını da Unity projesi ile aynı olacak şekilde girelim.
  • Eclipse tarafında uygulamamız olacak yeni bir proje daha oluşturalım. İsmi "UnityApplication" olabilir. Android versiyonu (API Level) ve "Bundle Identifier" kısımlarını yine aynı şekilde belirtelim.
  • "UnityLibrary" projemize sağ tıklayarak "Properties-Android" sayfasına gelelim. "Is Library" seçeneğini işaretleyelim ve kaydedelim.
  • "UnityApplication" projesinde "Properties-Android" kısmında "Add" ile gelecek olan "UnityLibrary" projesini seçelim. "Java Build Path" sayfasında "Libraries" sekmesinde "Add External Jars" ile bende C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\bin" klasöründe olan "classes.jar" dosyasını ekleyelim. "Order and Export" kısmında "classes.jar" satırının sol tarafındaki kutuyu işaretleyelim.
  • "UnityLibrary" projesi altındaki "assets" klasörü içindeki klasörleri "UnityApplication" projesi altındaki "assets" klasörüne taşıyalım.
  • "UnityLibrary" altındaki "AndroidManifest.xml" dosyasını "UnityApplication" altına taşıyalım.
Şu an için "UnityApplication" projesini çalıştırmak istersek "The container 'Library Projects' references non existing library 'D:\Projects\Android\UnityLibrary\bin\unitylibrary.jar'" gibi bir hata alırız. "UnityLibrary" projesini "Build" etmek istersek "AndroidManifest.xml file is missing" hatası almamız gerekli. 
  • "StagingArea" altındaki "AndroidManifest.xml" dosyasını "UnityLibrary" altına taşıyalım.
  • Bu seferde bu dosyada "android:configChanges" kısmıda çeşitli hatalar alıyoruz. Bunun nedeni Unity tarafından aldığımız dosyada bir şekilde Android 4'e özel ayarların olması ve Android 2.3.3'ün bunları desteklememesi. "android:configChanges" satırlarını aşağıdaki gibi kısaltalım. 
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout"
  • Artık "UnityLibrary" kısmı düzgün bir şekilde "Build" edilebilmeli. 
  • "UnityApplication" projesindeki ana sınıf "Android Activity" yerine "UnityPlayerActivity" sınıfından türetilmeli. Bunun için "UnityApplicationActivity" sınıfını  "UnityPlayerActivity" sınıfından türeyecek şekilde aşağıdaki gibi ayarlayalım.
public class UnityApplicationActivity extends UnityPlayerActivity  {
  • "CTRL-Shift-O" kısayolu ile bağımlılık sorunlarını giderelim.
  • "setContentView(R.layout.main);" satırını tamamen silelim.
Şu an için kod kısmında bir hata olmaması gerekli ancak uygulamayı çalıştırdığımızda cihaz üstünde uygulamanın hata vererek kapandığını görürüz. LogCat ile incelersek "Couldn't load mono: findLibrary returned null" hatasını görebiliriz. Bunun çözümü için "StagingArea\libs" klasörünü "UnityApplication\libs" altına kopyalamamız gerekli.

Tekrar çalıştırırsak ".UnityEclipse.UnityApplicationActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8" hatası alırız. Bunun çözümü için "UnityAplication" altındaki "AndroidManifest.xml" dosyasında "android:name=".UnityApplicationActivity" satırına 

android:configChanges="orientation"

bilgisini eklememiz gerekli. Artık çalıştırdığımızda uygulamanın düzgün bir şekilde başladığını görmeliyiz.

Ek Dosyalar:
- "UnityApplication" projesinin "AndroidManifest.xml" dosyası.
- "UnityLibrary" projesinin "AndroidManifest.xml" dosyası.
- Unity projesi, Eclipse UnityLibrary projesi ve Eclipse UnityApplication projelerinin dosyası.

Referanslar
- RoflHarris'in yazısı. (Bazı başka konulara da değiniyor)
- Unity tarafında bu konu ile ilgili bazı geliştirmeler yapıldığı için resmi dokümantasyon sayfasından bu konu kaldırıldı. Eski sayfalara buradan bakabilirsiniz.
- Bazıları problemleri "UnityApplication" projesinden oluşan apk dosyasını "zipalign -v 4 UnityApplication.apk YeniUygulama.apk" komutunu çalıştırarak gidermiş. Bende gerek kalmadı ama sizin çözülemeyen bir probleminiz olursa deneyebilirsiniz. Cihazda uygulamayı kaldırıp "adb install YeniUygulama.apk" komutunu çalıştırarak tekrar yükleyin.

Not: Burada en basit Unity projesinin nasıl Eclipse tarafında çağırabileceğimizi anlattım. Daha kompleks projelerde daha farklı hatalar alınabilir. Bu tip durumlarda "Android Plugin" seçeneğini öneririm.

Yorumlar

Bu blogdaki popüler yayınlar

DevExpress ve Telerik karşılaştırması

Install Remmina on macOS for easy connection to your servers via SSH, RDP, VNC.

Logo Apps Eğitim Notları