当前位置: 首页 > news >正文

河南省住房城乡建设厅网站首页高端企业建站公司

河南省住房城乡建设厅网站首页,高端企业建站公司,做城市分类信息网站好做吗,天安节能科技园公司做网站在unity开发或者sdk开发经常需要用到unity与oc之间进行交互,这里把它们之间通信代码整理出来。 Unity调用Objective-C 主要分三个步骤: (一)、在xcode中定义要被unity调用的函数 新建一个类,名字可以任意,比如UnityBridge&…

在unity开发或者sdk开发经常需要用到unity与oc之间进行交互,这里把它们之间通信代码整理出来。

Unity调用Objective-C

主要分三个步骤:

(一)、在xcode中定义要被unity调用的函数

新建一个类,名字可以任意,比如UnityBridge:

头文件:UnityBridge.h (头文件中不需要字段和函数声明)

#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface UnityBridge : NSObject@endNS_ASSUME_NONNULL_END

实现文件:UnityBridge.m

实现文件中需要用c语言定义函数,这些函数可以unity调用:

#import "UnityBridge.h"//如果c#调用oc函数时需要一个回调,需要先声明回调参数类型:
typedef void (*MyResultCallback) (int status,const char *result);#if defined (__cplusplus)
extern "C"
{
#endif//这里写被unity调用的函数void test1(void){//这里是函数实现,支持oc语法}/*** int类型参数,返回int*/int test2(int params){//这里是函数实现,支持oc语法}/*** 字符串类型参数*/void test3(const char *params){//这里是函数实现,支持oc语法}/*** 支持回调参数*/void test4(MyResultCallback callback){//这里是函数实现,支持oc语法int code = 0;NSString p=@"test";const char *result = [p UTF8String];//回调给c#callback(code,result)}#if defined (__cplusplus)
}
#endif

注意这些代码不要写在@implementation中,它是c语言的函数。

(二)、将oc代码复制到unity工程中。

将以上UnityBridge.hUnityBridge.m拷贝到unity的Assets目录或子目录中。

将oc代码放在unity工程的Assets目录任意位置都可以,oc代码会自动被unity引擎识别。

(笔者使用的unity版本是2019.4,以前的版本不知道是否可以是任意位置。)

为了方便管理,oc代码一般放在Assets/Plugins/iOS中。

(三)、在unity中声明外部(oc)函数原型

using System.Runtime.InteropServices; //需要引入这个命名空间,会提示引入
using UnityEngine;public class Test{private Test() {}#if UNITY_IOS //加个宏比较好,也可以不加。//如果需要回调,声明一个回调函数类型delegate void MyResultDelegate(int code,string result);//外部函数声明,名字和参数必须和oc的函数保持一致,参数类型用各自的。[DllImport("__Internal")]private static extern void test1();[DllImport("__Internal")]private static extern int test2(int p);[DllImport("__Internal")]private static extern void test3(string p);[DllImport("__Internal")]private static extern void test4(MyResultDelegate resultDelegate);/*** 回调函数的实现(或者叫实例)*  注意:必须是static类型的*/[AOT.MonoPInvokeCallback(typeof(MyResultDelegate))]private static void MyResultDelegateInstance(int code, string result){//这里写接收到oc回调的代码}#endifpublic  void CallOC(){#if UNITY_IOStest1();test2(1);test3("abc");test4(MyResultDelegateInstance);#endif}
}

在c#中调用oc中对应的方法,参见以上 CallOC()

c#调用oc注意事项:

1、数据类型需要使用各自语言的,两者数据类型映射关系在文未。

2、c#中声明的oc方法、回调,都需要static修饰。

Objective-C调用Unity(c#)

oc调用c#比较简单,一般使用以下这个方法:

  UnitySendMessage("MyTestObject", "test", "msg");

UnitySendMessage函数声明在UnityFramework.frameworkUnityInterface.h头文件中:

void  UnitySendMessage(const char* obj, const char* method, const char* msg);

第一个参数obj表示unity中物体GameObject的名字,注意不是c#脚本的名称也不是类名。

如下图:
在这里插入图片描述

第二个参数method表示这个物体挂载的c#脚本中方法的名字。

第三个参数表示msg表示这个方法接收的数据。

例如,以上物体MyTestObject挂载了MyScript.c#脚本,MyScript.c#中有这么一个方法:

 private void test(string content){//这里是接收oc的实现}

那么在oc中调用UnitySendMessage("MyTestObject", "test", "msg") c#的test方法就会执行。

如果有多个参数需要发送,推荐使用json格式。

oc调用c#注意事项:

1、需要依赖UnityFramework.framework框架。

2、unity工程导出的xcode工程默认已经有UnityFramework.framework

3、如果是自己新建的xcode工程需要手动导入这个框架。

附:c#与oc数据类型映射:

Unity(c#)Objective-C
intint
floatfloat
boolbool
stringconst char *
longlong long
http://www.khdw.cn/news/25490.html

相关文章:

  • qq空间做单页网站成人用品网店进货渠道
  • abc公司电子商务网站建设策划书朝阳seo搜索引擎
  • 怎样做校园网站推广优化 seo
  • 哪个网站可以做担保交易平台网站模板设计
  • 商业网站建设常识网站推广优化怎么做最好
  • 制作网站需要哪些工作推广app接单网
  • 成都单位网站设计玉溪seo
  • wordpress注册免邮件百度搜索关键词排名优化技术
  • 优秀的设计网站有哪些内容口碑营销的优势有哪些
  • 做快餐料包的网站有哪些百度搜索服务
  • 建设b2c商城网站定免费发布信息网站大全
  • 关于做电影的网站设计如何快速推广
  • 建站服务器拼多多seo 优化软件
  • 深圳做网站比较好的公司有哪些中国网站建设公司
  • 如何将数据库导入网站国外网站seo
  • 什么网站流量大seo优化推广多少钱
  • 自助网站建设方法网站seo推广营销
  • 论坛网站备案武汉百度
  • 网站子目录设计百度客服电话人工服务热线电话
  • 网站建设人员招聘经典网络营销案例
  • 手机网站违规禁止访问怎么办收录
  • 杭州制作手机网站18百度推广登录页面
  • 开封市网站建设上google必须翻墙吗
  • 目前热门的网站建设语言怎样宣传自己的品牌
  • 宁阳网站设计北京网站建设开发公司
  • 青海网站设计高端太原整站优化排名外包
  • 怎样在工商网站做遗失佛山今日头条
  • wordpress 招聘网站模板营销技巧和营销方法视频
  • 电商网站如何做seo全面的seo网站优化排名
  • 网页设计实训报告美食主题短视频seo营销