Unityを使って、クリックでSphere(球体)のPrefabを出現させ、1秒後に自動で消える仕組みを作る方法を説明します。とてもシンプルな手順なので、初心者でも安心して取り組めますよ!
ステップ1: SphereのPrefabを作成
- Sphereを作成します。Hierarchyウィンドウで「右クリック」→「3D Object」→「Sphere」を選びます。好みで色などを付けます。
- 作成したSphereをプレハブ(Prefab)化します。ProjectウィンドウにSphereをドラッグ&ドロップします。これでSphereがPrefabとして保存されました。
- Hierarchyウィンドウから元のSphereを削除します。右クリックして「Delete」を選びます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-14_005539.png)
ステップ2: スクリプトを作成
- 新しいC#スクリプトを作成します。Projectウィンドウで「右クリック」→「Create」→「C# Script」を選び、名前を「PrefabSpawner」にします。
- 作成した「PrefabSpawner」スクリプトをダブルクリックしてVisual Studioで開きます。
- 以下のコードをスクリプトにコピー&ペーストします:
コード全体の説明
このスクリプトを使うと、画面をクリックしたときに指定されたプレハブがその位置に生成され、1秒後に自動的に消えます。スクリプトは PrefabSpawner
というクラスを定義しており、これをアタッチしたゲームオブジェクトがこの動作を実行します。
各部分の説明
- クラスの定義:
public class PrefabSpawner : MonoBehaviour
PrefabSpawner
という名前のクラスを定義し、UnityのMonoBehaviour
クラスを継承しています。これにより、このクラスがUnityのゲームオブジェクトにアタッチできるようになります。- プレハブのフィールド定義:
[SerializeField] GameObject prefab;
- これはインスペクターから設定できるようにするためのプレハブを指す変数です。
SerializeField
属性を使うことで、プライベート変数でもUnityエディターで設定可能になります。 - クリック位置の変数:
private Vector3 clickPos;
マウスクリックの位置を保存するための変数です。
Vector3
は三次元空間の座標を表します。- Updateメソッド:
void Update()
Update
メソッドは、毎フレーム呼び出される特別なメソッドです。ここにゲームのメインループの処理を記述します。- マウスクリックの検出とプレハブの生成:
if (Input.GetMouseButtonDown(0))
{
clickPos = Input.mousePosition;
clickPos.z = 10.0f;
GameObject ball = Instantiate(prefab, Camera.main.ScreenToWorldPoint(clickPos), Quaternion.identity);
Destroy(ball, 1.0f);
}
Input.GetMouseButtonDown(0)
: マウスの左クリックを検出します。0
は左クリックを意味します。clickPos = Input.mousePosition;
: クリックした位置をスクリーン座標で取得します。clickPos.z = 10.0f;
: Z軸の位置を10に設定します。これは、カメラからの距離を設定するためです。Instantiate(prefab, Camera.main.ScreenToWorldPoint(clickPos), Quaternion.identity);
: プレハブをクリックした位置に生成します。ScreenToWorldPoint
を使ってスクリーン座標をワールド座標に変換しています。Quaternion.identity
は回転なしで生成することを意味します。Destroy(ball, 1.0f);
: 生成されたプレハブを1秒後に削除します。
全体の動き
- ゲームが実行されると、
Update
メソッドが毎フレーム呼び出されます。 - プレイヤーがマウスの左ボタンをクリックすると、そのクリック位置が取得されます。
- クリック位置にプレハブが生成され、1秒後に自動的に消えます。
using UnityEngine;
public class PrefabSpawner : MonoBehaviour
{
[SerializeField] GameObject prefab;
private Vector3 clickPos;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
clickPos = Input.mousePosition;
clickPos.z = 10.0f;
GameObject ball = Instantiate(prefab, Camera.main.ScreenToWorldPoint(clickPos), Quaternion.identity);
Destroy(ball, 1.0f);
}
}
}
ステップ3: スクリプトを設定
- PrefabSpawnerスクリプトをGameObjectにアタッチします。空のGameObjectをHierarchyウィンドウで作成(右クリック→「Create Empty」)し、名前を「SphereManager」にします。
- 「SphereManager」に作成した「PrefabSpawner」スクリプトをドラッグ&ドロップしてアタッチします。
- PrefabSpawnerスクリプトのPrefabフィールドにPrefabを設定します。SphereManagerを選択し、Inspectorウィンドウで「PrefabSpawner」スクリプトの「Prefab」フィールドに先ほど作成したSphereプレハブをドラッグ&ドロップします。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-14_181256.png)
ステップ4: テスト
- シーンを再生します。クリックするとSphereが出現し、1秒後に自動で消えることを確認します。
以上で完了です!クリックで球体が出現し、1秒後に消える仕組みができました。これをベースに、いろいろなオブジェクトや動作を追加して、自分だけのゲームを作ってみてくださいね。
おすすめのアセット
「Unblock Wood」は、パズルゲームのテンプレートです。プレイヤーは木のブロックをスライドさせて、特定のブロックを出口に導くというシンプルながらも頭を使うゲームです。このテンプレートは、Unityでゲームを作りたい初心者にぴったりです。
特徴としては、直感的な操作方法、美しい木目調のグラフィック、そして数々のレベルが用意されている点が挙げられます。また、このアセットには完全なソースコードが含まれているため、自分でカスタマイズすることも可能です。