unity调用ios的参数传入与返回

来源:互联网 发布:淘宝卖家开通直播入口 编辑:程序博客网 时间:2024/06/06 17:46

这个比较简单,注意一下string类型的返回就好了。
不说了直接上代码:
1、oc

#if defined (__cplusplus)extern "C"{#endif    BOOL u3d_getBool1(BOOL _input)    {        NSLog(@"_input value:%@",_input?@"Yes":@"No");        return true;    }    BOOL u3d_getBool2(BOOL _input)    {        NSLog(@"_input value:%@",_input?@"Yes":@"No");        return false;    }    int u3d_getInt(int _input)    {        return _input + 100;    }    long u3d_getLong(long _input)    {        return _input + 123l;    }    float u3d_getFloat(float _input)    {        return _input + 0.123f;    }    double u3d_getDouble(double _input)    {        return _input + 0.123456l;    }    char * u3d_getString(const char * _input)    {        NSString *str = [NSString stringWithUTF8String:_input];        NSString *newstr = [NSString stringWithFormat:@"%@--%@", str, @"_fromOC"];        const char * _output = [newstr UTF8String];        NSLog(@"%@, %@, %s",str,newstr,_output);        // 是里如果直接返回_output是会报错的,因为它是是const,不能被返回。        char* res = (char*)malloc(strlen(_output)+1);        strcpy(res, _output);        return res;    }    // 封装json    void u3d_packageJosn()    {        // 构造一个nsdictionary        NSDictionary *dict = @{                               @"name":@"小海",                               @"age":@102,                               @"weight":@56.5f,                               @"height":@165.555f,                               @"nice":@YES                               };        // 判断dict是否可转成json        BOOL isYes = [NSJSONSerialization isValidJSONObject:dict];        NSLog(@"u3d_packageJosn isYes : %@",isYes?@"Yes":@"No");        // nsdictionary --> nsdata        NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];        NSLog(@"u3d_packageJosn data: %@", data);        // nsdata -> nsstring        NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];        NSLog(@"u3d_packageJosn jsonString: %@", jsonString);        // nsstring -> const char*        const char* constStr = [jsonString UTF8String];        // 调用unity3d中的方法        UnitySendMessage("Main Camera", "CallbackFormIOS_1", constStr);    }    // 解析json    void u3d_parseJson(const char * jsonStr)    {        // const char* --> nnstring        NSString *jsonString = [NSString stringWithUTF8String:jsonStr];        NSLog(@"u3d_parseJson jsonString: %@", jsonString);        // nsstring -> nsdata        NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];        NSLog(@"u3d_parseJson data: %@", data);        // nsdata -> nsdictionary        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];        NSLog(@"u3d_parseJson dict: %@",dict);        NSLog(@"dict - name: %@",dict[@"name"]);        NSLog(@"dict - age: %@",dict[@"age"]);        NSLog(@"dict - weight: %@",dict[@"weight"]);        NSLog(@"dict - height: %@",dict[@"height"]);        NSLog(@"dict - nice: %@",dict[@"nice"]);    }#if defined (__cplusplus)}#endif

2、c#

using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Runtime.InteropServices;public class IOSLibraryBridge{    #if UNITY_IOS || UNITY_IPHONE    [DllImport("__Internal")]     private static extern bool u3d_getBool1 (bool _input);     [DllImport("__Internal")]     private static extern bool u3d_getBool2 (bool _input);     [DllImport("__Internal")]     private static extern int u3d_getInt (int _input);     [DllImport("__Internal")]     private static extern long u3d_getLong (long _input);     [DllImport("__Internal")]     private static extern float u3d_getFloat (float _input);     [DllImport("__Internal")]     private static extern double u3d_getDouble (double _input);     [DllImport("__Internal")]     private static extern string u3d_getString (string _input);     [DllImport("__Internal")]     private static extern void u3d_packageJosn ();    [DllImport("__Internal")]     private static extern void u3d_parseJson (string _input);     #endif    public static bool getBool1 (bool _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getBool1(_input);        #else        return false;        #endif    }    public static bool getBool2 (bool _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getBool2(_input);        #else        return false;        #endif    }    public static int getInt (int _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getInt(_input);        #else        return 0;        #endif    }    public static long getLong (long _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getLong(_input);        #else        return 0L;        #endif    }    public static float getFloat (float _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getFloat(_input);        #else        return 0f;        #endif    }    public static double getDouble (double _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getDouble(_input);        #else        return 0d;        #endif    }    public static string getString (string _input)    {        #if UNITY_IOS || UNITY_IPHONE        return u3d_getString(_input);        #else        return "--empty--";        #endif    }    public static void packageJson ()    {        #if UNITY_IOS || UNITY_IPHONE        u3d_packageJosn();        #endif    }    public static void parseJson (string _input)    {        #if UNITY_IOS || UNITY_IPHONE        u3d_parseJson(_input);        #endif    }}

3、c#测试

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test : MonoBehaviour {    // Use this for initialization    void Start () {        bool b1 = IOSLibraryBridge.getBool1 (true);        Debug.Log ("b1:" + b1);        bool b2 = IOSLibraryBridge.getBool2 (false);        Debug.Log ("b2:" + b2);        int int1 = IOSLibraryBridge.getInt (10);        Debug.Log ("int1:" + int1);        long long1 = IOSLibraryBridge.getLong (10L);        Debug.Log ("long1:" + long1);        float float1 = IOSLibraryBridge.getFloat (10f);        Debug.Log ("float1:" + float1);        double double1 = IOSLibraryBridge.getDouble (10d);        Debug.Log ("double1:" + double1);        string string1 = IOSLibraryBridge.getString ("hello");    IOSLibraryBridge.packageJson ();        string json = "{\"age\":102,\"weight\":65.5,\"name\":\"阿海\",\"height\":175.555,\"nice\":true}";        IOSLibraryBridge.parseJson (json);    }    void CallbackFormIOS_1(string jsonStr)    {        Debug.Log("CallbackFormIOS_1: " + jsonStr);        LitJson.JsonData jd = LitJson.JsonMapper.ToObject (jsonStr);        if (jd != null)         {            string name = jd ["name"].ToString ();            int age = int.Parse(jd ["age"].ToString());            float weight = float.Parse(jd ["weight"].ToString());            float height = float.Parse(jd ["height"].ToString());            bool nice = bool.Parse(jd ["nice"].ToString());            Debug.Log(string.Format("name={0},age={1},weight={2},height={3},nice={4},",name,age,weight,height,nice));        }    }}

注:unity版本 5.6

阅读全文
0 0
原创粉丝点击