LuBan作为工具直接放在ET目录

ET/LuBan

image-20230713225908236

客户端

GenClient.bat配置如下:

set GEN_CLIENT=dotnet .\Tools\Luban.ClientServer\Luban.ClientServer.dll
set CLIENT_CODE =..\Unity\Codes\Model\Generate\LuBan\Code #代码生成路径
set CLIENT_DATA =..\Unity\Codes\Model\Generate\LuBan\Data #json生成路径

%GEN_CLIENT% -j cfg --^
 -d Defines\__root__.xml ^
 --input_data_dir Datas ^
 --output_data_dir %CLIENT_DATA %^
 --output_code_dir %CLIENT_CODE %^
 --gen_types code_cs_unity_json,data_json ^
 -s client
pause

在数据层添加相应的组件

Model/Module/LuBan/LuBanComponent

[ComponentOf(typeof (Scene))]
public class LubanComponent: Entity, IAwake,IDestroy
{
    public Tables Tables;
    public static LubanComponent Instance;
}

在对应的HotFix层添加对应的System,为了兼容服务器一键使用,所以用宏区分一下代码

using System.IO;
#if SERVER
using System.Text.Json;
#else
using SimpleJSON;
#endif
using UnityEngine;

namespace ET
{
    [FriendClass(typeof (LubanComponent))]
    public static class LuBanSystem
    {
        [ObjectSystem]
        public class LuBanAwakeSystem: AwakeSystem<LubanComponent>
        {
            public override void Awake(LubanComponent self)
            {
                LubanComponent.Instance = self;
            }
        }

        [ObjectSystem]
        public class LuBanDestroySystem: DestroySystem<LubanComponent>
        {
            public override void Destroy(LubanComponent self)
            {
                LubanComponent.Instance = null;
            }
        }

        public static void Load(this LubanComponent self)
        {
#if SERVER
            self.Tables = new cfg.Tables(file => 
           JsonDocument.Parse(File.ReadAllBytes("../Server/Model/Generate/LuBan/Data/" + file + ".json")).RootElement);
#else
            self.Tables = new cfg.Tables(file => 
          JSON.Parse(File.ReadAllText($"{Application.dataPath}/../Codes/Model/Generate/LuBan/Data/" + file + ".json")));
#endif
        }
    }
}

在初始化入口给Game.Scene添加组件,并初始化

public class AppStart_Init: AEvent<EventType.AppStart>
{
    private async ETTask RunAsync(EventType.AppStart args)
    {
        ...
        Game.Scene.AddComponent<LubanComponent>();
        LubanComponent.Instance.Load();
    }
}

此时已经可以使用LuBan了

服务端

GenServer.bat配置如下,然后生成一下

set GEN_CLIENT=dotnet .\Tools\Luban.ClientServer\Luban.ClientServer.dll
set SERVER_CODE=..\Server\Model\Generate\LuBan\Code
set SERVER_DATA=..\Server\Model\Generate\LuBan\Data

%GEN_CLIENT% -j cfg --^
 -d Defines\__root__.xml ^
 --input_data_dir Datas ^
 --output_data_dir %SERVER_DATA%^
 --output_code_dir %SERVER_CODE%^
 --gen_types code_cs_dotnet_json,data_json ^
 -s server
pause

在ThirdParty中新建一个工程

image-20230713232448022

拷贝LuBan示例工程中DotNet5所需要的核心代码到LuBanLib中

Projects\Csharp_DotNet5_json\Core

image-20230713232622078

然后在Server.Model以HotFix中分别添加对客户端代码LuBan代码的引用,此时会报错,因为我们服务器找不到LuBanLib

手动添加即可

image-20230713234909184

image-20230713235100874