こんにちは!今回はUnityで、クリックごとにボールを発射し、発射するたびに3種類のPrefabを順番に切り替える方法を紹介します。プログラムは初心者にもわかりやすいように説明するので、一緒にやってみましょう!
ステップ1: プレファブの準備
- ボールとして使いたい3種類のオブジェクトを作成します。例えば、3つの異なる色の球体を作るといいでしょう。
- Hierarchyウィンドウで右クリック →
3D Object
→Sphere
を選択します。これを3つ作ります。
- Hierarchyウィンドウで右クリック →
- それぞれの球体に異なる色を設定します。色の設定は、プロジェクトウィンドウを右クリック「Create」→「Material」を選択し、色を設定して「Sphere」にアタッチします。
- 作成した3つの球体をそれぞれPrefabとして保存します。Prefabにするためには、Hierarchyウィンドウから球体をプロジェクトウィンドウにドラッグ&ドロップします。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-14_005539.png)
ステップ2: スクリプトの作成
- プロジェクトウィンドウで右クリック →
Create
→C# Script
を選び、スクリプトをBallShooter
と名付けます。 BallShooter
スクリプトをダブルクリックして開き、以下のコードを追加します。
コード全体の説明
- クラスの宣言:
BallShooter
というクラスを作ります。 - 変数の定義:ボールの配列と、カウント用の変数を用意します。
Start
メソッド:ゲームが始まった時に、カウントを0にします。Update
メソッド:毎フレーム実行され、クリックされたらボールを発射します。
各部分の説明
1. クラスと変数の定義
public class BallShooter : MonoBehaviour
{
public GameObject[] ballArray;
private int count;
public GameObject[] ballArray;
:発射するボールの種類を格納する配列です。GameObject
はUnity内で扱う3Dオブジェクトを意味します。private int count;
:ボールを発射した回数を記録するための変数です。private
なのでこのクラス内でのみ使います。
2. Start
メソッド
void Start()
{
count = 0;
}
void Start()
:このメソッドはゲーム開始時に一度だけ実行されます。count = 0;
:ボールを発射した回数を0に初期化します。
3. Update
メソッド
void Update()
{
if (count < ballArray.Length)
{
if (Input.GetMouseButtonDown(0))
{
GameObject ball = GameObject.Instantiate(ballArray[count]) as GameObject;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 dir = ray.direction;
ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
count++;
}
}
else
{
count = 0;
}
}
}
void Update()
:このメソッドは毎フレーム実行されます。ゲームの進行中に常に動く部分です。if (count < ballArray.Length)
:まだ発射していないボールがあるか確認します。if (Input.GetMouseButtonDown(0))
:マウスの左クリックが押されたら以下の処理を行います。GameObject ball = GameObject.Instantiate(ballArray[count]) as GameObject;
:現在のカウントに対応するボールを生成します。Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
:カメラからマウスの位置に向かってレイ(光線)を飛ばします。Vector3 dir = ray.direction;
:レイの飛んでいる方向を取得します。ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
:生成したボールに力を加えて発射します。3000
は力の大きさです。count++;
:ボールを発射したのでカウントを1増やします。
else { count = 0; }
:もし全てのボールを発射し終えたら、カウントを0にリセットします。
全体の動き
- ゲームが始まるとカウントが0に初期化されます。
- プレイヤーがマウスの左クリックをすると、
ballArray
の中のボールが一つずつ発射されます。 - ボールはマウスの位置に向かって飛んでいきます。
- すべてのボールを発射し終えると、再びカウントが0に戻り、最初から繰り返します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallShooter : MonoBehaviour
{
public GameObject[] ballArray;
private int count;
void Start()
{
count = 0;
}
void Update()
{
if (count < ballArray.Length)
{
if (Input.GetMouseButtonDown(0))
{
GameObject ball = GameObject.Instantiate(ballArray[count]) as GameObject;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 dir = ray.direction;
ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
count++;
}
}
else
{
count = 0;
}
}
}
ステップ3: スクリプトの設定
- 空のオブジェクトなどを作成し、
BallShooter
スクリプトをドラッグ&ドロップしてアタッチします。 - Inspectorウィンドウで
BallShooter
スクリプトのコンポーネントを確認し、ballArray
に先ほど作成した3つのPrefabを順番にドラッグ&ドロップして設定します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-14_010934.png)
ステップ4: テストと調整
- ゲームを再生して、マウスの左クリックをしてみてください。クリックごとに3種類のボールが順番に発射されることを確認します。
これで、クリックごとに3種類のボールPrefabを順番に発射する機能が完成です!シンプルなスクリプトですが、色々と応用が効くのでぜひ試してみてくださいね。楽しんで学びましょう!
おすすめのアセット
「Platformer Engine」は、Unityでプラットフォーマーゲームを簡単に作成できるテンプレートです。初心者にも使いやすい設計になっており、基本的なキャラクターコントロールや敵の配置、アイテム収集など、プラットフォーマーに必要な機能が一通り揃っています。特に注目すべき特徴は、使いやすいエディター拡張機能で、これによりゲームのレベルデザインが直感的に行えます。また、コードのサンプルも豊富に含まれているため、プログラミングの勉強にも最適です。