Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确的ECS(统一)缓冲/去缓冲系统结构问题_C#_Unity3d_Optimization_Buffer_Entity - Fatal编程技术网

C# 正确的ECS(统一)缓冲/去缓冲系统结构问题

C# 正确的ECS(统一)缓冲/去缓冲系统结构问题,c#,unity3d,optimization,buffer,entity,C#,Unity3d,Optimization,Buffer,Entity,修改器=抛光/去毛刺 我目前正在将我的项目从OOP升级到ECS。并且想把旧的换成新的更快的ECS 当前系统的工作方式:基本抽象类Modifier具有一个更新函数,修改器使用该函数来更新其计时器/随时间应用效果等。 还有一些简单的修饰符类,比如AttackSpeedModifier,它们实现了modifier,只关心它们使用的值以及如何使用它们。像这样: protected override void ApplyEffect() { Target.AttackSpeed += Value;

修改器=抛光/去毛刺

我目前正在将我的项目从OOP升级到ECS。并且想把旧的换成新的更快的ECS

当前系统的工作方式:基本抽象类
Modifier
具有一个更新函数,修改器使用该函数来更新其计时器/随时间应用效果等。 还有一些简单的修饰符类,比如
AttackSpeedModifier
,它们实现了
modifier
,只关心它们使用的值以及如何使用它们。像这样:

protected override void ApplyEffect()
{
    Target.AttackSpeed += Value;
}
我正在努力寻找一个只使用结构(值类型)的ECS buff/debuff实现。我目前的想法/方法如下:

  • 为每个buff制作一个单独的组件:
  • 这种方法的问题是,每个修改器都需要自己的独立系统&这将产生大量代码重复。而且每次移除组件的效果也不太理想

  • 或者制作一个buff/debuff缓冲区,并有一个“master”元素:
  • 第二种方法的问题是,我需要基于“ModifierType”或其他方式实现功能。而不是重写基类。而且会有很多冗余数据。一个简单的永久速度buff将只使用3-4个变量,而close结构将有更多的变量,因为所有其他修改器都需要它们

    我是否遗漏了什么,和/或是否有更好的方法来制作这样一个复杂的系统?我现在对他们两个都不太满意。 还有一个“ComboModifier”在特定的修饰符集上触发,但这是另一天/另一个想法的主题

    public struct ExampleFireAttackBuff : IComponentData
    {
        public float Damage;
        public float Cooldown;
    }
    
    public struct ModifierElement : IBufferElementData
    {
        public ModifierType ModifierType;
        public float Value1;
        public float Value2;
        public float Value3;
        public float Duration;
        public bool IsStackable; 
        etc...
    }