GameplayCue

1.8k words

GameplayCueInstant

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public abstract class GameplayCueInstant : GameplayCue<GameplayCueInstantSpec>{


}
public abstract class GameplayCueInstantSpec : GameplayCueSpec
{
public GameplayCueInstantSpec(GameplayCueInstant cue, GameplayCueParameters parameters) : base(cue,
parameters)
{
}

public abstract void Trigger();
}

public abstract class GameplayCueInstantSpec<T>:GameplayCueInstantSpec where T:GameplayCueInstant
{
public readonly T cue;

public GameplayCueInstantSpec(T cue, GameplayCueParameters parameters) : base(cue, parameters)
{
this.cue = cue;
}
}

GameplayCueDurational

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

public abstract class GameplayCueDurational : GameplayCue<GameplayCueDurationalSpec>
{

}
public abstract class GameplayCueDurationalSpec : GameplayCueSpec
{
protected GameplayCueDurationalSpec(GameplayCueDurational cue, GameplayCueParameters parameters) :
base(cue, parameters)
{
}

public abstract void OnAdd();
public abstract void OnRemove();
public abstract void OnGameplayEffectActivate();
public abstract void OnGameplayEffectDeactivate();
public abstract void OnTick();
}

public abstract class GameplayCueDurationalSpec<T> : GameplayCueDurationalSpec where T : GameplayCueDurational
{
public readonly T cue;

protected GameplayCueDurationalSpec(T cue, GameplayCueParameters parameters) : base(cue, parameters)
{
this.cue = cue;
}
}

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

public class CueCameraShake : GameplayCueInstant{

public float shakePower = 0.5f;
public float shakeDuration = 0.5f;
public override GameplayCueInstantSpec CreateSpec(GameplayCueParameters parameters)
{
return new CueCameraShakeSpec(this, parameters);
}
}
public class CueCameraShakeSpec : GameplayCueInstantSpec<CueCameraShake>{

public override void Trigger()
{
CameraShake(cue.shakePower, cue.shakeDuration).Forget();
}
}