//tips
//自動生成されたEnemyAIへの攻撃
前回HPUI付きのEnemyAIを作れたので、そのEnemyAIにダメージを与えることを考える。
Rodを持たせたプレイヤーにEnemyAIが近づくと、rodの攻撃モーションが発生する前に攻撃判定が入ってしまう。
これは、OnTriggerEnter(Collider other)の範囲がEnemyAIの索敵フィールドに引っかかってしまい、rodを索敵フィールドで持つと遠距離でもダメージが入ってしまう仕様になっているせいかと思われる。
プレイヤーのHpScriptの方にOnTriggerEnterの相互のダメージ記述があるのが問題かと思ったが、こちらは問題なかった。
rodの攻撃判定を適切に入れるため、EnemyAIの高さも調整し、isTrigger用のコライダーを追加したら2倍のダメージが入ってしまった。
どう索敵フィールドに勘違いさせずに、攻撃判定を与えられるかが焦点となる。Enemy側がweaponを判定してしまうことで誤作動を起こすので、逆にweapon側からダメージ判定を与えられるように考えていく。
rodPivod下にあり、コライダーのオンオフ管理されているrodに直接Ontrigger判定をつけてみた。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class rodManager : MonoBehaviour
{
public float powerEnemy = 1; //攻撃力
HPScriptE hPScriptE;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Enemy")
{
hPScriptE = other.gameObject.GetComponent<HPScriptE>();
//hPScriptE.GetDamage(powerEnemy);
hPScriptE.hp -= powerEnemy;
}
}
}
無事に武器による攻撃判定が通用した。hp0以下になったときにdestroyするスクリプトも追加。
if (hPScriptE.hp <= 0)
{
Destroy(other.gameObject); //ゲームオブジェクトが破壊される
}
InventryUIの表示が邪魔になってきたので、プレイヤー傘下から外し、Screenspace-overrayへ変更する。
Inventoryの親のcanvasごとプレイヤーの外に出し、canvasのrendermodeおよびscale with screen sizeに変更。
再生すると表示場所が若干ずれて表示されるので、canvasについたままになっていたUIControllerよびPlayerUIScriptを削除。Inventory表示はInput.GetKeyDown(KeyCode.LeftShift)でshiftキー操作に変更。aキーにしたら変換文字予測が出てきたのでshiftにした。
プレイヤー消滅時にエラーが出るのでif (playerTransform != null)の条件をプレイヤー追跡時にプレイヤーの位置を参照するスクリプトに追加した。
if (state == EnemyState.Chase)
{
if (playerTransform != null)
{
setPosition.SetDestination(playerTransform.position);
navMeshAgent.SetDestination(setPosition.GetDestination());
}
}
これによりプレイヤー消滅後は自動探索に戻るようになった。
Inventoryを見やすい位置に移動させることができるように次はドラッグ対応の仕方を考えていく。