【Unity 2Dローグライク】公式チュートリアルをやってみる part.11~敵の動かし方
こんにちは!ヤギです!
Unityの2Dローグライクの
公式チュートリアルをやってみる part.11になります!
※前回(part.10)の記事はこちら
www.yagigame.com
記事概要
今回の記事では、敵の動かし方についてご説明していきます。※part.11に対応する公式チュートリアルの章は、Writing the Enemy Scriptです!
unity3d.com
※この記事は、ひよこのたまご様の記事をリスペクトしています。
hiyotama.hatenablog.com
敵を動かすスクリプトの作成
1. Enemy.csを作成する。2. 敵を動かすスクリプトを書いていきます。
※ソース内に解説を記載いたしました。ご参照ください。
using System.Collections; using System.Collections.Generic; using UnityEngine; //MovingObjectを継承する public class Enemy : MovingObject { public int playerDamage; //プレイヤーへのダメージ private Animator animator; private Transform target; //プレイヤー場所 private bool skipMove; //動くか判定 // Use this for initialization //継承クラス protected override void Start () { //Animatorコンポーネント取得 animator = GetComponent<Animator>(); //プレイヤーの場所を取得する target = GameObject.FindGameObjectWithTag("Player").transform; //MovingObjectクラスのStartを呼び出す base.Start(); } //敵のターンか判定、移動を試みる処理 protected override void AttemptMove<T>(int xDir, int yDir) { //敵のターンではない場合 if(skipMove){ //敵のターンにする skipMove = false; return; } base.AttemptMove<T>(xDir, yDir); //敵のターンを終わる skipMove = true; } //敵を移動させる処理 public void MoveEnemy(){ int xDir = 0; //左右の移動量 int yDir = 0; //上下の移動量 //敵とプレイヤーの左右の距離がほぼ0の場合 if(Mathf.Abs(target.position.x - transform.position.x) < float.Epsilon){ //プレイヤーが上にいれば、1とし、下にいれば、-1とする yDir = target.position.y > transform.position.y ? 1 : -1; }else{ //プレイヤーが右にいれば、1とし、左にいれば、-1とする xDir = target.transform.position.x > transform.position.x ? 1 : -1; } //移動する AttemptMove<Player>(xDir, yDir); } //敵が移動できない時の処理 protected override void OnCantMove<T>(T component) { //衝突したプレイヤーを設定 Player hitPlayer = component as Player; //プレイヤーの食料を減らす hitPlayer.LoseFood(playerDamage); } }
※これで敵を動かすスクリプトが完成しました。
次回予告
次回の記事では、敵のアニメーションの管理について書いていきたいと思います。※次回の記事はこちら
www.yagigame.com
※Unityのチュートリアルの章としては、次回は(Enemy Animator Controller)となります!
読んでいただきありがとうございました!