Mengoptimalkan Fisika Sitemap
Mempersiapkan aplikasi Anda untuk Pembelian In-App (IAP)

Membangun plug-in untuk iOS

Halaman ini menjelaskan cara membangun plug-in kode asli untuk platform iOS.

Membangun aplikasi dengan plug-in asli untuk 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:

  1. Untuk setiap fungsi asli yang ingin Anda sebut, tentukan metode extern dalam file C# sebagai berikut:

    [DllImport ("__Internal")] 
        
    private static extern float FooPluginFunction();
    
  2. Tambahkan file sumber kode asli Anda ke Proyek Unity.

  3. 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.

Menggunakan plug-in Anda dari C

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.

Login C# kembali dari kode asli

Unity iOS mendukung fungsionalitas callback asli yang terbatas. Anda dapat melakukan ini dalam satu dari dua cara:

  • Menggunakan UnitySendMessage
  • Via delegates

Menggunakan UnitySendMessage

Opsi ini lebih sederhana, tetapi memiliki keterbatasan. Ini terlihat seperti ini:

UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");

Ada tiga parameter:

  • Nama target GameObject
  • Metode skrip untuk memanggil objek tersebut
  • string pesan untuk melewati metode yang disebut

Menggunakan UnitySendMessage memiliki batasan berikut:

  1. Dari kode asli, Anda hanya dapat memanggil metode skrip yang sesuai dengan tanda tangan berikut: void MethodName(string message);.
  2. Panggilan ke UnitySendMessage asinkron dan memiliki keterlambatan satu bingkai.
  3. Jika dua atau lebih GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
    Lihat di Glossary
    memiliki nama yang sama, ini dapat menyebabkan konflik saat Anda menggunakan UnitySendMessage.

Menggunakan delegasi

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) {}

Integrasi plug-in otomatis

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.

This Inspector window shows that the plug-in has been enabled for iOS.
Jendela Inspektur ini menunjukkan bahwa plug-in telah diaktifkan untuk iOS.

Tips untuk iOS:

  1. Panggilan yang dikelola-ke-unmanaged cukup prosesor intensif di iOS. Cobalah untuk menghindari memanggil beberapa metode asli per bingkai.

  2. Bungkus metode asli Anda dengan tambahan Lapisan C# yang memanggil kode asli pada perangkat dan mengembalikan nilai perut di Editor.

  3. Nilai string kembali dari metode asli harus dikodekan UTF-8 dan dialokasikan pada tuap. Mono marshalling panggilan gratis untuk string seperti ini.

Bonjour Browser sampel

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:

  • Proyek iOS Unity di mana Plugins\Bonjour.cs adalah antarmuka C# ke kode asli, dan BonjourTest.cs adalah skrip yang menerapkan logika aplikasi
  • Kode asli (dilokasi di Assets/Plugins/iOS) yang harus ditambahkan ke proyek Xcode yang dibangun seperti yang dijelaskan di bagian Automated plug-in integration di atas
Mengoptimalkan Fisika Sitemap
Mempersiapkan aplikasi Anda untuk Pembelian In-App (IAP)