実現したいこと
複数のオブジェクトに同じスクリプトをつけ、一つのスクリプト内でオブジェクトそれぞれのrigidbodyやboxcolliderを変更、コンポーネントを停止させたい。
前提
プレイヤーがオブジェクト内にいる際に特定のキーを押すと、そのオブジェクトはOntriggerstayやexitなどの判定が出なくなるようにしたいです。また、上記と同じオブジェクトを複数個作りたいです。
最初にspriteでobjectを作成した後にコントロールキー + d で新しく3個複製しました。それぞれのオブジェクトはtagで管理しています。
発生している問題・エラーメッセージ
this/this.gameobject/gameobjectの使い分けができていないのか、最初に作成したobjectのみがコンポーネントを停止し、複製したほかのオブジェクトはそのまま判定が出ている状態です。
エラーメッセージはなし
該当のソースコード
public class Chimney : MonoBehaviour
{
public GameManager gameManager;
Rigidbody2D rb;
// Start is called before the first frame update private void Start() { rb = GetComponent<Rigidbody2D>(); } private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.CompareTag("Player")) { collision.GetComponent<Player>().isOk = true; gameManager.showWinScreen = true; } } public void OnTriggerExit2D(Collider2D collision) { if (collision.gameObject.CompareTag("Player")) { collision.GetComponent<Player>().isOk = false; gameManager.showWinScreen = false; } } public void RoofFunction()//コンポーネントを停止 { Debug.Log("Stop"); this.GetComponent<Chimney>().enabled = false; rb.simulated = false ; rb.bodyType = RigidbodyType2D.Static; this.GetComponent<BoxCollider2D>().enabled = false; Debug.Log("Complete"); } public void Roof1Function()//コンポーネントを停止 { Debug.Log("Stop"); this.GetComponent<Chimney>().enabled = false; rb.simulated = false; // rb.bodyType = RigidbodyType2D.Static; this.GetComponent<BoxCollider2D>().enabled = false; Debug.Log("Complete"); }
}
試したこと
全く同じスクリプトをもう一つ作成し、アタッチし、試してみたところ思うような仕様ができました。しかし、同じ内容のスクリプトを複数個作成するのはいかがなものかと思い現在のやり方を試しています。
説明が拙く申し訳ございません。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。