|
|
@@ -42,6 +42,7 @@ public class AttackController : MonoBehaviour
|
|
|
[System.Serializable]
|
|
|
public struct AttackMethod
|
|
|
{
|
|
|
+ [Header("起手式id=0,行军式id>=1")]
|
|
|
public int id;
|
|
|
[Header("攻击名称")]
|
|
|
public string attackName;
|
|
|
@@ -51,8 +52,7 @@ public class AttackController : MonoBehaviour
|
|
|
public GameObject attackEffect;
|
|
|
[Header("攻击参数")]
|
|
|
public AttackInfo attackInfo;
|
|
|
- [DisplayOnly]
|
|
|
- public float curDamage;
|
|
|
+ public AttackTrigger attackTrigger;
|
|
|
[Header("目标")]
|
|
|
public List<TargetType> targetTypes;
|
|
|
public bool canHitFly;
|
|
|
@@ -68,65 +68,66 @@ public class AttackController : MonoBehaviour
|
|
|
|
|
|
[Header("所有攻击帧事件及时间")]
|
|
|
public List<SpineAniKey> attackKeys;
|
|
|
+ public List<float> keyTimes; //所有的帧事件时间
|
|
|
+ [DisplayOnly]
|
|
|
+ public float attackTime; //攻击剩余时间
|
|
|
+ [HideInInspector]
|
|
|
+ public float attackKeyCount; //攻击进行时间
|
|
|
+ [HideInInspector]
|
|
|
+ public float nextStartKeyTime, nextEndKeyTime;
|
|
|
+ [HideInInspector]
|
|
|
+ public int curKeyNum; //当前锁定到第几个帧事件
|
|
|
|
|
|
[Header("攻击类型")]
|
|
|
public AttackType attackType;
|
|
|
|
|
|
[Header("攻击参数")]
|
|
|
+ [DisplayOnly]
|
|
|
+ public int curDamage;
|
|
|
+ [HideInInspector]
|
|
|
public bool canHitFly;
|
|
|
+ [HideInInspector]
|
|
|
public int armorPiercing; //穿甲率
|
|
|
- public List<AttackInfo> Attack_summonInfos;
|
|
|
- public List<AttackInfo> Attack_marchInfos;
|
|
|
- //以下信息不在面板显示
|
|
|
+ [HideInInspector]
|
|
|
+ public AttackInfo attackInfo;
|
|
|
[HideInInspector]
|
|
|
public GameObject addAttackEffect;
|
|
|
- [DisplayOnly]
|
|
|
- public int[] curDamage1;
|
|
|
- [DisplayOnly]
|
|
|
- public int[] curDamage2;
|
|
|
|
|
|
[Header("攻击范围")]
|
|
|
- public AttackTrigger attackTrigger;
|
|
|
- public List<float> keyTimes; //所有的帧事件时间
|
|
|
- [DisplayOnly]
|
|
|
- public float attackTime; //攻击剩余时间
|
|
|
- //以下信息不在面板显示
|
|
|
- [HideInInspector]
|
|
|
- public float attackKeyCount; //攻击进行时间
|
|
|
[HideInInspector]
|
|
|
- public float nextStartKeyTime, nextEndKeyTime;
|
|
|
- [HideInInspector]
|
|
|
- public int curKeyNum; //当前锁定到第几个帧事件
|
|
|
+ public AttackTrigger attackTrigger;
|
|
|
[HideInInspector]
|
|
|
public bool isAttackTriggerOn = false; //当前Attack Trigger是否开启
|
|
|
|
|
|
[Header("远程单位")]
|
|
|
+ [HideInInspector]
|
|
|
public GameObject bulletPrefab; //子弹
|
|
|
+ [HideInInspector]
|
|
|
public List<Transform> shootPos; //子弹发射位置
|
|
|
+ [HideInInspector]
|
|
|
public bool shootTrack = false; //是否初始时瞄准目标
|
|
|
+ [HideInInspector]
|
|
|
public bool shootAlwaysTrack = false; //是否始终追踪
|
|
|
|
|
|
[Header("目标")]
|
|
|
+ [HideInInspector]
|
|
|
public List<TargetType> targetTypes;
|
|
|
[DisplayOnly]
|
|
|
public List<Character> beTargetCharacter = new List<Character>(); //被哪些锁定
|
|
|
- public float getDistanceOffset = 0f;
|
|
|
+ //public float getDistanceOffset = 0f;
|
|
|
|
|
|
[Header("攻击模式")]
|
|
|
- public List<AttackMethod> attackMethod;
|
|
|
+ public AttackMethod[] attackMethod;
|
|
|
+ [DisplayOnly]
|
|
|
+ public AttackMethod curAttackMethod;
|
|
|
|
|
|
public void Init()
|
|
|
{
|
|
|
owner = GetComponent<Character>();
|
|
|
- curDamage1 = new int[Attack_summonInfos.Count];
|
|
|
- for (int i = 0; i < Attack_summonInfos.Count; i++)
|
|
|
- {
|
|
|
- curDamage1[i] = Attack_summonInfos[i].damage;
|
|
|
- }
|
|
|
- curDamage2 = new int[Attack_marchInfos.Count];
|
|
|
- for (int i = 0; i < Attack_marchInfos.Count; i++)
|
|
|
+ if (attackMethod.Length > 0)
|
|
|
{
|
|
|
- curDamage2[i] = Attack_marchInfos[i].damage;
|
|
|
+ attackInfo = attackMethod[0].attackInfo;
|
|
|
+ curDamage = attackInfo.damage;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -138,10 +139,29 @@ public class AttackController : MonoBehaviour
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void ChooseAttack()
|
|
|
+ public void ChooseAttack(int id)
|
|
|
{
|
|
|
-
|
|
|
- }
|
|
|
+ //默认起手式只使用一次,id=0为起手式
|
|
|
+ if (attackMethod[0].id == 0)
|
|
|
+ {
|
|
|
+ curAttackMethod = attackMethod[id];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ curAttackMethod = attackMethod[id - 1];
|
|
|
+ }
|
|
|
+ attackType = curAttackMethod.attackType;
|
|
|
+ canHitFly = curAttackMethod.canHitFly;
|
|
|
+ armorPiercing = curAttackMethod.armorPiercing;
|
|
|
+ attackInfo = curAttackMethod.attackInfo;
|
|
|
+ curDamage = attackInfo.damage;
|
|
|
+ attackTrigger = curAttackMethod.attackTrigger;
|
|
|
+ bulletPrefab = curAttackMethod.bulletPrefab;
|
|
|
+ shootPos = curAttackMethod.shootPos;
|
|
|
+ shootTrack = curAttackMethod.shootTrack;
|
|
|
+ shootAlwaysTrack = curAttackMethod.shootTrack;
|
|
|
+ targetTypes = curAttackMethod.targetTypes;
|
|
|
+}
|
|
|
|
|
|
public void SetNextKeyTimes()
|
|
|
{
|
|
|
@@ -159,8 +179,7 @@ public class AttackController : MonoBehaviour
|
|
|
if (attackType == AttackType.Shoot)
|
|
|
{
|
|
|
attackTrigger.isShoot = true;
|
|
|
- attackTrigger.GetComponent<Collider>().enabled = false;
|
|
|
- attackTrigger.type = AttackTrigger.attackTpye.summon;
|
|
|
+ attackTrigger.type = AttackTrigger.attackType.summon;
|
|
|
}
|
|
|
attackTime = owner.totalAttack_summonTime;
|
|
|
attackKeyCount = 0;
|
|
|
@@ -183,15 +202,15 @@ public class AttackController : MonoBehaviour
|
|
|
switch (attackType)
|
|
|
{
|
|
|
case AttackType.Melee:
|
|
|
- attackTrigger.damage = curDamage1[0];
|
|
|
- attackTrigger.changeHurt = Attack_summonInfos[0].changeHurt;
|
|
|
- attackTrigger.repelValue = Attack_summonInfos[0].repelValue;
|
|
|
- Vector3 attackDir = Attack_summonInfos[0].attackDir.normalized;
|
|
|
+ attackTrigger.damage = curDamage;
|
|
|
+ attackTrigger.changeHurt = attackInfo.changeHurt;
|
|
|
+ attackTrigger.repelValue = attackInfo.repelValue;
|
|
|
+ Vector3 attackDir = attackInfo.attackDir.normalized;
|
|
|
if (owner.bodyTrans.localScale.x < 0)
|
|
|
{
|
|
|
attackDir.x = -attackDir.x;
|
|
|
}
|
|
|
- attackTrigger.force = attackDir * Attack_summonInfos[0].force;
|
|
|
+ attackTrigger.force = attackDir * attackInfo.force;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
@@ -199,7 +218,7 @@ public class AttackController : MonoBehaviour
|
|
|
owner.ChangeState(CharacterState.Attack);
|
|
|
}
|
|
|
|
|
|
- public virtual void Attack_march()
|
|
|
+ public virtual void Attack_march(int id)
|
|
|
{
|
|
|
Vector3 leftDir = owner.GetMoveDir();
|
|
|
if (leftDir.x > 0.3f)
|
|
|
@@ -216,13 +235,12 @@ public class AttackController : MonoBehaviour
|
|
|
owner.Turn();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ ChooseAttack(id);
|
|
|
owner.ani.Play("attack_march", 0, 0);
|
|
|
if (attackType == AttackType.Shoot)
|
|
|
{
|
|
|
attackTrigger.isShoot = true;
|
|
|
- attackTrigger.GetComponent<Collider>().enabled = false;
|
|
|
- attackTrigger.type = AttackTrigger.attackTpye.march;
|
|
|
+ attackTrigger.type = AttackTrigger.attackType.march;
|
|
|
}
|
|
|
attackTime = owner.totalAttack_marchTime;
|
|
|
attackKeyCount = 0;
|
|
|
@@ -241,15 +259,15 @@ public class AttackController : MonoBehaviour
|
|
|
}
|
|
|
curKeyNum = 0;
|
|
|
SetNextKeyTimes();
|
|
|
- attackTrigger.damage = curDamage2[0];
|
|
|
- attackTrigger.changeHurt = Attack_marchInfos[0].changeHurt;
|
|
|
- attackTrigger.repelValue = Attack_marchInfos[0].repelValue;
|
|
|
- Vector3 attackDir = Attack_marchInfos[0].attackDir.normalized;
|
|
|
+ attackTrigger.damage = curDamage;
|
|
|
+ attackTrigger.changeHurt = attackInfo.changeHurt;
|
|
|
+ attackTrigger.repelValue = attackInfo.repelValue;
|
|
|
+ Vector3 attackDir = attackInfo.attackDir.normalized;
|
|
|
if (owner.bodyTrans.localScale.x < 0)
|
|
|
{
|
|
|
attackDir.x = -attackDir.x;
|
|
|
}
|
|
|
- attackTrigger.force = attackDir * Attack_marchInfos[0].force;
|
|
|
+ attackTrigger.force = attackDir * attackInfo.force;
|
|
|
|
|
|
|
|
|
owner.ChangeState(CharacterState.Attack);
|
|
|
@@ -257,16 +275,6 @@ public class AttackController : MonoBehaviour
|
|
|
|
|
|
public virtual void AttackShootEvent(int attackId, int shootId)
|
|
|
{
|
|
|
- AttackInfo attackInfo;
|
|
|
- if (attackId == 1)
|
|
|
- {
|
|
|
- attackInfo = Attack_summonInfos[shootId];
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- attackInfo = Attack_marchInfos[shootId];
|
|
|
- attackInfo.damage = curDamage2[0];
|
|
|
- }
|
|
|
GameObject bulletObj = PoolManager.Instantiate(bulletPrefab);
|
|
|
Bullet bullet = bulletObj.GetComponent<Bullet>();
|
|
|
Vector3 attackDir = attackInfo.attackDir.normalized;
|