CustomEffect

Abstract Scriptable Object

Description

Custom Effects are a way to add additional functionality to each StatusEffectData. Truthfully anything can be done with them as they are just an inheritable abstract class with a coroutine, allowing for unlimited functionality. It is highly recommended to take a look at the samples for an idea of how to use them.

UniTask Support

Note that if you have UniTask in your project then the CustomEffect will use UniTasks over Coroutines. This is also included in the samples, but note that the only real difference is that there is no EffectEnd abstract method because one can just wait until cancellation is requested on the token.

Abstract Methods

Effect

A Coroutine that is started when the StatusEffect begins.

EffectEnd

A method that is invoked when the StatusEffect is stopped.

Example

using System.Collections;
using UnityEngine;
// Use StatusEffects.Custom namespace for organization.
namespace StatusEffects.Custom
{
    // Setup scriptable object in create menu.
    [CreateAssetMenu(fileName = "Damage Over Time Effect", menuName = "Status Effect Framework/Custom Effects/Damage Over Time", order = 1)]
    public class DamageOverTimeEffect : CustomEffect
    {
        // Unique value for this effect example
        public float intervalSeconds = 1f;

        public override IEnumerator Effect<T>(T monoBehaviour, StatusEffect statusEffect)
        {
            // Use your own character/entity class for this
            if (monoBehaviour.TryGetComponent(out ExampleEntity entity))
                for (; ; )
                {
                    entity.health -= statusEffect.data.baseValue;
                    yield return new WaitForSeconds(intervalSeconds);
                }
        }

        public override void EffectEnd<T>(T monoBehaviour, StatusEffect statusEffect) { }
    }
}