第3回目:Humpback Whale|Tech Book Zone Manatee

マナティ

UnityおすすめAsset集

第3回目:Humpback Whale

今回紹介するAssetは「Humpback Whale」です。これは「くじら」のAssetです。今回はこの「クジラ」を空に飛ばして「空飛ぶくじら」を実現します。無料のAssetになります。ここでは大空を泳がせますが、大海原を泳がせることも可能です。この点については、また機会があれば紹介したいと思います。

Humpback Whaleのインポート

Asset Storeの検索欄に「Humpback Whale」と入力すると表示されます。初めての場合は「ダウンロード」→「インポート」に進んでください。筆者は何度も使用していますので、「インポート」と表示されています(図1)。

 

図1 Humpback Whaleのインポート画面

図1から「インポート」をクリックすると、UnityのScene画面のProject内に図2のようなフォルダが作成され、必要なファイルが取り込まれます。

図2 必要なファイルが取り込まれた

Sky5X Oneのインポート

次にAsset Storeから「Sky5X One」という空の風景を持ったAssetを「インポート」しておいてください。検索欄に、名前の一部を入力すると表示されます。すると、図2の中に、このファイルが取り込まれます(図3)。このAssetも無料です。

図3 「Sky5X One」のファイルが取り込まれた

では、次に舞台を作っていきます。

舞台を作る

今回は「くじら」を空に飛ばすわけですから、「床」となるPlaneを配置する必要はありません。そのままの状態のScene画面を使用します。後程、このScene画面に空の背景を指定するようになります。

Humpback Whaleを配置する

Project内の「Assets」→「Humpback Whale」フォルダ内の「humback_whale_model23.fbx」をScene上に配置します。Main Cameraの位置を調節して図4のように表示されるようにしてください。

図4 Scene上にhumback_whale_model23.fbxを配置した

次に空の風景を設定します。

空の風景を設定する

Unityメニューの「Window」→「Lighting」と選択します。すると「Lighting」設定の画面が表示されます。

図5 Lighting設定の画面が表示された

図5のScene画面から、「Environment Lighting」の「Skybox」の右端にある「」(〇に・)のアイコンをクリックします。すると「Select Material」の画面が表示されますので、その中から、今回は「sky5X2」を選択してみました。これらのMaterialは「Sky5X Oneのインポート」で取り込まれたMaterialです(図6)。

図6 Skyboxに「sky5X2」を指定した

するとGame画面の空の風景が図7のように変化します。ほかにも何点か空の風景のMaterialが用意されていますので、各自が気に入ったMaterialを設定するといいでしょう。

図7 Game画面の空の風景が変化した

では、次にキーボードの「左右上下矢印」キーで「くじら」を操作するスクリプトを書いていきます。スクリプトはUnity用に最適化されたJavaScript(Unity Script)、C#、Booの使用が可能です。今回は一番メジャーなC#を使用します。エディターには最新版のVisula Studio 2017(以降VS2017)を使いました。

スクリプトの記述

Hierarchyから「humback_whale_model23」を選択して、Inspectorから「Add Component」をクリックします。「New Script」を選択し、Nameに「ActionScript」、Languageに「C#」を選択して、「Create And Add」をクリックします。すると、Inspector内に「Action Script(Script)」の項目が追加されます。

Scriptの「ActionScript」をダブルクリックしてVS2017を起動し、リスト1のコードを記述します。

using UnityEngine;

public class ActionScript : MonoBehaviour {
    private GameObject obj;
    void Start()
    {
        obj = GameObject.Find("humpback_whale_model23");
    }

    void Update()
    {
        if (Input.GetKey("down"))
        {
            obj.transform.position -= transform.forward * 0.01f;
        }

        if (Input.GetKey("up"))
        {
            obj.transform.position += transform.up * 0.1f;
        }

        if (Input.GetKey("left"))
        {
            obj.transform.Rotate(0, 2, 0);
        }
        if (Input.GetKey("right"))
        {
            obj.transform.Rotate(0, -2, 0);
        }
    }
}
リスト1 クジラを操作するスクリプト(ActionScript.cs)

GameObject型の変数objを宣言します。Startメソッド内で、Findメソッドを使って「humpback_whale_model23」にアクセスし、変数objで参照しておきます。Updateメソッド内では、矢印キーによる条件分岐を行います。「下矢印キー」では前方向に進めます。この場合、

obj.transform.position += transform.forward * 0.01f;

と、「+」で記述すると、なぜかクジラがバックしてしまいますので、前方向に進めるためには「-」と指定しておきます。

「上矢印キー」ではクジラが上方向に上がっていきます。「左矢印キー」はY軸を中心に「2」度回転、「右矢印キー」は反対方向に「-2」度回転します。

実際にPlayしたのが図8になります。

図8 クジラが大空を泳いでいる

実際に動かしたのが動画1です。

クジラが大空を泳いでいる動画

動画1 クジラが大空を泳いでいる動画

今回は「クジラ」のAssetを使った「空飛ぶクジラ」を実現してみました。初めてスクリプトを書く作業が発生したのですが、そんなに難しくはなかったと思います。

C#の場合はエディターにVS2017を使用していますが、JavaScript(Unity Script)の場合は、Unityがデフォルトで用意しているMonoDevelopを使用する以外に方法がありません。Unity ScriptをVS2017で開くと、エラーの波線が沢山表示され収拾がつかなくなります。純粋なJavaScriptであれば、VS2017でも対応が可能ですが、Unityで使用するJavaScriptはUnity専用に最適化されていますので、VS2017では編集は難しいようです。

Unityがデフォルトで用意しているMonoDevelopも初期のころはインテリセンスも効いて大変に使いやすかったのですが、いつのバージョンからか、MonoDevelopではインテリセンスが効かなくなっており、大変に不便です。筆者も最初はUnity ScriptをMonoDevelopで使っていたのですが、インテリセンスが効かなくなってC#に移行しました。

なお、筆者は試したことはないのですが、Visual Studio Codeも使えるようです。

次回は、迷路を一瞬にして作成できる「MazeMaker(有料)」のAssetについて解説します。お楽しみに。

著者プロフィール

薬師寺国安事務所 薬師寺国安(著者)
薬師寺国安事務所代表。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。現在はUnity5、UE4、Excel VBAについて執筆活動中。
Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。