第5章 UnityのAIを使って…

76回生 星川大瑛

5.1 Unityとは

Unityとはゲーム作るためのものです。

Unityを使うことで非常に簡単にゲームが作れます。

実は…あの世界中で大流行した「ポケモンGO」もUnityで作られています!!

とにかくUnityのいいところは

  1. 無料で使える
  2. 様々の機能が元からついている
  3. とにかく簡単
  4. Mac/Windows/iOS/Androidなど色々なものアプリケーションを作れる
  5. Mac/Windowsのどちらででも作れる

などなど…

5.2 Unityを使おう

ではUnityで作れるゲームの例を紹介します。

AIを使って敵が自動でプレイヤーを追いかける仕組みを作っていきます。AIなんて難しいと思うかもしれませんが、UnityのNavigationという機能を使うと簡単に経路の探索ができます!!

この機能を使うことでPlayerが通れるところを設定できます。

これでヤッター‼︎完成!ではありません。もちろん、プログラミングしないといけません。

AIのプログラミングなんか初心者にできる訳が無い!と思うかもしれません。でも、大丈夫です。たったこれだけで動きます。

リスト5.1: hoge

using UnityEngine;
using System.Collections;

using System.Collections.Generic;
using UnityEngine.AI; //ココ重要!!

public class PlayerScript : MonoBehaviour {
    public Transform target;
    NavMeshAgent agent;

    void Start () {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update () {
        agent.SetDestination(target.position);
    }
}

5.3 プログラムの説明

リスト5.2: hoge

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using UnityEngine;
using System.Collections;

using System.Collections.Generic;
using UnityEngine.AI; //ココ重要!!

public class PlayerScript : MonoBehaviour {
    public Transform target;
    NavMeshAgent agent;

    void Start () {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update () {
        agent.SetDestination(target.position);
    }
}

初めはこの状態です。

まず、4行目(using UnityEngine;の下)のusing UnityEngine.AI;ですが、これは、UnityでAI(経路探索)を使うためのシステムを呼ぶようなものです。

次に、7,8行目のpublic Transform target;NavMeshAgent agent;ですが、これらは、「変数宣言」といい、Unityでは、public (変数の型名) (変数名);で変数宣言をします。

public Transform targetはTransform型のtargetという名前の変数を宣言したということです。(※Transform型の変数は、オブジェクトの位置、回転、スケールを扱う変数です。)

また、初めの「public」は書かなくてもいいこともありますが、書いておく方が無難です。

NavMeshAgentはUnityで経路探索をするために必要なもので、NavMeshAgent agent;はNavMeshAgent型のagentという名前の変数を用意するということです。

その次の11行目のagent = GetComponent<NavMeshAgent>();は、手順2で作った「agent」という変数にObjectにつけた「NavMesh」というComponentを代入しています。これによって、ScriptからComponentを操作できるようになります。

5.4 ComponentとGameobjectに様々な機能をつけるもの

例えば

Material
色をつける
Collider
衝突判定のための一番外のセンサー(みたいなもの)
Rigidbody
物理的な運動をするようにする

最後に、15行目のagent.SetDestination(target.position);は、NavMeshAgentの機能を使ってtargetの座標(position)まで移動するということです。

5.5 あとがき

このように、Unityを使うとAIによる自動経路探索も簡単にできます。

とにかく、Unityは使って、調べて、しながらたくさん作っていくことで徐々に慣れていきます。またnavigationの詳しい仕組みはこちらのURLをご覧ください。