はじめに
Unityでゲームを作る時、いろいろなオブジェクトを画面上に表示して動かすことがあります。今日は、Unityで「キューブ」、「スフィア」(球体)、そして「シリンダー」(円柱)をクリックするだけでランダムに生成する方法と、それらのオブジェクトを種類ごとに数える方法を紹介します。
ステップ1: Unityプロジェクトを準備する
まず、Unityを開いて新しいプロジェクトを作ります。プロジェクト名は何でも良いですが、ここでは「ObjectCounter」としてみましょう。
![](https://cbagames.jp/wp-content/uploads/2024/01/2024-01-27_184016.png)
ステップ2: 必要なオブジェクトを作成する
Unityのエディターで、3種類のオブジェクトを作成します。以下の手順で行います:
- 「GameObject」メニューから「3D Object」を選び、「Cube」をクリックしてキューブを作ります。
- 同じく「Sphere」を選んで球体を、そして「Cylinder」を選んで円柱を作ります。
これらのオブジェクトには、それぞれ「Cube」、「Sphere」、「Cylinder」という名前がついています。
ステップ3: タグを設定する
各オブジェクトにタグを設定して、後で識別しやすくします。タグを設定するには:
- オブジェクトを選択します。
- インスペクターパネルの上部にある「Tag」のドロップダウンメニューをクリックします。
- 「Add Tag…」を選んで新しいタグを追加します。それぞれ「Cube」、「Sphere」、「Cylinder」と入力して保存します。
- 再びオブジェクトを選び、「Tag」から作成したタグを選択します。
ステップ4:プレファブを作成する
キューブ、スフィア、シリンダーをそれぞれ選択した状態で、Hierarchyウィンドウから、プロジェクトウィンドウの「Assets」フォルダ内の任意の場所へドラッグ&ドロップします。これにより、そのオブジェクトのプレハブが作成されます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-20_190400.png)
ステップ5:テキストの配置
CubeText、SphereText、CylinderTextという名前の3つのテキストを作成し、それぞれのテキストの内容を変更し、色、サイズ、位置を調整します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-20_191015.png)
ステップ6: クリックでオブジェクトを生成するスクリプトを書く
Unityでは、C#という言語を使ってプログラムを書きます。以下のスクリプトを作成して、マウスでクリックするとランダムにオブジェクトが生成されるようにします。
スクリプトの解説
- 必要なライブラリのインポート:
UnityEngine
とUnityEngine.UI
を使用して、ゲームの機能とUI機能を利用します。
- クラス変数の宣言:
mousePosition
: マウスの位置を保持するための変数です。count
: 生成するオブジェクトの種類をランダムに選ぶためのインデックス。prefabArray
: 生成するオブジェクトのプレハブを格納する配列。cubeCountText
,cylinderCountText
,sphereCountText
: 各オブジェクトの数を表示するUIテキスト。
- Updateメソッド:
- ゲーム内でフレームごとに実行されます。
- マウスの左ボタンがクリックされた場合(
Input.GetMouseButtonDown(0)
)、指定されたプレハブのひとつをランダムに選んで、マウスの位置にインスタンス化します。 - オブジェクトの位置は、マウスのスクリーン座標をワールド座標に変換して指定します。
- オブジェクトの集計:
GameObject.FindGameObjectsWithTag
メソッドを使用して、特定のタグ(”Cube”, “Cylinder”, “Sphere”)が付けられたすべてのオブジェクトを見つけ、その数をカウントします。- 各カテゴリのオブジェクト数をテキストとしてUIに表示します。
使用方法
- このスクリプトを使用するには、Unity エディターで各プレハブを
prefabArray
にドラッグアンドドロップして設定し、cubeCountText
,cylinderCountText
,sphereCountText
にはUIのTextコンポーネントを設定する必要があります。 - プレハブには適切なタグを設定し、スクリプトがそれらを識別できるようにします。
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
private Vector3 mousePosition;
private int count;
public GameObject[] prefabArray;
public Text cubeCountText;
public Text cylinderCountText;
public Text sphereCountText;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
count = Random.Range(0, prefabArray.Length);
mousePosition = Input.mousePosition;
mousePosition.z = 10.0f;
Instantiate(prefabArray[count], Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
}
GameObject[] cubeObjects = GameObject.FindGameObjectsWithTag("Cube");
GameObject[] cylinderObjects = GameObject.FindGameObjectsWithTag("Cylinder");
GameObject[] sphereObjects = GameObject.FindGameObjectsWithTag("Sphere");
cubeCountText.text = "Cube: " + cubeObjects.Length.ToString();
cylinderCountText.text = "Cylinder: " + cylinderObjects.Length.ToString();
sphereCountText.text = "Sphere: " + sphereObjects.Length.ToString();
}
}
空のオブジェクトを作成してこのスクリプトをアタッチして使用します。inspector画面からPrefabとTextを設定します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-20_191647.png)
まとめ
これで、Unityでオブジェクトをランダムに生成し、それらを集計する基本的なシステムができました!この方法を使えば、さまざまなゲームで役立つ機能を簡単に追加できます。楽しんでプログラミングを学びましょう!
おすすめのアセット
「Hypercasual Runner Starter Kit」は、簡単にランナーゲームを作れるUnityアセットです。このキットを使えば、プログラミングの知識がなくてもすぐにゲームの制作を始められます。キットには基本的なランナーゲームの要素が全て含まれており、キャラクターの移動、障害物の配置、得点システムなど、すぐに使える機能が揃っています。