83 lines
1.7 KiB
Markdown
83 lines
1.7 KiB
Markdown
|
####项目架构与说明
|
||
|
>>Artists 项目专用文件地址
|
||
|
>>BITKit 工具包,通常不需要动
|
||
|
>>Mods 主要存放DLC等内容
|
||
|
>>Plugins 插件存放地址
|
||
|
>>Standard Assets 资产包目录
|
||
|
>>StreamingAssets GDNet会用到的生成目录
|
||
|
>>Libs 项目专用类库
|
||
|
>>Fltoto Fltoto专用文件夹
|
||
|
|
||
|
#### Libs内容写法
|
||
|
#####首先,你需要在脚本的程序集中引用
|
||
|
>SerializeReference Extensions
|
||
|
#####接着定义接口
|
||
|
~~~CSharp
|
||
|
public interface IAction
|
||
|
{
|
||
|
void Excute();
|
||
|
}
|
||
|
~~~
|
||
|
#####新建类,并实现接口
|
||
|
~~~CSharp
|
||
|
[System.Serializable]
|
||
|
public class BITAction:IAction
|
||
|
{
|
||
|
public void Excute()
|
||
|
{
|
||
|
Debug.Log("BIT执行了该任务")
|
||
|
}
|
||
|
}
|
||
|
[System.Serializable]
|
||
|
public class FltotoAction:IAction
|
||
|
{
|
||
|
public void Excute()
|
||
|
{
|
||
|
Debug.Log("Fltoto执行了该任务")
|
||
|
}
|
||
|
}
|
||
|
~~~
|
||
|
#####最后控制器会这么调用接口
|
||
|
~~~CSharp
|
||
|
[SerializeReference, SubclassSelector]
|
||
|
public IAction action;
|
||
|
void Start()
|
||
|
{
|
||
|
//执行该任务
|
||
|
action.Excute();
|
||
|
}
|
||
|
~~~
|
||
|
#####这就是我们如何利用接口进行解耦
|
||
|
~~~CSharp
|
||
|
//物品容器接口
|
||
|
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");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
~~~
|