はじめに:Unityとは?
Unityは、2Dや3Dのゲームを作るための統合開発環境(IDE)です。直感的な操作でゲームの世界を構築できるため、世界中の開発者に愛用されています。Unityでは、ゲームオブジェクト(キャラクター、背景など)をシーン上に配置し、スクリプトを用いて動きやルールを定義します。
落下検知の基本
「落下したらゲームオーバー」という機能を実装するには、まずプレイヤーが「落下」したことを検知する必要があります。これは、プレイヤーの位置(Y座標)がある一定値以下になった時、またはプレイヤーが特定のオブジェクト(「落下エリア」)に触れた時に実行されるイベントとして設定できます。この記事では特定のオブジェクトに触れた時にゲームオーバーにする方法を紹介します。
オブジェクトの配置
3DオブジェクトのCube、Planeを配置して、色をつけました。CubeにRigidbodyをアタッチしました。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-05_203841.png)
Planeの下のあたりに落下を感知させるためのオブジェクトを配置します。この記事ではCubeを配置します。名前をGameOverAreaに変更してサイズを調整しました。
Coliderのistriggerにチェックを入れます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-05_205047.png)
UI→Textを配置してサイズを調整します。完成したらチェックを外して非表示にしておきます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-05_205750.png)
スクリプトの作成
新しくC#スクリプトを作成しました。作成したスクリプトをCubeにアタッチして、inspector画面からGameOverTextを設定しました。
このスクリプトはUnityでの基本的なキューブの動きとゲームオーバーのロジックを実装するためのものです。キューブを矢印キーで操作して、特定のエリアに触れるとゲームオーバーとなる仕組みを示しています。以下にその主要な機能を説明します。
スクリプトの概要
- 変数宣言
gameOverText
: ゲームオーバー時に表示するテキストのGameObjectをInspectorから割り当てるための変数です。speed
: キューブが移動する速度を設定します。
- Updateメソッド
Update
メソッド内で、矢印キーの入力を検知しています。それぞれの方向キーに応じてキューブを移動させる処理を行います。transform.Translate
メソッドを使用して、キューブの位置を変更しています。
- OnTriggerEnterメソッド
OnTriggerEnter
はColliderが別のColliderに触れた時に呼び出されるメソッドです。ここでは、他のGameObjectの名前が”GameOverArea”であるかどうかを確認しています。- 条件が真の場合、キューブを破壊(
Destroy
)し、ゲームオーバーテキストを表示(SetActive(true)
)します。
注意点
- このスクリプトを動作させるには、Unityエディタ上でゲームオブジェクトにアタッチして使用します。
gameOverText
変数には、ゲームオーバー時に表示したいテキストのGameObjectをInspectorから割り当てる必要があります。- “GameOverArea”という名前のGameObjectには、
Collider
コンポーネントがトリガーとして設定されている必要があります。これにより、キューブがこのエリアに入った時にOnTriggerEnter
メソッドが発動します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMove : MonoBehaviour
{
[SerializeField] GameObject gameOverText;
private float speed = 0.1f;
void Update()
{
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(-speed, 0.0f, 0.0f);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(speed, 0.0f, 0.0f);
}
if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(0.0f, 0.0f, speed);
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(0.0f, 0.0f, -speed);
}
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "GameOverArea")
{
Destroy(this.gameObject);
gameOverText.SetActive(true);
}
}
}
まとめ
Unityで「落下したらゲームオーバーになる仕組み」を実装する方法は、基本的にはプレイヤーの落下を検知して、それに応じてゲームオーバーの処理を行うという流れです。この機能の実装には、物理的な位置の検知や、オブジェクトの触れ合いを利用する方法があり、ゲームの種類や設計に応じて最適な方法を選ぶことができます。