unity Object-c交互
一、unity 调用 Object-c
C/C++可以直接与Object-c交互,只要把文件后缀.m直接改成.mm,成为C/C++与Object-c混编文件.
C#又可以调用C/C++方法,所以C#就是可以与Object-c交互.
过程: C# 调用 C/C++ 调用 Object-c
1.C/C++调用Object-c
新建一个Test.mm文件,定义一个C风格接口函数。如:
Test.mm
extern "C"{
void Log(char* arg){
// 这里可以调用object-c的函数了
// 如 [[ AlertView alloc] init]; ...
}
}
//或
extern "C"{
void Log(char* arg);
}
void Log(char* arg){
// 这里可以调用object-c的函数了
// 如 [[ AlertView alloc] init]; ...
}
将Test.mm文件放到unity工程的Assets/Plugins/iOS路径下
2.C#调用C/C++
新建TestPluginiOS.cs,如:
TestPluginiOS.cs
#if UNITY_IOS && !UNITY_EDITOR//只在iOS平台下编译
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;//DllImport在此命名空间下 public class UniWebViewPlugin {
[DllImport("__Internal")]
private static extern void Log(string arg);
//1.访问权限不一定是private
//2.必须是static
//参数是string而不是char*
}
#endif
注意:参数是string而不是char*,关于C与C#参数类型映射关系 http://blog.csdn.net/yatusiter/article/details/9221861
二、Object-c调用C#
Object-c中直接使用该方法调用C#函数
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
//参数1:添加了要调用函数脚本组件的GameObject名
//参数2:回调函数的名字
//参数3:回调函数的参数
同Android开发中Java回调c#一样,三个参数都是字符串类型!但android开发中的第三个参数不能是null(若没有参数,可以用空字符串"",因为使用null程序会崩掉)
如果参数类型为NSString需要转换为UTF-8,如:
NSString * url=@"www.qq.com";
UnitySendMessage("GameObject1", "Log", [url UTF8String]);
官方介绍文档:https://docs.unity3d.com/Manual/PluginsForIOS.html
C#使用MonoPInvokeCallback,让C直接回调C#函数
.c文件
typedef struct Parameter {
int a;
int b;
} Param;
typedef void (*CallBack)(Param* p);
void TestFunc(CallBack cb){
Param p;
p.a = ;
p.b = ;
cb(&p);
}
cs文件
public class NewBehaviourScript : MonoBehaviour {
[StructLayout(LayoutKind.Sequential)]
struct Parameter {
public int a;
public int b;
}
delegate void CallBack(IntPtr param);
[DllImport("TestLib")]
static extern void TestFunc(CallBack cb);
[MonoPInvokeCallback(typeof(CallBack))]
static void CallBackFunc(IntPtr param) {
var p = (Parameter)Marshal.PtrToStructure(param, typeof(Parameter));
Debug.Log("a:" + p.a + " b:" + p.b);
}
// Use this for initialization
void Start () {
TestFunc(CallBackFunc);
}
// Update is called once per frame
void Update () {
}
}
更详细代码看这里:http://www.cnblogs.com/kingBook/p/6723620.html
三、oc字符串与c字符串转换和拷贝
以下代码放置在extern "C"{}外
NSString* MakeNSString (const char* string) {
if (string) {
return [NSString stringWithUTF8String: string];
} else {
return [NSString stringWithUTF8String: ""];
}
}
char* MakeCString(NSString *str) {
const char* string = [str UTF8String];
if (string == NULL) {
return NULL;
}
char* res = (char*)malloc(strlen(string) + );
strcpy(res, string);
return res;
}
unity Object-c交互的更多相关文章
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Unity与服务区交互数据
Unity与服务区交互数据 Unity可能在用的时候使用到登陆等需要与服务器交互数据.今天尝试使用了WWW类和WWWForm类来实现Get请求与Post请求. 1.WWW Unity圣典解释: WWW ...
- Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Unity与IOS交互
Unity IOS交互 @By 广州小龙 QQ群:63438968 环境:Mac os 10.9.2 Unity 4.2.1f4 Xcode 5.0.2 Unity IOS的交互我写过一个教程 ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- Unity与Android交互实现
主要参考了这篇文章: Unity与Android交互方案优化版 链接:https://www.jianshu.com/p/86b275da600e 自己的实现(unity获取内存和温度): andro ...
- unity与Android交互
unity打包成安卓工程中的JAVA代码 public class UnityPlayerActivity extends Activity { //Unity中调用此函数 public int Ma ...
- Unity与web交互
Unity在发布web时,重要的是Unity与Web的交互,参数的传递 1.unity调用网页js的函数:Application.ExternalCall js函数: <script langu ...
- 整理Lua和Unity和Lua交互文章链接
重点文章: 1.[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 2.[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(中) 3.Lua和C++交互详细总结 4. ...
- Unity和Android交互学习
这段时间学习Unity和Android互调,从基础开始. 网上的教程有很多,浏览了一圈教程,发现目前有两种方式:一种是直接把 .aar文件导入Unity/Plugins/Android文件夹,另一种是 ...
随机推荐
- 【转】每天一个linux命令(54):ping命令
原文网址:http://www.cnblogs.com/peida/archive/2013/03/06/2945407.html Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主 ...
- linux下编译GD(freetype+libjpeg+libpng+gd-devel)
linux下编译GD(freetype+libjpeg+libpng+gd-devel) 1.检查freetype是否安装rpm -qa | grep freetype没有的话编译freetype 这 ...
- SVN 环境搭建 需要注意的地方
一. 服务器上安装的软件: 先 安装 Subversion 下载的地址:http://www.sliksvn.com/en/download 安装 TortoiseSVN 下载地址:http:/ ...
- ES(4): ES Cluster Security Settings
目录: ES安全事件回顾 ES集群安全建议 安全访问配置 license更新 ES安全事件回顾 下面是白帽汇监测到针对全球使用广泛的全文索引引擎Elasticsearch的勒索事件: 2017年1月1 ...
- 什么是JavaBean、bean? 什么是POJO、PO、DTO、VO、BO ? 什么是EJB、EntityBean?
什么是JavaBean.bean? 什么是POJO.PO.DTO.VO.BO ? 什么是EJB.EntityBean? 前言: 在Java开发中经常遇到这些概念问题,有的可能理解混淆,有的 ...
- BASIC-17_蓝桥杯_矩阵乘法
示例代码: #include <stdio.h>#define N 30 int main(void){ int n = 0 , m = 0 , sum = 0; int i = 0 , ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- Jsoncpp 使用方法大全
Json(JavaScript Object Notation )是一种轻量级的数据交换格式.简而言之,Json组织形式就和python中的字典, C/C++中的map一样,是通过key-value对 ...
- 1084 Broken Keyboard (20 分)
1084 Broken Keyboard (20 分) On a broken keyboard, some of the keys are worn out. So when you type so ...
- 含有不等式约束的优化问题——KKT条件
优化问题: 其中, 定义:对于一个不等式约束,如果,那么称不等式约束是处起作用的约束. 定义:设满足,设为起作用不等式约束的下标集: 如果向量:是线性无关的,则称是一个正则点. 下面给出某个点是局部极 ...