はじめに
Unityでオブジェクトを動かす方法はいくつかありますが、今回はMoveTowards
関数を使ってオブジェクトを指定した座標まで往復運動させる方法を紹介します。これにより、オブジェクトが一定のスピードで目的地に向かい、折り返し地点で方向を変えて戻る動きを実現できます。
Unityを触ったことがないという方はコチラの記事から見てみてください!
Step 1: オブジェクトを配置しよう
まず、Unityエディタを開き、シーンにキューブを配置します。
- ヒエラルキー(Hierarchy)ウィンドウで右クリック
- 3D Object -> Cubeを選択
これでシーンにキューブが配置されました。
Step 2: スクリプトを作成しよう
次に、キューブを動かすスクリプトを作成します。
- 新しいスクリプトを作成
- プロジェクトウィンドウで右クリックします。
- 「Create」→「C# Script」を選択します。
- スクリプトの名前を「CubeMove」とします。
- スクリプトのコードを編集
- 作成した「CubeMove」スクリプトをダブルクリックして開きます。
- 以下のコードをコピーして貼り付けます。
コード全体の説明
このスクリプトは、UnityのMonoBehaviour
を使ったクラスCubeMove
です。このスクリプトをキューブにアタッチすると、キューブがZ軸に沿って前後に動きます。
各部分の説明
1. using UnityEngine;
これはUnityの機能を使うための宣言です。これがないとUnityのクラスやメソッドが使えません。
2. public class CubeMove : MonoBehaviour
これはCubeMove
という新しいクラスを定義しています。このクラスはMonoBehaviour
というUnityの基本クラスを継承しています。これにより、このクラスをアタッチしたオブジェクトはUnityのライフサイクルイベント(例えばUpdate
)を使うことができます。
3. private float speed = 5.0f;
speed
という名前の浮動小数点数(小数を含む数値)を宣言し、初期値を5.0fに設定しています。この変数はキューブが動く速さを決めます。
4. private bool flag;
flag
という名前の真偽値(trueかfalseを取る変数)を宣言しています。この変数はキューブが前進するか後退するかを決めます。
5. void Update()
Update
メソッドは、フレームごとに1回呼ばれるメソッドです。ゲームの中でオブジェクトの動きを制御するときによく使います。
6. if (transform.position.z >= 3) flag = true;
キューブの位置がZ軸で3以上になったら、flag
をtrue
にします。これはキューブが後退を始めるタイミングです。
7. else if (transform.position.z <= -3) flag = false;
キューブの位置がZ軸で-3以下になったら、flag
をfalse
にします。これはキューブが前進を始めるタイミングです。
8. if (flag) transform.position = Vector3.MoveTowards(transform.position, new Vector3(0, 0, -3), speed * Time.deltaTime);
flag
がtrue
のとき、キューブはZ軸の-3の位置に向かって動きます。Vector3.MoveTowards
は現在の位置から目標の位置へ向かって移動させるメソッドです。
9. else transform.position = Vector3.MoveTowards(transform.position, new Vector3(0, 0, 3), speed * Time.deltaTime);
flag
がfalse
のとき、キューブはZ軸の3の位置に向かって動きます。
全体の動き
- キューブがZ軸の3以上の位置に到達すると、
flag
がtrue
になり、キューブは後退を始めます。 - キューブがZ軸の-3以下の位置に到達すると、
flag
がfalse
になり、キューブは前進を始めます。 - この動きを繰り返し、キューブはZ軸に沿って前後に動き続けます。
using UnityEngine;
public class CubeMove : MonoBehaviour
{
private float speed = 5.0f;
private bool flag;
void Update()
{
if (transform.position.z >= 3)
flag = true;
else if (transform.position.z <= -3)
flag = false;
if (flag)
transform.position = Vector3.MoveTowards(transform.position, new Vector3(0, 0, -3), speed * Time.deltaTime);
else
transform.position = Vector3.MoveTowards(transform.position, new Vector3(0, 0, 3), speed * Time.deltaTime);
}
}
スクリプトをアタッチしよう
- ヒエラルキー(Hierarchy)ウィンドウでキューブを選択
- インスペクター(Inspector)ウィンドウにあるキューブに、先ほど作成した
CubeMove
スクリプトをドラッグ&ドロップ
Step 3: 実行して動作を確認しよう
シーンを再生すると、キューブがz
軸に沿って-3から3の間を往復する動きを確認できるはずです。
これで、MoveTowards
を使ってキューブを往復運動させる方法が理解できたと思います。ぜひ試してみてくださいね!
まとめ
今回は、Unityでオブジェクトを往復運動させる方法について解説しました!
シンプルなスクリプトでオブジェクトに動きをつけると、ゲームのクオリティが一気にアップしますね。
今回のポイントをおさらいしてみましょう:
- キューブの配置とスクリプトの作成
ヒエラルキーからキューブを追加し、C#スクリプトを使ってオブジェクトを動かしました。 - スクリプトをキューブにアタッチ
スクリプトをオブジェクトに適用するのはドラッグ&ドロップで簡単! - スクリプトで往復運動を実現
Vector3.MoveTowards
を使い、指定範囲でスムーズな往復運動を作成しました。
Unity初心者の方も、この記事を参考にすれば、同じ動きを再現するのはとても簡単です。とはいえ、「もっと簡単に動きを実装したい!」「スクリプトを書くのがちょっと苦手…」という方もいるかもしれません。
そんなときは、Playmaker という便利なアセットがおすすめです!
プログラミングの知識が少なくても視覚的にスクリプトを組み立てられるので、初心者から上級者まで幅広く使われています。効率よくプロジェクトを進めるなら一度チェックしてみてくださいね。
Unityはアイデア次第で無限の可能性があります。ぜひ今回の内容を活用して、楽しいゲーム開発ライフを楽しんでください!🎮✨
よくある質問(Q&A)
- Qキューブが往復しない場合はどうすればいいですか?
- A
スクリプト内の条件文を確認してください。キューブの
z
座標が3
または-3
に達しているかどうかを確認し、それに応じてflag
を切り替える必要があります。
- Qキューブの速度を変更したい場合はどうすればいいですか?
- A
スクリプト内の
speed
変数の値を変更します。例えば、speed = 2.0f;
に変更すると、キューブの移動速度が遅くなります。
- Q他のオブジェクトにも同じスクリプトを使いたい場合はどうすればいいですか?
- A
同じスクリプトを他のオブジェクトにアタッチし、それぞれのオブジェクトの位置を調整します。このスクリプトは共通の動作をするので、複数のオブジェクトに簡単に適用できます。