検索
連載

Unityで草生えるわ――VRでも使える地形生成、3Dキャラクター操作、スクリプトで当たり判定ゲーム開発初心者のためのUnity入門(5)(6/6 ページ)

Unityで3Dゲームを作るまでのいろいろな処理を解説する連載。今回は、Terrainで山、草、木を作る方法、人型の3Dモデルをキーボードで動かす方法、Box Colliderで当たり判定のスクリプトを追加する方法などを紹介する【Windows 10、Unity 5.4に対応。C#のコードを追加】。

Share
Tweet
LINE
Hatena
前のページへ |       

新規スクリプトの追加

 Hierarchy内の「outarea」(先ほど設定したCubeオブジェクト)を選択し、「Inspector」内の「Add Component」をクリックする。

 表示されるリストから「New Script」を選択する。すると「Script」の「Name」を入力する画面が表示されるので「outareaScript」と入力する。「Language」には「C Sharp」か「Java Script」のいずれかを選択する。図35では、「C Sharp」を選択している。


図35 「Script」の「Name」に「outareaScript」を選択。「Language」には「C Sharp」を選択する

Box Colliderで当たり判定

 図35の状態で「Create and Add」ボタンをクリックすると、「Inspector」に「Outarea Script(Script)」の項目が追加される(図36)。また、「Box Collider」の「Is Trigger」にチェックを付けておく。「Box Collider」は「当たり判定」(衝突判定)を行うために必要だ。なおColliderは、「衝突装置」を意味している。

 この場合は、「Player」が「outarea」に入ったかどうかを判定するために、「Is Trigger」にチェックを付ける必要があるのだ。


図36 「Outarea Script(Script)」の項目が追加される(C#の場合)

エディタでスクリプトを書き込む

 図36の画面から、「Outarea Script(Script)」内の「Script」に入力されている「outareaScript」をダブルクリックする。すると、VSかMonoDevelopのいずれかが起動する(図37、38)。


図37 Visual Studio 2015が起動した

図38 MonoDevelopが起動した

 以降は、C#とJavaScriptで読み分けてほしい。

C#の場合

 VSが起動すると、void Startとvoid Updateがすでに準備されている。void Startには、読み込み時に1回だけ実行される処理を記述する。void Updateには、フレームごとに読み込まれる処理を記述する。

 今回の落下処理は「void OnTriggerEnter」イベントに記述する。このイベントは、先に設定したBox Colliderによって実行されるイベントだ。この処理は自動的には追加されていないので、自分でリスト1のように記述する必要がある。

using UnityEngine;
using UnityEngine.SceneManagement;
 
public class outareaScript : MonoBehaviour {
    void OnTriggerEnter(Collider myCollider)
    {
        if(myCollider.tag=="Player")
        {
            SceneManager.LoadScene(0);
            //SceneManager.LoadScene("自然を作成する");
        }
    }
}
リスト1 outareaScript.cs

JavaScriptの場合

 MonoDevelopが起動すると、function Startとfunction Updateがすでに準備されている。function Startには、読み込み時に1回だけ実行される処理を記述する。function Updateには、フレームごとに読み込まれる処理を記述する。

 今回の落下処理は「function OnTriggerEnter」イベントに記述する。このイベントは、先に設定したBox Colliderによって実行されるイベントだ。この処理は自動的には追加されていないので、自分でリスト2のように記述する必要がある。

import UnityEngine.SceneManagement;
 
function OnTriggerEnter(myCollider:Collider)
{
  if(myCollider.tag=="Player"){
    SceneManager.LoadScene(0);
  //SceneManager.LoadScene("自然を作成する");
  }
}
リスト2 outareaScriptJS.js

if文で条件分岐

 図36で「Box Collider」の「Is Trigger」にチェックを付けているため、「OnTriggerEnter」イベントが実行される。

 リスト1の7行目、リスト2の5行目にある「Player」は図33で「Tag」に設定したThirdPersonControllerだ。if文で「Player」が「outarea」に衝突したら(落下したら)という条件分岐をしている。

シーンを読み込む「SceneManager.LoadScene」の使い方

 なおUnity 5.3からは、Unity 5.2まで使っていた「Application.LoadLevel(Application.loadedLevel);」は使用できなくなっている。代わりに「SceneManager.LoadScene(0);」を使用する。このSceneManagerを使用するために、「UnityEngine.SceneManagement」を読み込んでおく必要がある(リスト1の1〜2行目、リスト2の1行目)。

 「SceneManager.LoadScene(0);」で現在のシーンを再度読み込み直している。「0」はシーンのインデックス番号だが、今回は、シーンは1個しかないので「0」を指定している。よって、落下したら元のシーンに移動することになる。

 また、コメントアウトしているが、直接「シーン名」を指定することもできる。この場合は、Unityメニューの「File」→「Save Scene as」からシーン名を保存しておく必要がある。

スクリプトを書いたら必ずビルドする

 スクリプトが書けたら、「ビルド」という作業が必要だ。ビルドするには、VSの場合はメニューから「ビルド」→「ソリューションのビルド」と、MonoDevelopの場合は「Build」→「Build All」と、選択する。

 ビルドに失敗すればエラーが表示されるので修正する。ビルドは成功しても、「警告」が表示されることもあるが、この場合は無視しても問題はない。

 ビルドたら、エディタの画面を閉じで実行しよう。すると動画2のようになるはずだ。

動画2 最初から始める動画

次回は、当たり判定を、もっと簡単に設定できる「Mecanim Locomotion Starter Kit」

 以上で、今回は終わりだ。初めてスクリプトが出てきたが、短いので難しくはなかったと思う。このように、少しのスクリプトを書くだけで、ゲーム性を持たせることができる。しかし、これは基本的な部分だけであって、実際に遊べるゲームを作るとなると、ある程度の量のスクリプトを書く必要があるだろう。

 スクリプトを書かずに3Dキャラクターを動かすために、今回はUnityにもともと用意されているThirdPersonControllerを使ったが、次回はAsset Storeから「Mecanim Locomotion Starter Kit」を入手して、その使い方を解説する。より複雑な動きが可能になり、今回スクリプトで書いた当たり判定を、もっと簡単に設定できるので、お楽しみに。

参考文献

■更新履歴

【2016/11/17】Windows 10、Unity 5.4に対応しました。C#のスクリプトを追加しました。


著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る