【发布时间】:2016-08-20 18:49:04
【问题描述】:
我正在尝试为我的游戏创建状态效果,例如,这些效果会随着时间的推移影响玩家的统计数据。但是,我无法记住传递的变量,即应该修改的变量。假设您有一些状态效果,可以在 10 秒内将您的健康降低 10%,我这样做的方式是实例化一个新类,将一些参数连同在这种情况下需要修改的变量一起传递给玩家的健康,但是问题是一旦构造函数消失了,这两个之间的引用就会被破坏,从那时起,我只需编辑一些从未使用过的变量。
这是我如何实例化状态效果
/// <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,而不是一个属性,其次你不应该知道什么变量是需要的,你应该把它传入开始,然后尝试使用类本身在后台使用该变量来触发它。那可能吗 ?有没有更好的方法来制作状态效果(DoT,HoT)?此外,我想让这项工作用于即时状态更改,例如在 1 分钟内将你的生命值降低 30%,但我不确定我当前的设置是否适合。
【问题讨论】:
-
这在 Unity 环境中是完全错误的,Asimm。对于 procs 只需使用这个 ... stackoverflow.com/a/36249404/294884
-
对于 Unity 中的琐碎计时器,您只需使用
Invoke或InvokeRepeating。
标签: c# unity3d parameters reference value-type