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

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

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

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

2162閲覧

Compareタグが反応しない!

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/05/07 08:18

●作成しているゲーム
縦型の2Dゲームを作成しています。
ストーンに当たるとプレイヤーは爆発します。
人参をとるとプレイヤーではなく人参が消滅するようなプログラムを組みたいと思っています。
イメージ説明

●困っていること
人参に”point”というタグをつけて
人参に当たった時は人参がわが消滅するといった処理を行いたいです。
現状なぜかすり抜けてしまいます。
Debug.Logすら反応しない状況です。

●人参側の処理

C#

1private void OnCollisionEnter2D(Collision2D col) 2 { 3 if (col.gameObject.CompareTag("point")) 4 { 5 Destroy(col.gameObject); 6 } 7 }

●人参のインスペクター
イメージ説明

●ストーン側の処理(上手くいっている)

C#

1private void OnTriggerEnter2D(Collider2D collision) 2 { 3 Instantiate(explosion, transform.position, transform.rotation);//爆発プレファブの生成 4 Debug.Log("ぶつかったよ"); 5 //ぶつかったらプレイヤーが破壊される 6 Destroy(collision.gameObject); 7 }

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

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

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

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

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

guest

回答3

0

OnCollisionEnter2D メソッドの処理の一番上で、 Debug.Log を使って col.gameObject.tag を出力してみてください。
そして、文字列が "point" と同じか確認してみてください。

投稿2020/05/07 08:47

nskydiving

総合スコア6500

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

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

退会済みユーザー

退会済みユーザー

2020/05/07 08:58

回答ありがとうございます! 以下のようにコードを編成しました。 そもそも当たり判定が内容なのでDebug.Logに何も表示されませんでした、、、。 private void OnCollisionEnter2D(Collision2D col) { Debug.Log(col.gameObject.tag); if (col.gameObject.CompareTag("point")) { Destroy(col.gameObject); } }
nskydiving

2020/05/07 09:01

なるほど。タイトルが「Compareタグが反応しない!」だったので、タグの問題で、当たり判定があることは確認済みだと思ってしまいました。
退会済みユーザー

退会済みユーザー

2020/05/07 09:02

OnTrrigerに変えてみました! 以下のようなコードに書き換えたところ Debug.Log(Object) と出力されました private void OnTriggerEnter2D(Collider2D collision) { Debug.Log(collision.gameObject); if (collision.gameObject.CompareTag("point")) { Destroy(collision.gameObject); } }
退会済みユーザー

退会済みユーザー

2020/05/07 09:41

追記ですみません! PlayerManagerの方に下記のコードをつけたらできました!! private void OnTriggerEnter2D(Collider2D collision) { Debug.Log(collision.gameObject); if (collision.gameObject.CompareTag("point")) { Destroy(collision.gameObject); } }
guest

0

ベストアンサー

Is Triggerにチェックがついているからじゃないでしょうか。
TriggerでやるならOnTriggerEnter2Dとかのメソッドで接触判定を拾ってあげてはいかがでしょうか。

投稿2020/05/07 08:42

hogefugapiyo

総合スコア3302

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

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

退会済みユーザー

退会済みユーザー

2020/05/07 08:58

回答ありがとうございます! OnTriggerEnter2Dのメソッドで試してみようと思います!
退会済みユーザー

退会済みユーザー

2020/05/07 09:03

OnTrrigerに変えてみました! 以下のようなコードに書き換えたところ Debug.Log(Object) と出力されました コード ===== private void OnTriggerEnter2D(Collider2D collision) { Debug.Log(collision.gameObject); if (collision.gameObject.CompareTag("point")) { Destroy(collision.gameObject); } }
hogefugapiyo

2020/05/07 09:05

とりあえず判定は取れている感じでしょうか? Debug.Log(collision.gameObject.name); で接触したオブジェクトの名前をチェックしたり Debug.Log(collision.gameObject.tag); とかに変えてみてtag名が取得できているかかどうか なども確認してみてください。
退会済みユーザー

退会済みユーザー

2020/05/07 09:37 編集

Debug.Log(collision.gameObject.tag); Debug.Log(collision.gameObject.name); こちらで実行したら tag:Untagged name:Player と出てきました!
退会済みユーザー

退会済みユーザー

2020/05/07 09:40

追記ですみません! PlayerManagerの方に下記のコードをつけたらできました!! private void OnTriggerEnter2D(Collider2D collision) { Debug.Log(collision.gameObject); if (collision.gameObject.CompareTag("point")) { Destroy(collision.gameObject); } }
hogefugapiyo

2020/05/07 09:42

その内容だと人参側がPlayerの当たり判定を拾っているので 逆にするか、プレイヤーとの接触を取ればよさそうです
hogefugapiyo

2020/05/07 09:42

あ、書き込み中に返事がきてました。解決したようでよかったです
退会済みユーザー

退会済みユーザー

2020/05/07 09:51

本当にありがとうございます! こちらのゲーム完成したらAppStoreに審査出す予定です! もしよければツイッターをフォローいただけますと幸いです! @e_san_desuyo
guest

0

PlayerManagerの方に下記のコードをつけたらできました!!

private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log(collision.gameObject);
if (collision.gameObject.CompareTag("point"))
{
Destroy(collision.gameObject);
}
}

投稿2020/05/07 09:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問