前提・実現したいこと
unity2Dにて将棋の様なゲームを制作しています。
駒をタグでAoチーム、Orangeチームに分けて、それぞれ当たり判定を付けています。
以下のスクリプトをOrangeタグの駒にアタッチし、Orangeの駒がAoに重なったときにAoの駒がDestroyされるようにしたいです。
発生している問題・エラーメッセージ
AoとOrangeの駒が重なっても何も起こらず、Debug.Logなどを試しても何も起きませんでした。
「onTriggerStay」の書き方が間違っているのか、if文が間違っているのかがわからない状況です。
エラーメッセージ
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class battle : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } private void OnTriggerStay2D(Collider2D collision) { { if (collision.gameObject.tag == "Ao") { Destroy(gameObject); } }}
試したこと
Debug.Logを使ってオブジェクトが重なったときに発生しているか試してみたのですがなにもおきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
「問題点」を記載してください。
重なってもどちらも消えない→OnTriggerStay2Dの中、if文の外に「Debug.Log(collision.gameObject.tag);」を入れて衝突しているか&衝突相手のタグを確認してください。
Ao駒ではなくOrange駒が消える→「Destroy(gameObject);」にしているので当然です。相手側を消したいなら「Destroy(collision.gameObject);」です。
申し訳ありません。問題点の記載が出来ていませんでした。
Tagの確認、Debug.Logを試してみたのですが、何も起きませんでした。
オブジェクト同士が重なったときに発生するのは「OnTriggerStay」であっていますでしょうか?
Destroy(gameObject);でAoが消えるように指定できるのですね。ありがとうございます。
>オブジェクト同士が重なったときに発生するのは「OnTriggerStay」で間違いないんでしょうか?
2Dの場合は「OnTriggerStay2D」かもしれません(何のコンポーネントを使っているかによります)。「OnTriggerStay2D 呼ばれない」などでググってください。
また、本当に重なっているのかも確認してみてください(ある角度から見れば重なっていても、別角度から見ると重なっていない等も考えられます)。
>Destroy(〜);でAoが消えるように指定できる
「gameObject」と「collision.gameObject」がそれぞれ何を指すのかをしっかり把握してください。
調べたところ「OnTriggerStay」などは「Rigidbody」を付けないと機能しないのですね。
「Rigidbody」を付けるとうまく動作しました。ありがとうございます、勉強になりました。
ですが「Rigidbody」を駒につけると動作が重くなくなります。
「OnTriggerStay」のほかにオブジェクトが重なると発生する方法などはないでしょうか?
Rigidbody2D、Collider2Dにすると負荷軽減されるかもしれません。(1軸分の判定が消えるので)
あとはisKinematicをオンにする、衝突するColliderを限定させる(https://docs.unity3d.com/ja/current/Manual/LayerBasedCollision.html)などでも変わるかもしれません。
物理衝突を使わない方法としてはRaycastAllやインターフェースによる入力(「unity ドラッグ」などで検索)を行ったり等が考えられます。(「オブジェクト同士が重なっているか」ではなく「マウスの特定の位置にオブジェクト2つがあるか」という考え方です)
Kinematic、レイヤーベースの設定を変えることで動作が軽くなり解決しました。
丁寧にありがとうございました。
この度は丁寧な説明ありがとうございました。
回答にしていただいたらベストアンサーにさせていただきます。
回答1件
あなたの回答
tips
プレビュー