はじめに
ゲームを作る中で、キャラクターが触れたオブジェクトによって特定の場所にワープする仕組みは、アクションゲームやパズルゲームなどでよく使われます。例えば、プレイヤーが特定のエリアに到達すると次のステージに進む、または隠しエリアに移動する、といった演出に使える便利な機能です。
この記事では、Unityを使って「オブジェクトに触れると特定の場所にワープする」機能を初心者の方にもわかりやすく解説します。
「ワープ」というと難しく感じるかもしれませんが、実際に作ってみると驚くほど簡単です。スクリプトの作成から設定方法まで、丁寧に説明していくので、一緒にやってみましょう!
Unityを触ったことがないという方はコチラの記事から見てみてください!
1. 必要な準備
Unityでオブジェクトに触れたときに特定の場所にワープする仕組みを作るには、以下の手順でプロジェクトを準備します。
1. Plane(床)を作成する
- ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「3D Object」→「Plane」を選択します。
- 作成したオブジェクトの名前を「Floor」に変更します。
- 床の大きさを調整する場合は、スケール値をインスペクター(Inspector)で設定してください(例:
Scale X: 10, Z: 10)。
2. Sphere(プレイヤー)を作成する
- ヒエラルキーで右クリックし、「3D Object」→「Sphere」を選択します。
- 名前を「Player」に変更します。
- インスペクターで「Add Component」をクリックし、「Rigidbody」を追加します。
- Rigidbodyは物理演算を適用して動きを自然にするために必要です。
3. Cube(触れるとワープするオブジェクト)を作成する
- ヒエラルキーで右クリックし、「3D Object」→「Cube」を選択します。
- 名前を「WarpTrigger」に変更します。
- インスペクターで「Is Trigger」にチェックを入れます。
- 「Is Trigger」を設定することで、接触イベントがトリガーとして動作します。
- inspector画面から「WarpTrigger」という名前でタグを作成し設定しましょう。
4. Cylinder(ワープ先のオブジェクト)を作成する
- ヒエラルキーで右クリックし、「3D Object」→「Cylinder」を選択します。
- 名前を「WarpTarget」に変更します。
- インスペクターで「Collider」を削除します(不要な衝突を防ぐため)。
5. 色を設定して見た目を分かりやすくする
それぞれのオブジェクトに色を設定して、役割が分かりやすくなるようにしましょう:

- プロジェクト(Project)ウィンドウで右クリックし、「Create」→「Material」を選択して新しいマテリアルを作成します。
- 各マテリアルに適当な名前を付け(例:「GreenFloor」)、色を設定します。
- 作成したマテリアルを対応するオブジェクトにドラッグ&ドロップします。
2. スクリプトの作成
Unityでオブジェクトが特定の場所にワープする機能を実現するには、スクリプトを作成してゲーム内で動作するように設定します。以下の手順に従ってスクリプトを作成しましょう。
1. 新しいスクリプトを作成する
- プロジェクト(Project)ウィンドウを開く
Unityの下部に表示されている「Project」ウィンドウで空白部分を右クリックします。 - C#スクリプトを作成する
「Create」→「C# Script」を選択して、新しいスクリプトを作成します。 - 名前を付ける
スクリプトの名前を「JumpToLocation」に変更します。名前を付ける際は、スペースを入れずに、頭文字を大文字にしましょう。
2. スクリプトを開いてコードを記述する
- 作成した「JumpToLocation」スクリプトをダブルクリックして開きます。Visual StudioやRiderなど、Unityに連携したコードエディタが起動します。
- 以下のコードをコピーしてスクリプトに貼り付けてください:
using UnityEngine;
public class JumpToLocation : MonoBehaviour
{
public Transform warpTarget; // ワープ先のターゲット位置
public float moveSpeed = 5f; // プレイヤーの移動速度
void Update()
{
// キーボード入力でSphereを移動させる
float moveX = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
float moveZ = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;
transform.Translate(new Vector3(moveX, 0, moveZ));
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("WarpTrigger"))
{
// ワープポイントに移動する
transform.position = warpTarget.position;
}
}
}
3. スクリプトの内容を説明
warpTarget
ワープ先の位置を指定するための変数です。インスペクターから「WarpTarget」オブジェクトをドラッグして設定します。moveSpeed
プレイヤー(Sphere)の移動速度を設定するための変数です。Updateメソッド
キーボードの矢印キーやWASDキーでプレイヤーを動かします。Input.GetAxisを使って方向入力を取得し、transform.Translateでオブジェクトを移動させます。OnTriggerEnterメソッド
プレイヤーが「WarpTrigger」に触れると、プレイヤーの位置が「warpTarget」の位置に移動します。
① 変数の宣言
public Transform warpTarget; // ワープ先のターゲット位置
public float moveSpeed = 5f; // プレイヤーの移動速度
warpTarget:- プレイヤーがワープする目標地点を指定します。
Transformという型を使って、位置や回転を保持できます。- Unityエディターのインスペクターでこの値を設定できます。
moveSpeed:- プレイヤーの移動速度を調整するための変数です。
- 初期値は5に設定されていますが、インスペクターで自由に変更できます。
② Updateメソッドで移動処理
void Update()
{
// キーボード入力でSphereを移動させる
float moveX = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
float moveZ = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;
transform.Translate(new Vector3(moveX, 0, moveZ));
}
Updateメソッド:- 毎フレーム呼び出されるメソッドです。オブジェクトの動きを管理しています。
- キーボード入力:
Input.GetAxis("Horizontal"): 左右の移動量を取得します。デフォルトではA/Dキーや矢印キーで動きます。Input.GetAxis("Vertical"): 前後の移動量を取得します。デフォルトではW/Sキーや矢印キーで動きます。
- 移動量の計算:
- 入力値に移動速度(
moveSpeed)を掛け、Time.deltaTimeを掛けています。Time.deltaTimeはフレーム間の時間を計算するためのもの。これを使うとフレームレートに依存しない動きになります。
- 入力値に移動速度(
transform.Translate:- オブジェクトを新しい位置に移動させます。
- 今回は
moveX(左右)とmoveZ(前後)で新しい位置を計算しています。
③ OnTriggerEnterメソッドでワープ処理
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("WarpTrigger"))
{
// ワープポイントに移動する
transform.position = warpTarget.position;
}
}
OnTriggerEnterメソッド:- 他のオブジェクトとぶつかったときに呼ばれるメソッドです。
- ただし、このメソッドが動作するには、次の条件が必要です:
- このオブジェクトに
Colliderが付いている。 - その
Colliderに「Is Trigger」がチェックされている。
- このオブジェクトに
- 条件判定:
other.gameObject.CompareTag("WarpTrigger")で、ぶつかったオブジェクトが「WarpTrigger」タグを持っているか確認します。- タグはUnityエディターでオブジェクトに設定できます。
- ワープ処理:
transform.position = warpTarget.position:- プレイヤーの位置を
warpTargetの位置に変更します。 - 瞬時に指定した場所に移動できます。
- プレイヤーの位置を
3. 全体の流れ
- プレイヤーの移動:
- キーボードの入力に応じて、プレイヤーを自由に動かせます。
- ワープ判定:
- プレイヤーが「WarpTrigger」タグのついたオブジェクトに触れると、その瞬間に
warpTargetで指定された場所に移動します。
- プレイヤーが「WarpTrigger」タグのついたオブジェクトに触れると、その瞬間に
4. コードを保存する
コードの編集が終わったら、Ctrl+S(またはCmd+S)で保存してください。
5. スクリプトを設定する
1. スクリプトをアタッチする
まず、作成した「JumpToLocation」スクリプトを「Sphere」にアタッチします。
- ヒエラルキー(Hierarchy)ウィンドウで「Sphere」をクリックして選択します。
- プロジェクト(Project)ウィンドウで「JumpToLocation」スクリプトを見つけます。
- 「JumpToLocation」スクリプトをドラッグして、「Sphere」にドロップします。
2. ターゲット位置を設定する
次に、スクリプトで指定するワープ先(warpTarget)の位置を設定します。
- 再度「Sphere」を選び、インスペクター(Inspector)ウィンドウを確認します。
- 「JumpToLocation」スクリプト内の「Warp Target」というフィールドが表示されているはずです。
- 「Cylinder」オブジェクトをドラッグして、このフィールドにドロップします。
6. 実行してみよう
それでは、設定が完了したら、実際に動作を確認してみましょう!以下の手順でテストを行います。
1. プレイモードを開始する
Unityエディターの上部にある「▶」(再生ボタン)をクリックして、プレイモードを開始します。

これで、Unityでオブジェクトに触れたら特定の場所にワープさせる機能が完成しました!ワープを活用して、さまざまな仕掛けやゲームデザインを試してみてください。
まとめ
今回は、Unityでオブジェクトに触れたときに特定の場所へワープさせる方法について解説しました。この方法を応用すれば、さまざまなゲームシステムを作ることができます。
例えば、パズルゲームのワープギミックや、探索ゲームの隠しルートの実装などです。Unityを使えば、簡単なアイデアでも形にできますので、ぜひ挑戦してみてください!
おすすめのアセット
もし、見た目をさらに魅力的に仕上げたい場合は、専用のエフェクトを活用するのも一つの手です。
例えば、The Beautiful Portal – Level Up, Teleport, Warp VFX というアセットは、視覚的にも非常にインパクトのあるワープエフェクトを簡単にゲームに追加できます。
このアセットを使えば、ポータルを通る際やレベルアップ、テレポートシーンなどに美しいパーティクルエフェクトを簡単に実装可能です。プログラム不要で、プロジェクトに直接ドラッグ&ドロップするだけで使えるので、時間短縮にもなります!
視覚的な演出が強化されると、プレイヤーの没入感も大幅にアップします。これからワープ機能を本格的なゲームに活用したいと考えている方は、ぜひチェックしてみてください。おしゃれなワープエフェクトを使って、あなたのゲームをさらに魅力的なものにしましょう! 😊
あわせて読みたい
ワープやオブジェクト移動に関連する以下の記事もあわせてチェックしてみてください!
- 🔄 Unity初心者必見!オブジェクトを特定の座標まで移動させる簡単スクリプト
特定の位置まで自然に移動させたいときの参考に! - 🎯 Unityでクリック位置にオブジェクトを向ける方法を徹底解説
ワープ後の向きを制御したいときに便利なテクニックです。 - 🚀 Unityでクリックした場所にPrefabを生成し、1秒後に消滅させる仕組みを作ろう
一時的にオブジェクトを出現させて演出を加えたい時に活用できます。 - 📏 Unityで3Dオブジェクト間の距離を測定しよう!簡単スクリプト解説
ワープ元とワープ先の距離をチェックして、条件分岐に使うのもアリ! - 💡 Unity初心者向け:ジャンプ&壁に張り付く機能を簡単実装!
ワープと組み合わせることで、複雑な移動アクションが可能になります。
よくある質問(FAQ)
- Qワープがうまくいきません。なぜでしょうか?
- A
スクリプトが正しく設定されているか、ターゲット位置が設定されているか確認してください。また、「Is Trigger」の設定も確認しましょう。
- Qプレイヤーが動きません。
- A
「Rigidbody」がアタッチされていないか、移動速度(moveSpeed)が0になっていないか確認してください。
- Q他のオブジェクトでもワープ機能を使えますか?
- A
はい、タグを設定することで他のオブジェクトにも対応可能です。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。