iOS与Unity交互一般分为两种方式:Unity调用iOS原生代码和iOS原生代码调用Unity代码。参数传递是交互过程中非常重要的一项,下面我将为你详细讲解关于参数传递的完整攻略。
参数传递方式
在iOS与Unity交互过程中,参数传递方式有以下几种:
- 字符串传递
- 数值传递
- Json对象传递
其中Json对象传递是最为常用的一种方式。接下来我将举两个例子分别进行讲解。
字符串传递的方式
在Unity场景中,你可以通过调用iOS原生代码的方式来实现字符串传递。如下进行调用:
#if UNITY_IPHONE
[DllImport("__Internal")]
private static extern void sendMessage(string message);
#endif
void sendStringToiOS(string message)
{
#if UNITY_IPHONE
sendMessage(message);
#endif
}
在iOS原生代码中,你需要对接收到的字符串进行处理,如下:
NSString *message = [NSString stringWithUTF8String:msg];
NSLog(@"Received String message: %@",message);
Json对象传递方式
在Unity场景中,Unity的Json库提供了快速创建Json对象的方法,通过调用iOS原生代码的方式实现Json对象传递。如下为创建Json对象的示例:
private IEnumerator TestJsonCodec()
{
// 创建Json对象
JSONObject jsonObject = new JSONObject();
jsonObject.AddField("unit_int", 100);
jsonObject.AddField("unit_float", 100.1);
jsonObject.AddField("unit_string", "unit_string");
Debug.Log(jsonObject.ToString());
// 传递Json对象给原生iOS
unityToIosMsg(new IosMessage<IosJsonArgs>()
{
action = "unit_string",
args = new IosJsonArgs(jsonObject.ToString())
});
string json_string = "{\"Level\":\"101\",\"Name\":\"yxc\",\"HP\":\"240\",\"Skills\":[\"Magic Missile\",\"Chain Lightning\",\"Charm\"]}";
jsonObject = new JSONObject(json_string);
// 打印反序列化之后的Json对象
Debug.Log("Level: " + jsonObject.GetField("Level").str);
Debug.Log("Name: " + jsonObject.GetField("Name").str);
Debug.Log("HP: " + jsonObject.GetField("HP").str);
JSONObject skillsObj = jsonObject.GetField("Skills");
Debug.Log("Skills: " + skillsObj.list.Count);
for (int i = 0; i < skillsObj.list.Count; i++)
{
Debug.Log("Skill: " + skillsObj.list[i].str);
}
// 传递Json字符串给iOS原生代码
unityToIosMsg(new IosMessage<IosJsonArgs>()
{
action = "LevelUpgrade",
args = new IosJsonArgs(json_string)
});
yield return null;
}
在iOS原生代码中,你需要对传递过来的Json对象进行反序列化处理来获取里面的值,如下:
NSError *jsonError = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[jsonStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&jsonError];
if (!jsonError) {
NSLog(@"%@",json);
NSString *level = [json objectForKey:@"Level"];
NSString *name = [json objectForKey:@"Name"];
NSString *hp = [json objectForKey:@"HP"];
NSArray *skills = [json objectForKey:@"Skills"];
}
以上为两个示例,一个使用字符串传递的方式,一个使用Json对象传递的方式。通过这些示例可以看到,在iOS与Unity交互的过程中,参数传递是非常关键的一个环节。如若把参数传递处理不好,将会导致交互过程失败。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS与Unity交互笔记之参数传递 - Python技术站