欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何将Luban与ET6.0连接?步骤详解

最编程 2024-08-05 15:18:45
...

Luban是一个超级强大且易用的游戏配置解决方案,而且免费开源无限制,具体了解可跳转Github:https://github.com/focus-creative-games/luban,这里我只说明自己在ET6.0框架接入Luban的过程。

基本步骤查看官方说明:https://focus-creative-games.github.io/lubandoc/start_up.html


1、下载文件

从luban_examples下载Lib文件和案例文件(https://github.com/focus-creative-games/luban_examples)


2、生成数据

找到MiniDesignerConfigsTemplate目录,整个复制到自己的项目,比如根目录,改个名叫Config,里面已经包含了一个示例item.xlsx。

从\luban_examples\Tools目录复制Luban.ClientServer到ET项目目录下的Tools目录。

从luban_examples\Projects\Csharp_Unity_bin\Assets找C#对应的LubanLib,ByteBuf.cs放到Unity.Mono/Core,其他放到Unity.Model/Core

准备转表脚本,随便放到哪个目录,根目录或者Config都可以,方便就行

set WORKSPACE=..\

set GEN_CLIENT=%WORKSPACE%\Tools\Luban.ClientServer\Luban.ClientServer.exe
set CONF_ROOT=%WORKSPACE%\Config

@ECHO =======================SERVER==========================
%GEN_CLIENT% --template_search_path %CONF_ROOT%\CustomTemplate -j cfg --^
 -d %CONF_ROOT%\Defines\__root__.xml ^
 --input_data_dir %CONF_ROOT%\Datas ^
 --output_code_dir %WORKSPACE%\Server\Model\Generate\Config ^
 --output_data_dir %WORKSPACE%\Server\ConfigBin ^
 --gen_types code_cs_bin,data_bin ^
 -s server


@ECHO =======================CLIENT==========================
%GEN_CLIENT% --template_search_path %CONF_ROOT%\CustomTemplate -j cfg --^
 -d %CONF_ROOT%\Defines\__root__.xml ^
 --input_data_dir %CONF_ROOT%\Datas ^
 --output_code_dir %WORKSPACE%\Unity\Codes\Model\Generate\Config ^
 --output_data_dir %WORKSPACE%\Unity\Assets\Bundles\ConfigBin ^
 --gen_types code_cs_bin,data_bin ^
 -s client


@ECHO =======================JSONONLYVIEW==========================
%GEN_CLIENT% -j cfg --^
 -d %CONF_ROOT%\Defines\__root__.xml ^
 --input_data_dir %CONF_ROOT%\Datas ^
 --output_data_dir %CONF_ROOT%\Output_Json\Server ^
 --gen_types data_json ^
 -s server

%GEN_CLIENT% -j cfg --^
 -d %CONF_ROOT%\Defines\__root__.xml ^
 --input_data_dir %CONF_ROOT%\Datas ^
 --output_data_dir %CONF_ROOT%\Output_Json\Client ^
 --gen_types data_json ^
 -s client

pause

3、到此为止应该可以正常的转表了,luban生成的文件分为Table和Bean两种类型,具体文件名是自己在Define的xml文件里面,Excel也可以,看luban教程。

一般来说Table会命名为TbXXX格式,Bean自己看着办,Table关联的Bean可以是XXXConfig,按实际需要和习惯。

如果按ET风格,想完全一致,则Table可以命名为XXXConfigCategory,Table关联的Bean会命名为XXXConfig,其他Bean看情况。


4、调整ConfigComponent组件

调用配置的代码调整为ConfigComponent.Instance.Tables.TbXXX.Get

public class ConfigComponent : Entity, IAwake, IDestroy
{
    public static ConfigComponent Instance;
    public Tables Tables;
}
public static class ConfigComponentSystem
{
    public static void LoadOneConfig(this ConfigComponent self, Type configType)
    {
    }

    public static async ETTask LoadAsync(this ConfigComponent self, Func<string, ByteBuf> loadFunc)
    {
        self.Tables = new Tables(loadFunc);
        await ETTask.CompletedTask;
    }
}

5、调整服务端和客户端的AppStart_Init.cs,替换ET原本的加载配置代码

服务端

await ConfigComponent.Instance.LoadAsync((file) =>
{
    return new ByteBuf(File.ReadAllBytes($"../Server/ConfigBin/{file}.bytes"));
});

客户端

public class AppStart_Init : AEvent<EventType.AppStart>
{
    protected override async ETTask Run(EventType.AppStart args)
    {
        Game.Scene.AddComponent<TimerComponent>();
        Game.Scene.AddComponent<CoroutineLockComponent>();

        Game.Scene.AddComponent<ResourcesComponent>();
        //await ResourcesComponent.Instance.LoadBundleAsync("config.unity3d");

        //加载配置
        Game.Scene.AddComponent<ConfigComponent>();
        await ConfigComponent.Instance.LoadAsync((file) =>
        {
            return new ByteBuf(File.ReadAllBytes($"../Unity/Assets/Bundles/ConfigBin/{file}.bytes"));
        });

        //ResourcesComponent.Instance.UnloadBundle("config.unity3d");

        Game.Scene.AddComponent<OpcodeTypeComponent>();
        Game.Scene.AddComponent<MessageDispatcherComponent>();

        Game.Scene.AddComponent<NetThreadComponent>();
        Game.Scene.AddComponent<SessionStreamDispatcher>();
        Game.Scene.AddComponent<ZoneSceneManagerComponent>();

        Game.Scene.AddComponent<GlobalComponent>();

        Game.Scene.AddComponent<AIDispatcherComponent>();
        //await ResourcesComponent.Instance.LoadBundleAsync("unit.unity3d");

        Scene zoneScene = SceneFactory.CreateZoneScene(1, "Game", Game.Scene);

        await Game.EventSystem.PublishAsync(new EventType.AppStartInitFinish() { ZoneScene = zoneScene });
    }
}

6、调整StartProcesConfig和StartSceneConfig的partial类

public override void EndInit() 调整为 partial void PostInit()

public override void AfterEndInit() 调整为 partial void PostResolve()

注意这两个partial类的命名空间要和Tb类保持一致

附带我的Server相关Define文件

<module name="StartServer">

    <!-- StartZoneConfig -->
    <bean name="StartZoneConfig">
        <var name="id" type="int"/>
        <var name="dB_connection" type="string"/>
        <var name="dB_name" type="string"/>
    </bean>
    
    <table name="TbStartZoneConfig" value="StartZoneConfig" input="Server/StartZoneConfig.xlsx"/>

    <!-- StartMachineConfig -->
    <bean name="StartMachineConfig">
        <var name="id" type="int"/>
        <var name="inner_iP" type="string"/>
        <var name="outer_iP" type="string"/>
        <var name="watcher_port" type="int"/>
    </bean>
    
    <table name="TbStartMachineConfig" value="StartMachineConfig" input="Server/StartMachineConfig.xlsx"/>

    <!-- StartProcessConfig -->
    <bean name="StartProcessConfig">
        <var name="id" type="int"/>
        <var name="machine_id" type="int"/>
        <var name="inner_port" type="int"/>
        <var name="app_name" type="string"/>
    </bean>
    
    <table name="TbStartProcessConfig" value="StartProcessConfig" input="Server/StartProcessConfig.xlsx"/>
    
    <!-- StartSceneConfig -->
    <bean name="StartSceneConfig">
        <var name="id" type="int"/>
        <var name="process" type="int"/>
        <var name="zone" type="int"/>
        <var name="scene_type" type="string"/>
        <var name="name" type="string"/>
        <var name="outer_port" type="string"/>
    </bean>
    
    <table name="TbStartSceneConfig" value="StartSceneConfig" input="Server/StartSceneConfig.xlsx"/>
    
    <!-- ServerInfoConfig -->
    <bean name="ServerInfoConfig">
        <var name="id" type="int" />
        <var name="server_name" type="string" />
    </bean>
    
    <table name="TbServerInfoConfig" value="ServerInfoConfig" input="Server/ServerInfoConfig.xlsx"/>
    
</module>

7、剩下的工作就是比较繁琐的ConfigComponent调用处的手动替换,一个个排错,就不多说了

原文地址:https://www.cnblogs.com/liuzhen0975/p/16037997.html

推荐阅读