// 選択肢から選んだモードを実行 public void ChooseAttackOptions(BattleState selectOption, GameObject target, Skill skill = null, Item item = null) { // スキルやターゲットの情報をセット currentTarget = target; currentSkill = skill; targetCharacterBattleScript = target.GetComponent <CharacterBattleScript>(); targetCharacterStatus = targetCharacterBattleScript.GetCharacterStatus(); // 選択したキャラクターの状態を設定 battleState = selectOption; if (selectOption == BattleState.DirectAttack) { //animator.SetTrigger("DirectAttack"); } else if (selectOption == BattleState.MagicAttack || selectOption == BattleState.Healing || selectOption == BattleState.IncreaseAttackPowerMagic || selectOption == BattleState.IncreaseDefencePowerMagic || selectOption == BattleState.NumbnessRecoveryMagic || selectOption == BattleState.PoisonnouRecoveryMagic ) { //animator.SetTrigger("MagicAttack"); // 魔法使用者のMPを減らす SetMp(GetMp() - ((Magic)skill).GetAmountToUseMagicPoints()); // 使用者が味方キャラクターであればStatusPanelの更新 if (GetCharacterStatus() as AllyStatus != null) { battleStatusScript.UpdateStatus(GetCharacterStatus(), BattleStatusScript.Status.MP, GetMp()); } //Instantiate(((Magic)skill).GetSkillUserEffect(), transform.position, ((Magic)skill).GetSkillUserEffect().transform.rotation); } else if (selectOption == BattleState.UseHPRecoveryItem || selectOption == BattleState.UseMPRecoveryItem || selectOption == BattleState.UseNumbnessRecoveryItem || selectOption == BattleState.UsePoisonRecoveryItem ) { currentItem = item; //animator.SetTrigger("UseItem"); } }
void Update() { // 既に死んでいたら何もしない if (isDead) { return; } // 自分のターンでなければ何もしない if (battleState == BattleState.Idle) { return; } /* * // アニメーションが終わっていなければ何もしない * if (!isDoneAnimation) * { * return; * } */ // 選択したアニメーションによって処理を分ける if (battleState == BattleState.DirectAttack) { //ShowEffectOnTheTarget(); DirectAttack(); // 自分のターンが来たので上がったパラメータのチェック CheckIncreaseAttackPower(); CheckIncreaseStrikingStrength(); } else if (battleState == BattleState.MagicAttack) { //ShowEffectOnTheTarget(); MagicAttack(); // 自分のターンが来たので上がったパラメータのチェック CheckIncreaseAttackPower(); CheckIncreaseStrikingStrength(); } else if (battleState == BattleState.Healing || battleState == BattleState.NumbnessRecoveryMagic || battleState == BattleState.PoisonnouRecoveryMagic ) { //ShowEffectOnTheTarget(); UseMagic(); // 自分のターンが来たので上がったパラメータのチェック CheckIncreaseAttackPower(); CheckIncreaseStrikingStrength(); } else if (battleState == BattleState.IncreaseAttackPowerMagic) { //ShowEffectOnTheTarget(); UseMagic(); // 自身の攻撃力をアップした場合はターン数をカウントしない if (currentTarget == this.gameObject) { CheckIncreaseStrikingStrength(); } else { CheckIncreaseAttackPower(); CheckIncreaseStrikingStrength(); } } else if (battleState == BattleState.IncreaseDefencePowerMagic) { //ShowEffectOnTheTarget(); UseMagic(); // 自身の防御力をアップした場合はターン数をカウントしない if (currentTarget == this.gameObject) { CheckIncreaseAttackPower(); } else { CheckIncreaseAttackPower(); CheckIncreaseStrikingStrength(); } } else if (battleState == BattleState.UseHPRecoveryItem || battleState == BattleState.UseMPRecoveryItem || battleState == BattleState.UseNumbnessRecoveryItem || battleState == BattleState.UsePoisonRecoveryItem ) { UseItem(); // 自分のターンが来たので上がったパラメータのチェック CheckIncreaseAttackPower(); CheckIncreaseStrikingStrength(); } // ターゲットのリセット currentTarget = null; currentSkill = null; currentItem = null; targetCharacterBattleScript = null; targetCharacterStatus = null; battleState = BattleState.Idle; // 自身の選択が終了したら次のキャラクターにする battleManager.ChangeNextChara(); isDoneAnimation = false; }
// 攻撃処理 public void AttackProcess(GameObject character, Skill nowSkill, GameObject targetChara, Item item = null) { CharacterBattleScript characterBattleScript = character.GetComponent <CharacterBattleScript>(); CharacterStatus characterStatus = characterBattleScript.GetCharacterStatus(); if (characterStatus.GetSkillList().Count <= 0) { return; } // 敵がガード状態であればガードを解く /* * if (character.GetComponent<Animator>().GetBool("Guard")) * { * character.GetComponent<CharacterBattleScript>().UnlockGuard(); * } */ character.GetComponent <CharacterBattleScript>().UnlockGuard(); //味方で逃走失敗なら何もしない if (isFailGetAway && characterStatus as AllyStatus != null) { ChangeNextChara(); return; } ShowMessage(characterStatus.GetCharacterName() + "の攻撃"); if (nowSkill.GetSkillType() == Skill.Type.DirectAttack) { // 攻撃相手のCharacterBattleScript characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.DirectAttack, targetChara, nowSkill); Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); } else if (nowSkill.GetSkillType() == Skill.Type.MagicAttack) { if (characterBattleScript.GetMp() >= ((Magic)nowSkill).GetAmountToUseMagicPoints()) { // 攻撃相手のCharacterBattleScript characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.MagicAttack, targetChara, nowSkill); Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); } else { Debug.Log("MPが足りない!"); ShowMessage("MPが足りない!"); // MPが足りない場合は直接攻撃を行う characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.DirectAttack, targetChara, characterStatus.GetSkillList().Find(skill => skill.GetSkillType() == Skill.Type.DirectAttack)); Debug.Log(character.name + "は攻撃を行った"); ShowMessage(character.name + "は攻撃を行った"); } } else if (nowSkill.GetSkillType() == Skill.Type.RecoveryMagic) { if (characterBattleScript.GetMp() >= ((Magic)nowSkill).GetAmountToUseMagicPoints()) { // 回復相手のCharacterBattleScript characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.Healing, targetChara, nowSkill); Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); } else { Debug.Log("MPが足りない!"); ShowMessage("MPが足りない!"); // MPが足りない場合は直接攻撃を行う characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.DirectAttack, targetChara, characterStatus.GetSkillList().Find(skill => skill.GetSkillType() == Skill.Type.DirectAttack)); Debug.Log(character.name + "は攻撃を行った"); ShowMessage(character.name + "は攻撃を行った"); } } else if (nowSkill.GetSkillType() == Skill.Type.Item) { //characterBattleScript.ChooseAttackOptions(CharacterBattleScript.BattleState.UseHPRecoveryItem, targetChara, nowSkill, item); UseItem(character, targetChara, item); } else if (nowSkill.GetSkillType() == Skill.Type.Guard) { characterBattleScript.Guard(); // Guardアニメはboolなのでアニメーション遷移させたらすぐに次のキャラクターに移行させる ChangeNextChara(); Debug.Log(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); ShowMessage(character.name + "は" + nowSkill.GetKanjiName() + "を行った"); } }