环境搭建(TODO)
unity hub下载安装
https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.dmg
unity安装
启动Unity hub, 然后选择安装
选择一个版本
打开Unity项目
在unity hub里添加项目并打开
运行unity项目
vscode调试环境
安装插件
安装Debugger for Unity插件
C#插件
vscode打开ubase目录
调试
点击调试按钮,选择unity debugger, 然后在相应的代码添加断点即可调试
- 错误
- vscode加载项目错误
The reference assemblies for framework ".NETFramework,Version=v4.7.1" were not found
下载mono: https://www.mono-project.com/download/stable/
代码结构
插件
Assets/Plugins下是unity的插件目录,主要负责桥接包装android, iOS端的代码(Native代码)
- iOS目录负责将iOS的mm文件代码逻辑包装在类c接口里,供外部c#使用
- unity和iOS的桥接文档见 Unity和iOS之间的桥接
- Android目录相对简单些。由于c#可以通过AndroidJavaProxy,AndroidJavaObject等方式直接使用java逻辑,因而该Plugin主要用于包含相应的java模块及Unity专用的java代码
- Bridge是unity和Native的桥接模块,它负责将android, iOS插件里的代码逻辑包装在c#代码里,供其他c#代码调用。由于c#使用java代码和c代码的方式不一样,因而该插件下又分了android, iOS目录
c#库
非Plugins目录,比如AdManagers, unity的通用逻辑,可以看成是Unity的库
Unity导出的项目结构分析
iOS端
很多代码打包为静态库保存在./Libraries/libiPhone-lib.a, 比如UnityInitApplicationGraphics
Android端
更简单些,将导出的Android从Application改为libarary即可被使用,c#的代码已经被编译在assets/bin下面了
导出测试(TODO)
需要将该项目的demo程序导出为android, iOS项目才能真正测试效果
底层机制(TODO)
通信机制摘要
iOS
oc调用c#:
Unity框架库里的UnitySendMessage函数
c#调用oc
c#->c++->oc
Android
c#调用java
通过AndroidJavaObject访问Java
java调用c#
UnityPlayer.UnitySendMessage函数