BITFALL/Assets
CortexCore b743407724 1 2025-03-14 20:36:42 +08:00
..
Artists 1 2025-03-14 20:36:42 +08:00
CatwalkKit 1 2025-03-14 20:32:54 +08:00
Chernobyl 1 2025-03-14 20:36:42 +08:00
Final Form Studio
NuGet
Packages
Plugins
Polaris Exported
Resources
Samples
SciFi Warehouse Kit
Settings
Standard Assets 1 2025-03-14 20:32:54 +08:00
TheTalesFactory 1 2025-03-14 20:32:54 +08:00
Tokyo_Street 1 2025-03-14 20:32:54 +08:00
_Demo
_Scripts
_TerrainData
vrbn_studios
Artists.meta
AssetBundleCollectorSetting.asset
AssetBundleCollectorSetting.asset.meta
Assets.index
Assets.index.meta
CatwalkKit.meta
Chernobyl.meta
Final Form Studio.meta
FolderIcons.asset
FolderIcons.asset.meta
Generate.meta
InitTestScene638457010046051900.unity
InitTestScene638457010046051900.unity.meta
Material Palette.asset
Material Palette.asset.meta
NuGet.meta
Packages.meta
Plugins.meta
Polaris Exported.meta
ReadMe.md
ReadMe.md.meta
Resources.meta
Samples.meta
SciFi Warehouse Kit.meta
Settings.meta
Standard Assets.meta
TheTalesFactory.meta
Tokyo_Street.meta
UnityDefaultRuntimeTheme.tss
UnityDefaultRuntimeTheme.tss.meta
_Demo.meta
_Scripts.meta
_TerrainData.meta
vrbn_studios.meta

ReadMe.md

####项目架构与说明

Artists 项目专用文件地址 BITKit 工具包,通常不需要动 Mods 主要存放DLC等内容 Plugins 插件存放地址 Standard Assets 资产包目录 StreamingAssets GDNet会用到的生成目录 Libs 项目专用类库 Fltoto Fltoto专用文件夹

Libs内容写法

#####首先,你需要在脚本的程序集中引用

SerializeReference Extensions #####接着定义接口

public interface IAction
{
    void Excute();
}

#####新建类,并实现接口

[System.Serializable]
public class BITAction:IAction
{
    public void Excute()
    {
        Debug.Log("BIT执行了该任务")
    }
}
[System.Serializable]
public class FltotoAction:IAction
{
    public void Excute()
    {
        Debug.Log("Fltoto执行了该任务")
    }
}

#####最后控制器会这么调用接口

[SerializeReference, SubclassSelector]
public IAction action;
void Start()
{
    //执行该任务
    action.Excute();
}

#####这就是我们如何利用接口进行解耦

//物品容器接口
public interface IContainer
{
    bool AddItem();
    bool RemoveItem();
    bool TryGetItem(Guid key,out var item);
}
//武器控制器
public class GunController
{
    [SerializeReference, SubclassSelector]
    public IContainer container;
    void TryFire()
    {
        if(container.TryGetItem(ammo,out ammo))
        {
            if(ammo.count>1)
            {
                Fire();
            }else
            {
                Jam();
            }
        }
        else
        {
            PlayVoice("没子弹了呀");
            SwitchEquip("Hand");
        }
    }
}