- Home /
Best way to decouple character attack animations?
I'm currently making a 2D grid-based tactics game and I wanted to decouple the attack animation of my units from their monobehavior. I was thinking about having a default attack animation (which is just a tweening of the unit moving towards the enemy) and some custom attack animation for a few characters (like archers and mages, for example).
What would be the best way to do this? I thought about ScriptableObjects, but I have no idea what would be the best way to structure something like that.
Doing simple C# classes to handle this worked fine (see snippet below), but there's no way to set them in the inspector of my character prefabs.
My current Unit monobehavior:
public class Unit : MonoBehaviour {
// A bunch of attributes...
public UnitAttackAnimation attackAnimation;
}
My current implementation of an abstract UnitAttackAnimation:
public abstract class UnitAttackAnimation{
public Unit unitSelf;
public UnitAttackAnimation(Unit unit){
this.unitSelf = unit;
}
public abstract IEnumerator BeforeDamage(Unit enemy);
public abstract IEnumerator AfterDamage(Unit enemy);
}
A concrete example of an attack animation:
public class RegularAttackAnimation : UnitAttackAnimation{
public RegularAttackAnimation(Unit unit) : base(unit){}
public override IEnumerator BeforeDamage (Unit enemy){
unitSelf.transform.DOMove(enemy.transform.position, 0.1f * GameManager.Instance.globalAnimationSpeed);
yield return new WaitForSeconds(0.1f * GameManager.Instance.globalAnimationSpeed);
}
public override IEnumerator AfterDamage (Unit enemy){
unitSelf.transform.DOMove (new Vector3 (unitSelf.x, unitSelf.y), 0.15f * GameManager.Instance.globalAnimationSpeed);
yield return new WaitForSeconds(0.15f * GameManager.Instance.globalAnimationSpeed);
}
}
Your answer
Follow this Question
Related Questions
Formed puzzle piece and sense the existence of the character and enemy moving around 3 Answers
Coroutine / Switch case 1 Answer
Cannot get animation to play until finish without holding down the button 1 Answer
Why can MonoBehavior.Start() return an IEnumerator? 3 Answers
Help with Character Animation. 1 Answer