サイトアイコン StudioFun

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(2)

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(1) では Unity に記載されている導入から概要までを簡単に引用した。今回から、実際に Unity を用いてタワーディフェンステンプレートを作成していく。

1.タワー編 – 概要

Unity のチュートリアルに沿って作業を進めていく。ということでタワーについて進めていく。

『タワーディフェンスゲームのもっとも重要な要素はタワーです。タワーディフェンステンプレートには、タワーの作成に使用する 2 つの主要な要素があります。1 つめはタワーコンポーネントで、タワーの基本的な機能を定義します。2 つめはタワーレベルコンポーネントで、アップグレードしたときのタワーの挙動を定義します。』

This tutorial for the Tower Defense Template covers creating and configuring the towers, and the enemy agents that the towers must defend against.
Towers and Agents - Unity Learn - Unity Learn

とのことなので、上記について理解を進めていく。

2.タワー編 – プロジェクトの作成する

プロジェクトの作成については以前に記事にまとめているのでこちらを参照してほしい。ただし、以前は2Dで作成していたが今回は3Dでの作成となる。また、今回作成するチュートリアル用プロジェクト名は「TowerDefenseTutorial」としておく。

Unityでゲームを開発する(1)~Unityのインストール方法~ では Unity のインストールまで行った。今回はUnity のプロジェクトを作る。
Unityでゲームを開発する(2)~プロジェクトを作製する~ | StudioFun - StudioFun

3.タワー編 – アセットをインポートする

Unity でプロジェクトを作成後、アセットストアに「Tower Defense Template」と入力し、UNITY TECHNOLOGIES の「Tower Defense Template」をダウンロード~インポートまでを行う。

「Tower Defense Template」と入力しダウンロードページを表示すると以下のような画面となるはずだ。

タワーディフェンステンプレート

実際にインポートを行うと以下のようなデータ郡がインポートされるので、全てが選択されていることを確認しインポートボタンをクリックする。

インポートデータ

※ 注意

Unity 2018.3.0b5 版では「Asset/Editor/PropertyDrawers/MinDrawer」に

Assets/PostProcessing/Editor/PropertyDrawers/MinDrawer.cs(6,34): error CS0104: `MinAttribute' is an ambiguous reference between `UnityEngine.MinAttribute' and `UnityEngine.PostProcessing.MinAttribute'
というエラーが発生した。これを解消するためにスクリプトの先頭に
using MinAttribute = UnityEngine.PostProcessing.MinAttribute;
の一行を追加した。

4.タワー編 – タワー設定データを作成する

『タワーゲームオブジェクト自体を作成する前に、さまざまなレベルでどのように挙動するかについてのデータを格納するデータオブジェクトを作成する必要があります。このオブジェクトは TowerLevelData スクリプタブルオブジェクトと呼ばれます。』

とのことなので指示通り「TowerLevelData スクリプタブルオブジェクト」を作成していく。チュートリアルの手順では以下の通りとなっている。

しかしながら、Unity 2018.3.0b5 版では

TowerConfiguration の作成

今回はタワーディフェンステンプレートではすでに作成済みのデータがあるのでそれを流用していく。

稚拙ながら少々解説

「Tower Configuration」は 「Assets/Scripts/TowerDefense/Towers/Data/TowerLevelData.cs」ファイルをもとに生成している。内容としては Tower の設定情報を保持するだけの簡単なクラス構成となっている。

[cce_csharp]using UnityEngine;

namespace TowerDefense.Towers.Data
{
    /// < summary>
    /// Data container for settings per tower level
    /// < /summary>
    [CreateAssetMenu(fileName = "TowerData.asset", menuName = "TowerDefense/Tower Configuration", order = 1)]
    public class TowerLevelData : ScriptableObject
    {
        /// < summary>
        /// A description of the tower for displaying on the UI
        /// < /summary>
        public string description;

        /// < summary>
        /// A description of the tower for displaying on the UI
        /// < /summary>
        public string upgradeDescription;

        /// < summary>
        /// The cost to upgrade to this level
        /// < /summary>
        public int cost;

        /// < summary>
        /// The sell cost of the tower
        /// < /summary>
        public int sell;

        /// < summary>
        /// The max health
        /// < /summary>
        public int maxHealth;

        /// < summary>
        /// The starting health
        /// < /summary>
        public int startingHealth;

        /// < summary>
        /// The tower icon
        /// < /summary>
        public Sprite icon;
    }
}[/cce_csharp]

3行目「namespace」は簡単に例えるとフォルダ構成のようなもので、「TowerDefense」フォルダの中にある「Towers」フォルダの中にある「Data」フォルダを指しているようなものだと思っていただくのがわかりやすいだろう。

8行目「[CreateAssetMenu(fileName = “TowerData.asset”, menuName = “TowerDefense/Tower Configuration”, order = 1)]」は Asset のメニューに対して、手順に記載されているメニュー(Create > Tower Defense > Tower Configuration)を追加する定型文である。

9行目「public class TowerLevelData : ScriptableObject」については別途記事をまとめているためこちらを参照してほしい。

Unity ではデータを管理する手法の一つとして ScriptableObject というものがある。 Grow Up Monsters ではいくつものカードのデータを作成管理を行わなければならない。そこで Unity の ScriptableObject の使い方についてまとめていきたいと思う。1.ScriptableObject とは「ScriptableObject はスクリプトインスタンスから独立した大量の共有データを格納できるクラスです。SerializedObject と混同しがちですが、こちらはエディタークラスであり、目的も違うものです。例えば 百万の配列をもつスクリプトでプレハブ作ったとします...
Unity の ScriptableObject を用いてカードのデータを管理する - StudioFun

それ以降については、保持するデータをグローバル変数として定義しているのみであるため、解説は省略させていただく。

 

少々記載内容が多くなりすぎてしまったため、ここで一旦区切らせていただく。続きは明日以降記載していく予定ですのでしばしお待ち下さい。

モバイルバージョンを終了