Unity3D与iOS的交互

1. 关于Unity3D

Unity3D(以下简称U3D)是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

作为一款跨平台开发工具,难免会与原生平台进行一些交互操作来完成一些特定的平台功能。例如:你需要直接操作iOS的IAP来实现游戏中的内付费功能;甚至一些第三方SDK没有提供U3D版本的情况下,你会直接在原生系统平台调用其提供接口等等。

下面将为大家介绍,在U3D下如何实现与iOS系统的交互工作,来满足一些需要借助原生系统的功能需求。

2. From U3D to iOS

2.1 实现原理

由于U3D无法直接调用Objc或者Swift语言声明的接口,幸好U3D的主要语言是C#,因此可以利用C#的特性来访问C语言所定义的接口,然后再通过C接口再调用ObjC的代码(对于Swift代码则还需要使用OC桥接)。例如,有如下C语言方法:

void nativeMethod ()
{
   
  NSLog(@"------- objc method call...\n");
}

在C#中则可以像下面代码一样进行引入和调用:

using System.Runtime.InteropServices;

[DllImport("__Internal")]
internal extern static void nativeMethod();

其中DllImport为一个Attribute,目的是通过非托管方式将库中的方法导出到C#中进行使用。而传入"__Internal"则是表示这个是一个静态库或者是一个内部方法。通过上面的声明,这个方法就可以在C#里面进行调用了。如:

public class Sample
{
   
  public void test ()
  {
   
    nativeMethod();
  }
}

2.2 实现步骤

下面通过一个拼接字符串的例子来说明怎么样从U3D中传入两个字符串到iOS中,然后由iOS拼接后通过NSLog输出结果:

  1. 首先新建test.mtest.h两个文件。分别写入如下内容:
/// test.h

extern "C"
{
   
  extern void outputAppendString (char *str1, char *str2);
}
/// test.m
#import <Foundation/Foundation.h>

void outputAppendString (char *str1, char *str2)
{
   
  NSString *string1 = [[NSString alloc] initWithUTF8String:str1];
  NSString *string2 = [[NSString alloc] initWithUTF8String:str2];
  
  NSLog(@"###%@", [NSString stringWithFormat:@"%@ %@", string1, string2]);
}
  1. 然后将上面的两个文件放到U3D项目的Assets目录中。如图:

放入U3D项目

  1. 分别选择test.htest.m文件,在Inspector面板中去掉Any Platforms的勾选,然后保留iOS这一项选中。如图:

设置平台插件

  1. 新建一个叫Sample的C#脚本文件,并在这个文件中写入c接口的声明,如:
public class Sample : MonoBehaviour 
{
   
	//引入声明
	[DllImport("__Internal")]
	static extern void outputAppendString (string str1, string str2);
}
  1. 在Start方法中调用该方法,如:
void Start () 
{
   
	#if UNITY_IPHONE	
	outputAppendString("Hello", "World");
	#endif
}

注意:对于指定平台的方法,一定要使用预处理指令#if来包括起来。否则在其他平台下面执行会导致异常。

  1. 拖动Sample脚本到场景的Main Camera对象中,让脚本进行挂载。

挂载脚本

  1. 使用快捷键Command+Shift+B(或者点击菜单File -> Build Settings)调出Build Settings窗口,将项目导出为iOS项目。如图:

导出iOS项目

<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值