04 %E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%82%8B - ruccho/first-step-to-unity GitHub Wiki
さて、ボールを動かすことができるようになり、ちょっとずつゲームらしさが出てきました。しかしまっ平らなステージでは味気が無さ過ぎますね。
Hierarchyの + > 3D Object > Cube で立方体を出現させます。位置や大きさをいじって壁を作ってみました。ついでに床も広くして、ほどよい感じに。
カメラ位置も調整して、ステージ全体が画角に収まるようにしておきます。
ここでひとつ注意が必要なのですが、ゲームが実行中にシーンに対して行った編集は保存されず、ゲームを停止したタイミングでリセットされてしまいます。手間をかけて編集したのに、実行中だったせいでリセットされちゃった!……となると悲しいので、シーンを編集する際はエディタが実行中でないかどうか気を付けましょう。
さて、壁ができて、ボールが無限に落下することはなくなりました。しかし、壁・ボール・地面の色が同じなので、少し見づらいです。
オブジェクトに色を付けていきましょう。オブジェクトの見た目を設定するためには、マテリアルというものを使います。
マテリアルを作成するには、Projectウィンドウの適当な階層で右クリックして、 Create
> Material
を選択します。
とりあえずここではGround
という名前にしてみました。作成したマテリアルを選択して、Inspectorを見てみます。
これがマテリアルの設定画面です。いろいろありますが、とりあえずわかりやすいところとして、色を変更します。Albedo
と書かれた欄の白いボックスを押して、色を変更します。
変更出来たら、このマテリアルをシーン内のPlaneにドラッグ&ドロップしてあげましょう。
同じ要領で壁とボールにも色を付けてみました。だいぶ見やすくなりましたね!
せっかくなので壁を増やしてみましょう。
さて、かなり体裁が整ってきました。次のステージとして、ここにゲームとしての面白味が欲しいところです。たとえば、当たるとゲームオーバーになる危険な壁とか……。
Cubeを追加して、赤いマテリアルを設定します。いかにも危険な感じが出てきました。
次に、このCubeに当たるとゲームオーバーになる性質を与えましょう。
スクリプトDanger
を作成して……
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Danger : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnCollisionEnter(Collision collision)
{
Debug.Log("ゲームオーバー!");
}
}
こんな感じにしてあげます。
OnCollisionEnter
は、物体が別の物体と衝突したときに呼び出されるメソッドです。
そしてDebug.Log()
は、Consoleウィンドウにテキストを出力するメソッドです。
このスクリプトをCubeに取り付け、ボールで体当たりしてみましょう。
Consoleウィンドウに「ゲームオーバー!」と出力されました。
このままだと味気ないうえ、そのままゲームを続けることができてしまいますね。ゲームオーバーになったらリスタートするように変更しましょう。
private void OnCollisionEnter(Collision collision)
{
Debug.Log("ゲームオーバー!");
//現在のシーンを再読み込みする
UnityEngine.SceneManagement.SceneManager.LoadScene(gameObject.scene.name);
}
これで再スタートするようになります。
あとはこのCubeをいろいろ複製して……
うっかりぶつかりそうな場所に置くのもよし、プレイヤーにやさしい配置にするのもよし……ここはレベルデザイナーとしてのウデが試されるところです。配置を工夫して、楽しんでもらえるようなステージにしてみましょう!