Unity服务器端代码的选择问题,有很多。本人比较喜欢用Golang。
但是从写了ZP框架之后,写BackEnd时,发现很多情况要把Client的C#代码使用Go翻译一遍,很是浪费时间。如果C#代码直接复用到BackEnd是最高效的了。在.NetCore之前其实已经有很多方案。mono.Net就是.Net的开源实现,它就是为了支持不同平台而诞生的。但它由不是MS的亲儿子,性能常常被诟病。(Unity也是使用mono.Net才实现支持不同平台的,比如Android/IOS等)
.NetCore由MS开发,可以理解为.NetFramework的跨平台版本,性能也有很大的提升,相关也可以百度一下。如果使用它做为Unity的BackEnd是啥效果呢?
本文重点测试了以下几个方面:
反射
大部分反射方法都是支持。
var t = Activator.CreateInstance(typeof(Test1));
FieldInfo[] typeInfo = t.GetType().GetFields();
foreach (var tt in typeInfo) {
var attr = tt.GetCustomAttribute<PropertyRuntimeAttribute>();
}
UnityEngine库的引入
Unity的开发很多逻辑都是使用UnityEngine库的,那后端也有很多功能能用到,比如Vector3等几何方法。我们先找到库的所在位置 ,可以在任何Unity工程中看到如下。
<ItemGroup>
<Reference Include="UnityEngine.CoreModule">
<HintPath>/Applications/Unity/Unity.app/Contents/Managed/UnityEngine/UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>/Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="LitJson">
<HintPath>Assets\Plugins\LitJson.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
我们把以上可以直接Copy到.NetC