Unity 使用C/C++ 跨平台終極解決方式(PC,iOS,Android,以及支援C/C++的平台)

來源:互聯網
上載者:User

標籤:防止反編譯   防止   script   mes   ios   this   pre   param   tin   

PC的事實上根本不用說,畢竟C#和C++互動的文章已經夠多了,當然我自覺得經過幾次折騰後。差點兒全部遊戲須要到的操作我都掌握了(各種傳參方法,各種坑,不懂的能夠留言問。儘管基本上沒人看。哈哈)




廢話不多說,我們主要來講兩大平台——iOS和android——與unity的native代碼互動


這裡囉嗦一下就是去網上搜都是各種蛋疼的東西,比方假設要調用unity C#的函數怎麼辦,差點兒清一色是給出UnitySendMessage的方法。在項目中用這個簡直是作死。那麼多函數那麼複雜的參數你這個破函數頂個屁用啊。

iOS還好說。Android更是坑,竟然要你去和java代碼互動,簡單來說就是C/C++ -》 Java -》C#。而實際上大部分時候你根本不須要這麼蛋疼,直接C/C++ -》C#就能夠了。由於C/C++差點兒能夠操作全部底層資源。當然個別需求例外


正題


typedef struct Parameter {    int a;    int b;} Param;typedef void (*CallBack)(Param* p);void TestFunc(CallBack cb){    Param p;    p.a = 10;    p.b = 20;    cb(&p);}

extern “C” 這樣的細節就不多說了,由於我直接建立的是.c檔案所以不須要這個標記,這裡直接用典型的回呼函數做範例,由於有了回調。你就不必考慮怎樣使用C/C++調用C#或者反過來,由於這個範例實際上已經包括了資訊的交換


public class NewBehaviourScript : MonoBehaviour {    [StructLayout(LayoutKind.Sequential)]    struct Parameter {       public int a;       public int b;    }    delegate void CallBack(IntPtr param);    [DllImport("TestLib")]    static extern void TestFunc(CallBack cb);    [MonoPInvokeCallback(typeof(CallBack))]    static void CallBackFunc(IntPtr param) {       var p = (Parameter)Marshal.PtrToStructure(param, typeof(Parameter));       Debug.Log("a:" + p.a + " b:" + p.b);    }// Use this for initializationvoid Start () {        TestFunc(CallBackFunc);}// Update is called once per framevoid Update () {}}

以上是unity的指令碼。輸出a,b。

注意到關鍵沒,對,就是

[MonoPInvokeCallback(typeof(CallBack))]

這個標籤。沒有這個標籤就無法回調成功。

使用這種方法就能夠保證編碼效率和運行效率,你不須要進行各種中介層的封裝。不需把字串轉來轉去,這全然歸功於Mono的跨平台機制。Unity僅僅是進行了一些簡便操作

另外須要注意的是Android可能須要編譯各種相應的.so。其有用AndroidStudio一下子全部編譯出來然後丟到unity就好了

還有在PC平台以下不須要這個標籤!


事實上假設不是為了保護代碼,對於unity開發差點兒都能夠在C#中完畢,C#功能已經足夠強大了,對於Android保護C#也在上篇文章提到過,儘管個人並不知道安全性假設,唯一的提示就是使用Coroutine之後,反編譯無法看到其過程。可是我並不知道是否僅僅是移到別的地方去了。我個人在把一下敏感資訊放在Coroutine裡面來防止反編譯(儘管可能然並卵)

Unity 使用C/C++ 跨平台終極解決方式(PC,iOS,Android,以及支援C/C++的平台)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.