最近需要自己接一个sdk,之前都没接过,今天来看看c# 与 ios 之间是如何交互的。把代码记录下来,以后可能还会有用处。
其实他们之前的调用是使用c/c++作为桥梁,让两者之间能够互相通信。其他的就不多说了,直接上代码。
代码的使用方法,都在注视中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
// // 1.新建一个 GameObject 对象 // 2.将Test.cs文件挂在对象上面 // 3.导出工程,在xcode中编辑 // using UnityEngine; using System.Collections; using System.Runtime.InteropServices; public class Test : MonoBehaviour { //导入定义到.m文件中的C函数 [DllImport("__Internal")] private static extern void _PlatformInit(); [DllImport("__Internal")] public static extern void _MakeStringCopy (string value); [DllImport("__Internal")] public static extern int _MakeInt (int value); [DllImport("__Internal")] public static extern string _GetString (string value); [DllImport("__Internal")] public static extern string _GetDeviceName (); int value = 0; string svalue = string.Empty; string gvalue = string.Empty; int tracevalue = 0; void OnGUI() { if (GUI.Button (new Rect (100, 100, 100, 100), "_PlatformInit")) { _PlatformInit(); } if (GUI.Button (new Rect (100, 200, 100, 100), "_MakeStringCopy")) { _MakeStringCopy("this is unity send to xcode message : _MakeStringCopy!!"); } if (GUI.Button (new Rect (100, 300, 100, 100), "_MakeInt")) { value += _MakeInt(100); } GUI.Label (new Rect (100, 300, 100, 100), value.ToString()); if (GUI.Button (new Rect (100, 400, 100, 100), "_GetDeviceName")) { svalue = _GetDeviceName(); } GUI.Label (new Rect (100, 400, 100, 100), svalue.ToString()); if (GUI.Button (new Rect (100, 500, 100, 100), "_GetString")) { gvalue = _GetString("this is getstring."); } GUI.Label (new Rect (100, 500, 100, 100), gvalue.ToString()); GUI.Label (new Rect (100, 600, 100, 100), tracevalue.ToString ()); } public void Trace(string value) { tracevalue += int.Parse(value); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
// // PlatformUtils.c // Unity-iPhone // // Created by GameRisker on 2016/11/24. // // 找个合适的地方,将代码加入项目,然后直接run 项目跑起来 就能测试了。 // // // #import <sys/utsname.h> #if defined(__cplusplus) extern "C" { #endif // 参数一 : unity中的对象名 测试代码中命名为Test // 参数二 : c#中的方法名 测试代码中上Test.cs 中的Trace // 参数三 : 需要传的参数 请根据c#中的方法的参数来传 extern void UnitySendMessage(const char *, const char *, const char *); #if defined(__cplusplus) } #endif static struct utsname systemInfo; #if defined(__cplusplus) extern "C" { #endif char* _GetDeviceName() { uname(&systemInfo); char* deviceName = (char*)malloc(sizeof(char)*255); strcpy(deviceName, systemInfo.machine); return deviceName; } char* _GetString(const char* value) { NSLog(@"%s",value); char* valuesss ="this is ios return string!!"; char* string = (char*)malloc(sizeof(char)*255); strcpy(string, valuesss); return string; } void _MakeStringCopy( const char* string) { NSLog(@"%s",string); } void _PlatformInit() { NSLog(@"this is unity send to oc message..."); UnitySendMessage("Test", "Trace","5"); //主动调用unity Test.cs 中Trace方法。 } int _MakeInt (int value) { NSLog(@"%d",value); return value + value; } #if defined(__cplusplus) } #endif |