質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1017閲覧

unity2Dで特定のタグを持ったオブジェクトに触れた時、特定の座標へワープするプログラムについて教えてください。

aiueokaki10

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2023/04/21 15:35

実現したいこと

warpタグを付けたオブジェクトに触れた時に特定の座標へ移動するプログラム。(player側に付与するプログラム)

前提

C♯言語を使ったunity2Dでワープエリアを作っています。

試したこと

unity3Dで使われている座標変更のプログラムのvector3の部分をvector2に変更しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この場合、ひとまとめに処理するのではなく、いくつかの処理に分けるのが大切です。
これらの処理は、いずれも初歩的な内容(当たり判定が複雑であるぐらい)なので、理解していれば難しくありません。
また、詳細が必要であれば自分で調べてください。

何らかのゲームオブジェクトに触れたかどうかを判定するプログラム

何かオブジェクトがぶつかったかどうかの判定は、OnTriggerEnter()かOnCollisionEnter()を使います。
また、2D用のOnTriggerEnter2D()かOnCollisionEnter2D()もあります。
ワープゾーンの場合は、物理判定は要らないので、OnTriggerEnter2D()がよいでしょう。
ただしその場合、ワープゾーンのRigidbody2DのIs Triggerをオンにしないと動作しませんので注意してください。

その当たったゲームオブジェクトを取得する方法

上記のOnTriggerEnter2D()の引数には、当たったゲームオブジェクトのCollider2Dが入ります。
このCollider2DのgameObjectプロパティから、本体のゲームオブジェクトを取得することが出来ます。

そのゲームオブジェクトにwarpタグが付いているかどうかの判定

先ほどのゲームオブジェクト(GameObject)のtagプロパティからタグ名を取得できるので、それを比較すればよいです。

ワープ移動する方法

移動したいゲームオブジェクトのtransform.positionを変更するだけです。


以上を理解していれば、以下のコードにたどり着けます。

C#

1void OnTriggerEnter2D(Collider2D collider) 2{ 3 // collider.gameObjectでゲームオブジェクトを取得し、そのtagを比較する 4 if (collider.gameObject.tag == "warp") 5 { 6 // ワープ移動。座標は必要に応じて変更してください。 7 transform.position = new Vector3(0.0f, 0.0f, 0.0f); 8 } 9}

参考元

なお繰り返しますが、ワープゾーンにRigidbody2Dをアタッチして、Is Triggerをオンにしないと動作しませんので注意してください。

投稿2023/04/22 01:37

fiveHundred

総合スコア10104

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問