Files
gold_dolphin/unity/Assets/Script/CombaSyatem/CombatAblilityBase.cs
2026-06-20 19:35:25 +08:00

93 lines
2.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum AblityClass
{
MelleeAttack,
YuanChenAttack
}
public abstract class CombatAblilityBase : ScriptableObject
{
[SerializeField, Header("技能名称")] protected string abilityName;
[SerializeField, Header("技能ID")] protected int abilityID;
[SerializeField, Header("技能CD")] protected float abilityCDTime;
[SerializeField, Header("技能类型")] protected AblityClass abilityClass;
[SerializeField, Header("技能音效")] protected AudioClip abilityVFX;
[SerializeField, Header("技能可用")] protected bool abilityIsDone;
[SerializeField, Header("技能释放距离")] protected float abilityDistance;
[SerializeField, Header("技能个数")] protected int maxAbilityCount=0;
protected int currentAbilityCount = 0;
[SerializeField, Header("技能释放偏移")] protected List<Vector2> abilityOffest;
private Transform pollName;
protected BossAI ai;
protected Animator _animator;
public abstract void UpdateAblity(Transform target=null);
public void UseAblity(CombatAblilityBase ablility)
{
pollName = GameObject.Find("TimerRoot").transform;
abilityIsDone = false;
//开始计时
string timerPath = "Perfab/Timer";
GameObject timer = Resloader.Load<GameObject>(timerPath);//寻找预制体
GameObject go = Instantiate(timer, pollName);
if(ablility.abilityClass==AblityClass.MelleeAttack)
{
go.GetComponent<Timer>().CreateTime(ablility.GetAbliltyCD(), () => ablility.abilityIsDone = true, false);
}
else if (ablility.abilityClass == AblityClass.YuanChenAttack)
{
go.GetComponent<Timer>().CreateTime(ablility.GetAbliltyCD(), () => { ablility.abilityIsDone = true;
ablility.currentAbilityCount = maxAbilityCount;
}, false);
}
}
public void Init(BossAI boss,Animator ani)
{
ai = boss;
_animator = ani;
abilityIsDone = true;
currentAbilityCount = maxAbilityCount;
}
public bool GetAbliltyIsDone()
{
return abilityIsDone;
}
public void SetAbliltyIsDone(bool isDone)
{
abilityIsDone = isDone;
}
public AblityClass GetAbliltyClass()
{
return abilityClass;
}
public string GetAbliltyName()
{
return abilityName;
}
public float GetAbliltyCD()
{
return abilityCDTime;
}
public float GetAbliltyDis()
{
return abilityDistance;
}
public List<Vector2> GetAbliltyOffest()
{
return abilityOffest;
}
public AudioClip GetAbliltyVFX()
{
return abilityVFX;
}
}