私は自分のゲームのステータスエフェクトを作成しようとしています。例えば、時間の経過とともにプレーヤの統計に影響するものです。しかし、私は渡された変数、すなわち変更すべき変数を覚えておくことに問題があります。この場合、プレーヤーの健康状態を変更する必要がある変数と一緒にいくつかのパラメータを渡す新しいクラスをインスタンス化することによって、10秒間あなたの健康を10%減少させる状態効果があるとしましょうそれは、コンストラクタがなくなると、参照が2つの間で壊れていて、それ以降は、決して使用されない変数を編集するということです。ここで値型変数のストア参照C#
は
/// <summary>
/// Creates a status effect which ticks at specified period of time without any condition.
/// </summary>
public StatusEffect(float increase, EffectIncreaseType increaseType, float timeOfStatusEffect, float tickTime)
{
this.increase = increase;
this.endTimeOfStatusEffect = Time.time + timeOfStatusEffect;
this.tickTime = tickTime;
increaseCalculator = increaseType == EffectIncreaseType.Percentage ? increaseCalculator = (a) => (int)(increase/100f * a) : increaseCalculator = (a) => (int)increase;
}
私はステータスをインスタンス化する方法効果
だとここで私は今、それを使用する方法ですpublic bool TryTrigger(ref int affectedProperty)
{
if (condition.Invoke(affectedProperty))
{
affectedProperty += increaseCalculator.Invoke(affectedProperty);
}
return condition.Invoke(affectedProperty);
}
これに渡されるフィールドを必要とする私が最初にすべての望んではありませんメソッドTryTrigger
あなたが最初にそれを渡す必要がある変数が何であるかを知っていないはずのプロパティの第2のプロパティではなく、その後ろの変数でクラスそのものを操作してトリガを試みます。それは可能ですか?ステータスエフェクト(DoT、HoT)を作成するためのより良いアプローチはありますか?また、私は即座のステータス変更のためにこの仕事をしたいと思います。例えば、あなたの健康を1分間30%低下させますが、現在の設定がそれに適しているかどうかはわかりません。
これは、Unity環境、Asimmでは全く間違っています。 procsのためにちょうどこれを使用する... http://stackoverflow.com/a/36249404/294884 – Fattie
そしてUnityの簡単なタイマーのためにあなたはちょうど 'Invoke'か' InvokeRepeating'を使用します。 – Fattie