安卓平台是基于Linux,所以动态库是so
后缀,在AndroidStudio 中生成动态库有两种方式,一种是通过cmake
,另一种是通过ndk-build
,本文采用的是ndk-build
,目前AS对于这两种方式都支持,但是对于新的项目,官方建议采用CMake来构建。
理解async/await异步模型(一)
大概从 Unity 2017 开始就正式支持 .Net 4.x
版本,很多新的语法都支持了,包括 dynamic
动态类型、async/await
异步模型,其中对 async/await
的支持尤其重要,虽然之前可以使用协程来进行异步编程,但是协程存在很多限制,最突出的两个问题是,没有返回值,以及异常处理问题,async/await
的出现,很好的解决的这些问题,但是同时又带了一些新的问题。
async/await
异步模型使用起来很简单,但是要真正的完全理解,其中涉及到很多难理解的概念,比如多线程、线程池、同步上下文、任务调度等等,对于初学者,这些单个概念都不太好理解,MSDN
上面提供的资料也不是很多,同时,本人的能力水平有限,其中难免存在纰漏,但是我还是尽可能的将我的理解表述清楚,便于读者理解。
下面文章从一个简单的例子出发,首先了解一下 async/await
是如何实现异步的。
C#中反射获取基类静态成员
今天在实现单例的时候,通过继承泛型基类,子类型就可以拥有静态 Instance 属性成员,但是当我通过子类类型获取 Instance 对象时,却没有办法获取到,原因是因为反射时,虽然会在继承的基类中进行查找,但是只限于实例成员,对于静态成员是不进行继承查找的。
Unity WebGL 开发(二)
在前文中,主要写了一些关于 WebGL 发布、调试、以及开发限制等问题,本文主要是关于 WebGL平台中的图形渲染、网络、音频相关的东西,WebGL 是在 OpenGL ES 发展来的,WebGL 1.0 基于 OpenGL ES 2.0,WebGL 2.0 基于 OpenGL ES 3.0,目前主流火狐和 Chrome 已经支持 WebGL 2.0,而 Safari 和 Edge 还不支持 2.0。
Unity WebGL 开发(一)
Unity3D 中的 WebGL 平台旨在替代以前的 UnityPlayer 平台,随着目前多数浏览器都已经能够很好的支持 Html5,因此 WebGL 也更加成熟,为了将项目发布为 WebGL 平台,在打包的时候,Unity 利用 Emscripten 工具链,将引擎的 C/C++ 代码转换为 WebAssembly(一种浏览器可以执行的格式,更加高效),而 C#代码则需要先通过 IL2CPP
转换为 C/C++代码,在转换为 WebAssembly。
VSCode+CMake搭建OpenGL开发环境
OpenGL跨平台开发环境很多种,自动化构建的话首选 CMake
,编辑器方面可选的比较多,个人非常喜欢 Jetbrains
的 CLion
,代码提示和自动补全功能非常强大,目前没有提供社区版本,需要购买激活,另一个比较推荐的就是微软的 VSCode
,它的插件非常丰富,非常轻量,并且免费开源,下面介绍一下基于 VSCode
和CMake
搭建 OpenGL
的开发环境,我这里的的操作系统为 OSX
。
关于Object.Destry和空检查
在 Unity3D 中总是要进行对象的销毁和Null 检查,虽然经常用,但是其中的一些细节,如果不太注意,很有可能就会踩坑,下面就总结一下 UnityEngine.Object
类型的销毁,以及空值检测相关问题。
C#与非托管DLL进行交互
在做Unity开发时,经常会需要调用 C/C++ 编译的非托管库,包括目前常见的 Lua 库,比如 ToLua、XLua 都是通过 C 封装完接口,然后编译成各个平台的动态库,才能在Unity中进行使用,P/Invoke 是.Net 平台提供的非托管与托管通信的一种服务,通过它能够非常方便的完成非托管库的接入,当然这个过程中有很多需要注意的地方,希望通过阅读本文,能够少走一些弯路。