🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

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

Q&A

解決済

1回答

4714閲覧

オブジェクトが地面についた時にRigidBodyを削除するスクリプト

sana0000

総合スコア1

Unity

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

0グッド

0クリップ

投稿2021/01/05 09:07

編集2021/01/05 11:07

前提・実現したいこと

上から落ちてきたオブジェクトが地面についたときにRigidBodyを削除するスクリプトを書きたいのですが、スクリプトをほとんど書いたことがない初心者なのでネットで調べてもよくわかりませんでした。
教えていただけると幸いです

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class OnCollision_DestoryRb : MonoBehaviour 6{ 7 public string tagName; 8 public void OnCollisionEnter(Collision collision) 9 { 10 if(collision.gameObject.tag==tagName) 11 { 12 Rigidbody rb = collision.gameObject.GetComponent<Rigidbody>(); 13 Destroy(rb); 14 } 15 } 16}

試したこと

補足情報(FW/ツールのバージョンなど)

Unity 2019.4.11f1
visual studio 2017

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

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

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

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

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

guest

回答1

0

ベストアンサー

#追記
スクリプトはボール側(地面ではないほう)にくっつけるイメージであってますか?
だったら、「相手が地面かを確認」→「自分のRbを消す」という感じになるのでDestroyすべきは自分自身のコンポーネントです。

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class OnCollision_DestoryRb : MonoBehaviour { 6 public string tagName; 7 public void OnCollisionEnter(Collision collision) { 8 if (collision.gameObject.tag == tagName) { // <-- collision.gameObject はぶつかった相手 9 Rigidbody rb = GetComponent<Rigidbody>(); // <-- Rigidbodyを消す相手は自分自身 10 Destroy(rb); 11 } 12 } 13}

#初回回答
試してないですが、ソースコード見る限りそれでも動くは動くであってますかね?
対象が全部なので、消去するときの条件を地面のときに限定したいってことでしょうか。

対象の判定は色々やり方がありますが、よくあるのがTagを設定して判別する方法です。
地面に「Ground」タグとかを追加して、提示されているソースコードを改良しぶつかった相手が「Ground」だったら地面にあたったと考えることができます。

参考
UnityのRigidbodyとColliderで衝突判定 ※ コードがJavascriptなので注意。C#用に書き換えてください
https://qiita.com/yando/items/0cd2daaf1314c0674bbe#%E8%A1%9D%E7%AA%81%E5%AF%BE%E8%B1%A1%E3%81%AE%E5%88%A4%E5%88%A5

Unityで衝突判定のスクリプトで物体を消したい
https://ja.stackoverflow.com/questions/43266/unity%E3%81%A7%E8%A1%9D%E7%AA%81%E5%88%A4%E5%AE%9A%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E7%89%A9%E4%BD%93%E3%82%92%E6%B6%88%E3%81%97%E3%81%9F%E3%81%84

投稿2021/01/05 09:28

編集2021/01/06 00:36
hogefugapiyo

総合スコア3302

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

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

sana0000

2021/01/05 11:16

回答ありがとうございます! Tagを設定して判別する方法にしてみようとスクリプトを書き換えてみたのですが、RigidBodyを消すことはできませんでした。 エラーが出ていないので何が間違っているのか分からなくて困っています。 ソースコードを更新したので何が違うのか見ていただきたいです…!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問