iOS与Unity交互笔记之参数传递

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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C# System.TypeInitializationException 异常处理方案

    当在C#程序中调用某个类或静态构造函数时,如果类的静态构造函数引发异常,System.TypeInitializationException异常将抛出。在这种情况下,程序将在控制台或日志中输出异常提示信息,并停止运行。针对这种情况,我们可以采取以下几种处理方案: 方案1:使用try…catch块处理TypeInitializationException异…

    C# 2023年6月6日
    00
  • asp.ent(C#)中判断空字符串的3种方法以及性能分析

    让我来为你详细讲解“asp.net(C#)中判断空字符串的3种方法以及性能分析”的攻略。 问题背景 在程序开发中判断字符串是否为空是常见的一项任务。ASP.NET(C#)中也有多种方式来判断一个字符串是否为空。在选择使用哪种方式时,我们需要考虑到每种方式的性能,因为字符串的判断在程序中频率很高。本攻略将对三种ASP.NET中判断空字符串的方式进行介绍,并对它…

    C# 2023年5月15日
    00
  • ASP.NET Core中的Razor页面使用视图组件

    在 ASP.NET Core 中,可以使用 Razor 页面和视图组件来构建动态 Web 应用程序。视图组件是一种可重用的 UI 组件,可以在多个 Razor 页面中使用。以下是 ASP.NET Core 中 Razor 页面使用视图组件的完整攻略: 步骤一:创建视图组件 在使用视图组件前,需要创建视图组件。可以在 ASP.NET Core 项目中的 Vie…

    C# 2023年5月17日
    00
  • C# 监控 Windows 文件夹的方法

    C#可以使用FileSystemWatcher类来监控Windows文件夹。FileSystemWatcher类可以监视文件夹中的文件和子文件夹的创建、删除、重命名和修改等操作,并触发相应的事件。本文将提供C#监控Windows文件夹的完整攻略,包括创建FileSystemWatcher对象、设置监控选项、处理事件等。同时,本文还提供两个示例,演示如何使用C…

    C# 2023年5月15日
    00
  • .NET微信开发之PC 端微信扫码注册和登录功能实现

    针对“.NET微信开发之PC 端微信扫码注册和登录功能实现”的攻略,我将提供完整的解释与示例,以方便大家理解。 目录 前言 技术栈 环境准备 需求分析 技术实现 总结 前言 微信是目前国内最受欢迎的社交软件之一,在PC端使用微信成为了不小的需求。为此,我们将为大家介绍使用.NET技术实现PC端微信扫码注册和登录的完整攻略。 技术栈 .NET Framewor…

    C# 2023年5月31日
    00
  • C#实现简单的字符串加密

    下面我给你详细讲解一下C#实现简单的字符串加密的完整攻略。 一、加密算法的选择 字符串加密可以采用多种算法,这里我们使用最简单的一种——Caesar密码算法。该算法原理是将字符串中的每个字符按照一定数目的偏移量加密,解密时再将字符按照相同的偏移量向相反的方向偏移即可。 二、编写加密函数 接下来我们来编写一个加密函数。假设加密偏移量为3,我们将该函数命名为En…

    C# 2023年6月6日
    00
  • JS提交form表单实例分析

    JS提交form表单实例分析: 当用户在网站上填写表单时,通过JS代码来自动提交表单也是一种方便快捷的方式,本文将从以下几个方面阐述JS提交form表单的攻略: 首先需要获取form表单元素,可以通过form元素的Id或者Name来获取: let formEle = document.getElementById(‘formId’); // 或者 let f…

    C# 2023年5月31日
    00
  • ASP.NET Core MVC 从入门到精通之HttpContext

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年5月4日
    00
合作推广
合作推广
分享本页
返回顶部