c 跨平台android,Unity 使用C/C++ 跨平台终极解决方式(PC,iOS,Android,以及支持C/C++的平台)...

PC的事实上根本不用说,毕竟C#和C++交互的文章已经够多了,当然我自觉得经过几次折腾后。差点儿全部游戏须要到的操作我都掌握了(各种传參方法,各种坑,不懂的能够留言问。尽管基本上没人看。哈哈)

废话不多说,我们主要来讲两大平台——iOS和android——与unity的native代码交互

这里啰嗦一下就是去网上搜都是各种蛋疼的东西,比方假设要调用unity C#的函数怎么办,差点儿清一色是给出UnitySendMessage的方法。在项目中用这个简直是作死。那么多函数那么复杂的參数你这个破函数顶个屁用啊。

iOS还好说。Android更是坑,竟然要你去和java代码交互,简单来说就是C/C++ -》 Java -》C#。而实际上大部分时候你根本不须要这么蛋疼,直接C/C++ -》C#就能够了。由于C/C++差点儿能够操作全部底层资源。当然个别需求例外

正题

typedef struct Parameter {

int a;

int b;

} Param;

typedef void (*CallBack)(Param* p);

void TestFunc(CallBack cb){

Param p;

p.a = 10;

p.b = 20;

cb(&p);

}

extern “C” 这样的细节就不多说了,由于我直接建立的是.c文件所以不须要这个标记,这里直接用典型的回调函数做样例,由于有了回调。你就不必考虑怎样使用C/C++调用C#或者反过来,由于这个样例实际上已经包括了信息的交换

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 () {

}

}

以上是unity的脚本。输出a,b。

注意到关键没,对,就是[MonoPInvokeCallback(typeof(CallBack))]

这个标签。没有这个标签就无法回调成功。

使用这种方法就能够保证编码效率和运行效率,你不须要进行各种中间层的封装。不需把字符串转来转去,这全然归功于Mono的跨平台机制。Unity仅仅是进行了一些简便操作

另外须要注意的是Android可能须要编译各种相应的.so。其有用AndroidStudio一下子全部编译出来然后丢到unity就好了

还有在PC平台以下不须要这个标签!

事实上假设不是为了保护代码,对于unity开发差点儿都能够在C#中完毕,C#功能已经足够强大了,对于Android保护C#也在上篇文章提到过,尽管个人并不知道安全性假设,唯一的提示就是使用Coroutine之后,反编译无法看到其过程。可是我并不知道是否仅仅是移到别的地方去了。我个人在把一下敏感信息放在Coroutine里面来防止反编译(尽管可能然并卵)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hades武器第四形态解锁_凯多的第四个技能预告——冰冻!

在《海贼王》中,四皇凯多被誉为“海陆空最强生物”,能够变成神龙,如果不出意外的话,凯多应该是动物系幻兽种神龙果实的能力者。毕竟凯多的海贼团就叫做“百兽海贼团”,手下也都是动物系果实能力者,能够降服…

解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas

今天用idea提交代码到github上,push后报错 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 一:原因分析 Permission denied (publickey) 没…

转载------------java equals 方法

作者:海子出处:http://www.cnblogs.com/dolphin0520/浅谈Java中的equals和 在初学Java时,可能会经常碰到下面的代码: 1 String str1 new String("hello"); 2 String str2 new String("hello"); 3 …

计算机系统基础:校验码知识笔记

1、校验码概念 校验码主要是为了解决计算机各部件进行数据传输和交换,确保传送过程的正确无误,一是为了提高硬件电路的可靠性,二是提高代码的校验能力。通常会用校验码来检查传送的数据是否正确。 校验码编码分为两类:合法编码、错…

qml与HTML数据交互,GitHub - toby20130333/QtQuickHtmlBridge: 基于QtQuick的C++,qml,Html三者的Bridge交互...

基于QtQuick的C,qml,Html三者的Bridge交互主要功能自定义C对象并注册到QML可以在QML中继续扩展C对象的属性和方法 信号等将C对象注入到WebChannelHtml中引入C对象JavaScript与C直接交互示例代码说明main.cpp://该实例必须直接继承自Object的 QWidget的忽略qmlRegisterType(&quo…

html为什么要进行表单验证_化学锚栓为什么要进行拉拔试验?

点击箭头处“蓝色字”,关注我们哦!!化学锚栓是继膨胀锚栓之后出现的一种新型紧固材料,由化学药剂与金属杆体组成,是通过特制的化学粘接剂,将螺杆胶结固定于砼基材钻孔中,以实现对固定件锚固的复…

电路基础知识讲解(太全面了)

IT技术分享社区个人博客网站:https://programmerblog.xyz文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基…

github设置仓库可见性 私人仓库设置

一:点击Setting 二:点击Make private 三:阅读关于将仓库设为私有的警告。 入您要设为私有的仓库的名称,例如 accountname/reponame。 单击 I understand, make this repository private(我已了解,请将此仓库设为私有)

Git合并分支操作

1. 添加自己的文件 git add .; 2. 缓存自己的文件 git stash; 3. 查看状态 git status; 4. 获取别的分支 git pull origin master(分支名); 5. 出栈自己的文件 git stash pop 。 转载于:https://www.cnblogs.com/csl0910/p/5605868.html

html鼠标悬停区域拉伸,html – :将鼠标悬停在具有边框半径的div上

这里的问题是子元素不继承父元素的border-radius.有两种方法可以实现您想要的:您可以将子元素的border-radius设置为匹配或大于父元素的radius,或者将父元素的overflow属性设置为hidden.这是一个快速的片段,说明了问题和两个解决方案:*{box-sizing:borde…

rfid在高速公路管理中的应用_RFID技术与ETC技术在弱电门禁系统中应用

前言:无线射频识别技术(RFID技术)较早的大规模的综合应用,发展至今,我国的RFID技术已经较为成熟。 相关技术1、无线射频识别 RFID(Radio Frequency Identification,无线射频识别)是一种非接触式的自动识别技术,它通过射…

Idea中Terminal中git基本操作

列出分支 列出分支基本命令:git branch 没有参数时,git branch 会列出你在本地的分支。 上图的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支(有*星号的)。 当你执行 git init 的时候,默认情况下 Gi…

计算机体系结构知识笔记

计算机体系结构结构:计算机的概念结构、功能和性能特性,它从一个更高的层次对计算机的结构特征等宏观特征进行研究。 1、计算机体系结构分类 2、CISC和RISC 指令体系结构(ISA):一个处理器支持的指令和指令的字节级编码…

java类的加载机制

一、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象&…

HttpServletRequestWrapper、HttpServletResponseWrapper结合 过滤器 实现接口的加解密、国际化

目录 一、HttpServletRequestWrapper代码 二、HttpServletRequestWrapper代码 三、加解密过滤器代码 四、国际化过滤器代码 一、HttpServletRequestWrapper代码 package com.vteam.uap.security.httpWrapper;import jakarta.servlet.ReadListener; import jakarta.servlet.…

razor 写入html标记,如何在Razor中编写“ Html.BeginForm”

泛舟湖上清波郎朗以下代码可以正常工作:using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype "multipart/form-data" })){ Html.ValidationSummary(true) …

windows安全模式_Winclone 8 for Mac(Windows分区备份迁移和还原工具)

winclone 8 Mac版是一款专业的boot Camp迁移助手,能够将你的PC移动到你的Mac中,让你实现win系统的迁移。winclone Mac版可以将Bootcamp分区安装的windows进行克隆也可将克隆文件传回Bootcamp分区。并且操作简单。你只需要通过几次点击,就能快…

IDEA中一个被低估的功能,一键把项目代码绘制成UML类图

阅读本文大概需要 2 分钟。来自:blog.csdn.net/hy_coming/article/details/80741717最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化…

java导出生成word(类似简历导出)

最近做的项目,需要将一些信息导出到word中。在网上找了好多解决方案,现在将这几天的总结分享一下。 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间…

计算机基础:存储系统知识笔记(一)

1、存储系统定义 由一个不同容量、成本和访问时间的存储结构构成的层次结构,这些存储器通过适当的硬件和软件有机的组合在一起。 存储器的层次:CPU内部的寄存器、高速缓存Cache、主存储器、辅助存储器 2、存储器的分类 2.1 存储位置分类 内存&#xff1a…