Unity3D在IOS、Android上使用C++并回调的究极解决方案

Unity3D中调用C++动态链接库(dll)-两种方式(Managed PluginsNative Plugins) 问题描述 在Unity3d脚本中实现对C++动态库的调用。假设需要在脚本中调用dll里面的一个函数,函数名下: int PathPlanning(INPUT *input, OUTPUT *output); //其中INPUT 和 OUTPUT 是自定义的结构体(或者类,一样的) 简单介绍一下这个函数: 这是用于机器人路径规划的一个函数,传给它一个INPUT结构体(里面是一些输入参数),... 阅读详情

各种调用C++的方法在各种平台下的总结如下(可能会有出入):

1、在VS中使用CLR C++工程,编译产生.dll,放入Plugins

✔ Android、Editor、Windows、OSX
✘ IOS (报的错貌似与il2cpp有关)

2、直接在Plugins中放入.cpp文件(不支持子目录)

✔ IOS
✘ Editor、Windows、OSX、Android

3、编译出目标移动平台的库(.a或.so等),放入Plugins

✔ IOS、Android
✘ Editor、Windows、OSX

4、编译出PC平台的库,放入Plugins

✔ Windows(.dll)、Linux(.so)、OSX(Bundle)
✘ iOS、Android
? Editor



我的目标主要是IOS,所以下面以IOS、C++为例介绍一下各种解决方案,我的Unity版本是5.4.2f2。(后因为build时崩溃换成5.5.0f3)

无论用哪种方法,都需要在Unity工程中Assets中新建一个Plugins文件夹,再新建一个iOS文件夹。

第一种方案的话,CLR C++的语法与正常C++稍有不同,要改C++代码,而且还不能在iOS上使用,就直接否决了。第四种也不用说,应该行不通。

第二、三种方案根据回调方法的不同每种又可以分为两种方法:使用官方手册上的UnitySendMessage;使用MonoPInvokeCallBack。所以共四种方法。

直接看我将四种方法汇总在一块的代码吧:

//C#
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;
using AOT;

public class MonoCB : MonoBehaviour {

    [StructLayout(LayoutKind.Sequential)]  
    struct Parameter {  
        public int a;  
        public int b;  
    }  

    delegate void CallBack(IntPtr param);  

    [DllImport ("__Internal")]  
    static extern void TestFunc(int a,int b,CallBack cb);  

    [DllImport ("__Internal")]  
    static extern void TestFunc2(int a,int b);  

    [DllImport ("__Internal")]  
    
Objective C++实现回调函数 下面为大家介绍一下在Objective C++中怎么样去实现回调,大家都知道Object C 与 C++ 混编的时候,是不能用Cocoa 自带的委托机制来实现回调的。比如在做一些多平台的项目时,由于接口是c++编写的,这个时候你要怎么样去将接口函数里的数据传递到你Object C编写的对象中去呢。最简单的方法就是使用ios消息机制-Notification,来传递从接口中收到的数据。但如果这个时候 阅读详情

相关推荐

C++ SDK提供回调函数接口给Android/iOS 集成

C++如何提供跨平台的回调函数接口是业务开发很常遇到的需求,但是实际上公开的资料都很杂乱,而且不一定正确,因此在此文章中,以Android Java和iOS Swift为例,系统化说明一下如何制作一个跨平台C++回调函数接口。

weixin_44491772的博客 858

Unity3d使用C++ DLL 之 回调 示例

Unity3d使用C++ DLL 之 回调。里面包含注册回调,接收回调等代码实现

2019最新 iOS Native项目集成Unity3D

经历了几天的不断尝试解决各种报错和网上寻得的资料最终成功在iOS项目中集成Unity3D,现有的资料都比较老,多数不适用或者说集成完报很多错误。 言归正传,目前我所做的集成是基于Xcode10.1(最新为10.2),Unity2018.2.21f1 (建议先在文章最后看一下关于UnityPlayerSetting的设置) 步骤一:新建文件夹,里面存放两个文件,一个是Xcode Native工程(以...

qq_36498627的博客 1832

ios 传入c 代码回调使用

情况就是objective-c 调用c 且要把数据回传到objective-c 的标准使用方法: 定义回调函数,回调里边void*context int count 用于传入objective 对象,后边是回调的内容。 所以回调函数可以写成 typedef  int   (*Player_Callback)(void *opaque, int message, void *data

yangzm的专栏 758

unity调用ios原生代码objective-c和回调

从c#到objective-c学习 https://www.runoob.com/w3cnote/objective-c-tutorial.html https://www.jianshu.com/p/6328c55ac4b2 http://www.cnblogs.com/wuhuacong/p/3589699.html 进阶 https://www.xuanyusong.com...

a554671102的博客 630

Unity中AndroidIos平台的crash reporter(崩溃报告采集与上传)

Crash Report,这在大型软件开发领域是很常见的功能,就是能够当程序崩溃退出后,能够将崩溃时的信息,最好是携带dmp文件发送给服务器,这样开发人员既可以获得分发出去的客户端的崩溃率统计,也可以针对出现的错误进行及时的纠正,之前在PC的端游时代,这是很常见的做法,最近进行了在手游上的关于crash report的相关研且为项目编写了一个相对完善的CrashReport模块。

leon 1万+

Unity3d】Unity与iOS之间通信

在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。

devnn的专栏 4548

纯js开发android,js开发app_安卓app开发引擎

javaSE以及AndroidUnity3D引擎哪个能开发出安卓系统的游戏?先说一下,Android系统的开发是底层C,中间层C++/C,上层应用是JAVA,应该说,系统是C和C++开发,只有运行在其上的应用app用的java,2d的cocos2dx,3d的用unity3d,另外Android应用一般用的是eclipse来开发的,用的是java,而unity用的C#和js,cocos2dx用C+...

weixin_39746869的博客 4752

【单目全景相机】Unity3D多平台SDK接入

【单目全景相机】多平台SDK接入作者:瓦哥 2016.09.16 由于本人认知有限,如有错漏,非常欢迎同行指正交流。 QQ:454186694 什么是多平台SDK接入? Unity3D一般使用C#语言来做开发,Mono做为虚拟机,管理C#或者C/Cpp编写的托管的代码。而对于不同的平台,有时候比较上层的代码执行效率不是那么高或者有些功能实现就是需要平台支持,需要更底层的代码实现,那么

活到老,学到老! 3611

[Unity3D]Unity3D游戏开发之Unity与Android交互调用研

各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。在前一篇文章中,我们研Android平台上Unity3D的手势操作在之前的基础上实现了手势旋转、放缩等功能。今天呢,我们继续来研Unity在Android平台上扩展的内容。众所周知,Unity3D是一个强大的跨平台游戏引擎,和大多数喜欢Unity的朋友一样,博主在体验了Unity强大的跨平台能力后,被深深地震撼了,试想以前我们如果要开发一款游戏的话,我们需要对DX、OpenGL等图形库

素履独行 | 元培的个人博客 3万+

Unity3D如何接入第三方的SDK - iOS

来源:http://blog.csdn.net/smlisi2/article/details/8786485 授人以鱼,不如授人以渔”,以UNITY3D调用iOS版的91SDK为例,利用C# / C / OBJ-C交互原理,本文将详细介绍UNITY3DiOS之间交互的解决方案。 首先,打开XCODE新建一个空项目,参照91SDK开发文档将91SDK引入进行环境配置。 配置...

weixin_30655219的博客 88

Android IOS各种视频资源大神免费送

原处原作者百度云盘资源永久分享,包括计算机中Java & AndroidIOS、前端、数据库、C++Unity3D、Python方面的视频等教学资源。一、Java & Android尚学堂_高淇_java300集视频教程(压缩包,适合下载到本地观看):链接:https://pan.baidu.com/s/1Bk3-yuGT2T4lq1DPSoFg-A 密码:p9aq尚学堂_高淇...

Zhujiang 1万+

Java & AndroidIOS、前端、数据库、C++Unity3D、Python学习资料

百度云盘资源永久分享,包括计算机中Java & AndroidIOS、前端、数据库、C++Unity3D、Python方面的视频等教学资源。 PS:转载的别人的,我只是用来插个眼,感谢大佬的分享https://blog.csdn.net/qq_36992688/article/details/79490119 一、Java & Android 尚学堂_高淇_java300集视频...

qq_42713526的博客 696

开源网络库RakNet for unity3d iOS unity3d android使用及实现。

Raknet是一高性能的跨平台的网络库。他主要基于UDP实现,性能很好,可以做服务器。 鉴于unity3d较差的网络支持。本人成功实现了raknet c# for unity3d使用。 有使用的请联系本人QQ:410929706

蓝星星 4805

关于UNITY3D的各种各样。

作为一个老C++程序员,在接触了UNITY3D之后,除了玩C#还得玩JAVA和OBJECTIVE-C。 1年多的经验证明,UNITY3D游戏项目,如果打算做多平台,项目组里必须得有一个会多语言的万金油角色。无论,UNITY3D的介绍是多么的美妙,什么可以另存为多种平台。在最终发布之后,面的各种平台终需要作出相关修改。 比如最简单的翻屏问题,安卓只需要在导出的时候做设置,但若是IOS则必须敲几...

weixin_30639719的博客 82

ios android平台接入unity,Unity接入IOS SDK笔记

一. Unity3D与原生IOS代码之间的相互调用Unity使用C#作为开发语言,而IOS采用Objective-C作为开发语言,如何让C#调用OC代码,或者让OC调用C#代码。所幸OC和C#都支持直接嵌入C/C++代码,作为两者之间的桥梁。1. iOS To Unity3dunity3d 的UnitySendMessage函数,在导出Xcode工程时,在UnityInterface.h中已声明...

weixin_36484898的博客 454

Unity3D项目导入android

不得不说Unity很强大,因为一个工具,可以在所有流行的设备上生成应用程序。包括androidios,linux,windows,mac各种常用操作系统。今天来说一下如何将Unity3D项目运行在android设备上,以及在这里要注意的一些问题。 我就用Unity3D自代的一那个AngryBots.unity的项目来吧。这个项目是一个游戏项目,玩家控制一个角色在一个建筑中行走,同时会有一些机器人

Mage的专栏 1576
上一篇: PTAM移植到IOS(附工程和库文件)
下一篇: iOS9及以下的自带词典无法下载问题的解决方法
IceTeaSet
博客等级 码龄12年 42粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值