public override void Initialize() { canBeFighted = GetComponent <CanBeFighted>(); poolManager = GameObject.Find("PoolManager").GetComponent <PoolManager>(); if (Thing6 != "") { randomThingName[randomThingNumber] = Thing6; randomThingNumber++; } if (Thing7 != "") { randomThingName[randomThingNumber] = Thing7; randomThingNumber++; } if (Thing8 != "") { randomThingName[randomThingNumber] = Thing8; randomThingNumber++; } if (Thing9 != "") { randomThingName[randomThingNumber] = Thing9; randomThingNumber++; } if (Thing10 != "") { randomThingName[randomThingNumber] = Thing10; randomThingNumber++; } }
public override void Initialize() { base.Initialize(); playerAnim.SetSpell(this, SkillType.SelfExplosion); defencePlayer = player.GetComponent <DefencePlayer>(); canFight = player.GetComponent <CanFight>(); canBeFighted = player.GetComponent <CanBeFighted>(); }
protected virtual void Awake() { attackedCheck = GetComponent <CanBeFighted>(); if (attackedCheck == null) { Debug.LogError("在" + gameObject.name + "中,Defence组件没有找到所依赖的CanBeFighted组件"); } }
/// <summary> /// 对一个能够战斗的目标造成伤害,作为底层私有函数被调用 /// </summary> /// <param name="target">造成伤害的目标</param> /// <param name="damage">造成输入数值的伤害</param> /// <param name="interruptType">攻击打断类型,默认为无打断</param> /// <returns>返回造成了多少伤害,具体用法有待进一步讨论</returns> public int Attack(CanBeFighted target, int damage, AttackInterruptType interruptType = AttackInterruptType.NONE, ElementAbilityManager.Element element = ElementAbilityManager.Element.NULL) { if (!isInitialized) { Debug.LogError("在" + gameObject.name + "物体中,CanFight组件未初始化!"); } return(target.BeAttacked(gameObject, damage, interruptType, element)); }
/// <summary> /// 范围性攻击,实现方法为输入表示范围的Collier2D,检测范围内的每个拥有CanBeFighted的敌人,调用BeAttacked /// </summary> /// <param name="area">表示攻击范围的collier2d, 应该为trigger态</param> /// <param name="damage">该次范围攻击造成了多少伤害</param> /// <param name="interruptType">该次攻击为何种打断类型</param> /// <returns>返回攻击到的敌人对象的CanBeFighted组件的数组</returns> public CanBeFighted[] AttackArea(Collider2D area, int damage, AttackInterruptType interruptType = AttackInterruptType.NONE, ElementAbilityManager.Element element = ElementAbilityManager.Element.NULL) { //输入范围需要Trigger才行 if (!area.isTrigger) { Debug.LogError("在" + gameObject.name + "释放范围攻击时,输入的collider2d并不是trigger态"); return(null); } Collider2D[] enemies = new Collider2D[ENMEIES_MAX_NUM_ONEATTACK]; int enemiesNumber = area.OverlapCollider(filter, enemies); if (enemiesNumber != 0) { Debug.Log("攻击碰到敌人"); CanBeFighted[] enemiesAttacked = new CanBeFighted[enemiesNumber]; CanBeFighted enemyBody; //对碰到的敌人进行以下操作,如果敌人有CanBeFighted组件,则施加攻击,否则报错 for (int i = 0; i < enemiesNumber; i++) { if (enemies[i].TryGetComponent <CanBeFighted>(out enemyBody)) { Attack(enemyBody, damage, AttackInterruptType.NONE, element); enemiesAttacked[i] = enemyBody; } else { Debug.LogError("在" + gameObject.name + "释放范围攻击时,这些物体被检测为敌人,但是没有CanBeFighted组件" + enemies[i].gameObject.name); } } return(enemiesAttacked); } return(null); }