내 게임에 대한 상태 효과를 만들려고합니다. 예를 들어 시간 경과에 따른 플레이어 통계에 영향을 미치는 것들입니다. 그러나 전달 된 변수, 즉 수정해야하는 변수를 기억하는 데 문제가 있습니다. 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
이 아닌 속성 중 두 번째는 시작시에 전달해야하는 모든 변수가 무엇인지 알 필요가 없다는 것입니다. 그런 다음 그 변수와 함께 작업하는 클래스를 후행 단계에서 트리거하려고 시도하십시오. 그게 가능하니? 상태 효과 (DoT, HoT)를 만들기위한 더 나은 접근법이 있습니까? 또한 예를 들어 인스턴트 상태 변경을 위해이 작업을하고 싶습니다. 예를 들어 1 분 동안 30 %의 건강을 줄이거 나 현재 설정이 잘되어 있는지 확실하지 않습니다.
이것은 Unity 환경에서 완전히 잘못되었습니다. procs에 대해서만 사용하십시오 ... http://stackoverflow.com/a/36249404/294884 – Fattie
그리고 Unity의 사소한 타이머의 경우에는'Invoke' 또는'InvokeRepeating'을 사용하면됩니다. – Fattie