Halaman ini menjelaskan cara membangun plug-in kode asli untuk platform iOS.
Untuk membangun aplikasi dengan plug-inSatu set kode yang dibuat di luar Unity yang menciptakan fungsi dalam Unity. Ada dua jenis plug-ins yang dapat Anda gunakan di Unity: Managed plug-ins (diproduksi. Rakitan NET dibuat dengan alat-alat seperti Studio Visual) dan plug-ins asli (pustaka kode asli yang spesifik platform). More info
Lihat di Glossary asli untuk iOS, ikuti langkah-langkah ini:
Untuk setiap fungsi asli yang ingin Anda sebut, tentukan metode extern dalam file C# sebagai berikut:
[DllImport ("__Internal")]
private static extern float FooPluginFunction();
Tambahkan file sumber kode asli Anda ke Proyek Unity.
Sesuaikan pengaturan plug-in di jendela Plugin Inspector. Misalnya, jika kode asli Anda spesifik iOS, pastikan plug-in hanya diaktifkan untuk iOS.
Sitemap Jika Anda menggunakan C++ (.cpp) atau Objective-C++ (.mm) untuk menerapkan plug-in, Anda harus menyatakan fungsi dengan tautan C untuk menghindari masalah dengan nama mangling:Note:
extern "C" {
float FooPluginFunction();
}
Plug-ins ditulis dalam C atau Objective-C tidak perlu ini, karena bahasa ini tidak menggunakan nama mangling.
Aplikasi Anda hanya dapat memanggil iOS native plug-insPerpustakaan kode asli spesifik platform yang diciptakan di luar Unity untuk digunakan di Unity. Memungkinkan Anda dapat mengakses fitur seperti panggilan OS dan perpustakaan kode pihak ketiga yang tidak akan tersedia untuk Unity. More info
Lihat di Glossary ketika digunakan pada perangkat yang sebenarnya, sehingga Anda harus membungkus semua metode kode asli dengan lapisan kode C # tambahan. Kode ini harus baik menggunakan kompilasi bersyarat UNITY_IOS && !UNITY_EDITOR
, atau cek Application.platform
dan hanya memanggil metode asli ketika aplikasi berjalan pada perangkat. Cara sederhana untuk menerapkan ini adalah:
void MyMethod()
{
#if UNITY_IOS && !UNITY_EDITOR
CallNativeMethodImplementation();
#else
CallEditorMethodImplementation();
#endif
}
Untuk implementasi yang lebih rinci, unduh sampel Bonjour Browser di bawah ini.
Unity iOS mendukung fungsionalitas callback asli yang terbatas. Anda dapat melakukan ini dalam satu dari dua cara:
UnitySendMessage
UnitySendMessage
Opsi ini lebih sederhana, tetapi memiliki keterbatasan. Ini terlihat seperti ini:
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
Ada tiga parameter:
GameObject
Menggunakan UnitySendMessage
memiliki batasan berikut:
void MethodName(string message);
.UnitySendMessage
asinkron dan memiliki keterlambatan satu bingkai.UnitySendMessage
.Ini adalah pilihan yang lebih kompleks. Ketika Anda menggunakan delegasi, metode di sisi C# harus statis dan ditandai dengan atribut MonoPInvokeCallback
. Anda harus melewati metode sebagai delegasi ke metode extern yang diterapkan dalam kode asli sebagai fungsi yang mengambil pointer untuk berfungsi dengan tanda tangan yang sesuai. Fungsi pointer dalam kode asli kemudian mengarah kembali ke metode C # statis.
Kode C# untuk metode ini terlihat seperti ini:
delegate void MyFuncType();
[AOT.MonoPInvokeCallback(typeof(MyFuncType))]
static void MyFunction() { }
static extern void RegisterCallback(MyFuncType func);
Kode C yang menerima callback kemudian terlihat seperti ini:
typedef void (*MyFuncType)();
void RegisterCallback(MyFuncType func) {}
Unity mendukung integrasi plug-in otomatis dan menyalin semua file dengan ekstensi berikut ke proyek Xcode yang dihasilkan jika Anda mengaktifkannya untuk iOS di jendela Plugin InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary: .a
, .m
, .mm
, .c
, .cpp
, .h
. Jika ada file dengan ekstensi ini terletak di folder Assets/Plugins/iOS
, Unity hanya memungkinkan mereka untuk platform iOS.
Sitemap Setelah file disalin ke proyek Xcode yang dihasilkan, mereka tidak lagi dikaitkan dengan rekan-rekan mereka di Proyek Unity Anda. Jika Anda mengubah file ini di Xcode, Anda harus menyalinnya kembali ke Proyek Unity Anda. Jika tidak, Unity akan menimpa mereka saat berikutnya Anda membangun Proyek Anda.Note: After the files are copied to the generated Xcode project, they’re no longer linked to their counterparts in your Unity Project. If you change these files in Xcode, you must copy them back into your Unity Project. Otherwise, Unity will overwrite them the next time you build your Project.
Panggilan yang dikelola-ke-unmanaged cukup prosesor intensif di iOS. Cobalah untuk menghindari memanggil beberapa metode asli per bingkai.
Bungkus metode asli Anda dengan tambahan Lapisan C# yang memanggil kode asli pada perangkat dan mengembalikan nilai perut di Editor.
Nilai string kembali dari metode asli harus dikodekan UTF-8 dan dialokasikan pada tuap. Mono marshalling panggilan gratis untuk string seperti ini.
Anda dapat mengunduh contoh sederhana tentang cara menggunakan plug-in kode asli di sini: Bonjour Browser.
Contoh ini menunjukkan bagaimana Anda dapat membatalkan kode Objective-C dari aplikasi Unity iOS. Aplikasi ini menerapkan klien Bonjour sederhana dan terdiri dari:
Plugins\Bonjour.cs
adalah antarmuka C# ke kode asli, dan BonjourTest.cs
adalah skrip yang menerapkan logika aplikasiAssets/Plugins/iOS
) yang harus ditambahkan ke proyek Xcode yang dibangun seperti yang dijelaskan di bagian Automated plug-in integration di atas