01 iOS把模型数据转成json,传值json数据给unity
import Foundation
class iOSDataModel: NSObject,Codable
{
var key1 = "value1"
var key2 = "value2"
//转json字符串格式
func toJsonString() -> String {
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try! encoder.encode(self)
return String(data: data, encoding: .utf8) ?? ""
}
}
func showUnityView() {
let iOSDataModelObject : iOSDataModel = iOSDataModel()
let iOSToUnityString = iOSDataModelObject.toJsonString()
print("iOSToUnityString = \(iOSToUnityString)")
//iOS向Unity发送信息
//Controller是unity启动Scene里的gameobject,可以是摄像机也可以是Canvas等。只要这个gameobject上挂上脚本,实现IOSToUnity
//方法,就可以获得ios发过来的信息
framework.sendMessageToGO(withName: "GameData", functionName: "IOSToUnity", message: iOSToUnityString)
//显示unity画面
framework.showUnityWindow()
}
02 Unity接收到json数据,转换为模型数据
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UnityDataModel
{
public string key1 = "unity_value1";
public string key2 = "unity_value2";
}
public void IOSToUnity(string str)
{
Debug.Log("Unity接收IOS信息 = " + str);
//通过Newtonsoft.Json插件的JsonConvert.DeserializeObject方法,将json格式的string数据转换为model数据
UnityDataModel unityDataModel = JsonConvert.DeserializeObject<UnityDataModel>(str);
Debug.Log("unityDataModel.key1 = " + unityDataModel.key1);
Debug.Log("unityDataModel.key2 = " + unityDataModel.key2);
}
03 Unity把模型数据转换为json数据传给ios端
#if UNITY_IOS
UnityDataModel unityDataModel = new UnityDataModel();
//将model对象转换成json字符串
string unityToiOSString = JsonConvert.SerializeObject(unityDataModel);
//Unity发送信息给iOS
UnitySendMessageToiOS(unityToiOSString);
//unity程序关闭
Application.Unload();
#endif
04 iOS端接收到json数据,转换为模型数据
//unity的CSharp代码里调用Application.unload后会触发下面的方法
func unityDidUnload(_ notification: Notification!) {
print("ios获得的unity发来的信息 = \(String(describing: framework.myiOSGetMessage()))")
if let getStringFromUnity = framework.myiOSGetMessage()
{
//使用SwiftyJSON框架把json格式的数据转换为model数据
let dataFromUnity = JSON(getStringFromUnity)
print("dataFromUnity = \(dataFromUnity)")
}
//点击Unity的Application.unload方法会进入到这个方法
framework.unregisterFrameworkListener(self)
//调用UnityViewController里的exitUnity方法
delegate?.exitUnity()
}