超初心者のゲーム開発記~Unity~

超初心者がUnityでゲーム(目標はAndroidアプリ )を開発していくブログです!

【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);
    }
}

※これで敵を動かすスクリプトが完成しました。
f:id:yagigame:20181104161056p:plain

次回予告

次回の記事では、敵のアニメーションの管理について書いていきたいと思います。
※次回の記事はこちら
www.yagigame.com
※Unityのチュートリアルの章としては、次回は(Enemy Animator Controller)となります!

読んでいただきありがとうございました!