実現したいこと
Unityで2Dアクションゲームを作成しています。
プレイヤーが持つCircleCollider2Dに敵が衝突した際に、敵を消すといった挙動を実装しようとしています。
発生している問題・分からないこと
ゲームビューで確認すると、プレイヤーのCircleCollider2Dと敵のCircleCollider2Dは衝突しているのですが、敵が消えません。
該当のソースコード
EnemyController.cs
1【該当箇所抜粋】 2public class EnemyController : MonoBehaviour 3{ 4 [SerializeField] GameObject player; 5 CircleCollider2D playerCircol; 6 7 void Start() 8 { 9 this.playerCircol = this.player.GetComponent<CircleCollider2D>(); 10 } 11 12 private void OnCollisionEnter2D(Collision2D collision) 13 { 14 Debug.Log(playerCircol); 15 if (collision.collider == playerCircol) 16 { 17 Destroy(gameObject); 18 } 19 } 20} 21
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
上記のDebug.Log(playerCircol)の結果はplayer(UnityEngine.CircleCollider2D)と表示されたので、CircleCollider2Dだけを取得できているはずです。
試しにDebug.Log(collision.collider)を確認すると、上記と同様の結果となりますが、そもそもif文が呼び出されていません。
ちなみにプレイヤー、敵ともにRigidbody2Dコンポーネントを与えています。
解決策が全く思いつかないので、お力添えいただければ幸いです。
補足
特になし
OnCollisionEnter2D に波カッコが無いのが気になります。
↓みたいに書かないとそもそもコンパイルエラーになる気がしますがどうですか?
private void OnCollisionEnter2D(Collision2D collision)
{
...
}
この質問サイトに記載する際に波カッコが抜けていたので修正いたしました。
大変失礼いたしました。
改めてご確認いただければ幸いです。
ソースコードに問題があるように思えません。それ以外に問題があるのではないですか。
例えば、playerにプレハブを指定している(Projectビューからアセットをドラッグ&ドロップして設定している)とか。
プレハブを指定していました。
追加で教えていただきたいのですが、シーンビューにプレイヤーのアセットをドラッグ&ドロップした後、コライダーとRigidbody2Dのコンポーネントを与えました。
その後、このオブジェクトをインスペクター内のplayer(上記スクリプトで記載した箇所)に割り当てたのですが、型が不一致とのエラーが表示されました。
playerの型を変更する必要があると思うのですが、何に変更すればよろしいでしょうか。
それとも今回行った操作自体が誤っているのでしょうか。
ご教示の程よろしくお願いいたします。
↑Projectビューにあるプレハブでないアセットを使用した上記の結果となりました。
Sceneビューにドラッグ&ドロップすれば、Hierarchyにオブジェクトが表示されるはずです。
そのHierarchy上のオブジェクトをドラッグして、スクリプトのplayerに設定してください。
それで問題なければ、ちゃんとした説明を含めて回答します。(夜になると思いますが)
問題があるのであれば、「型が不一致とのエラー」の内容を正確に、質問に追記なさったほうが良いかと思います。
ご教示いただいた通り行いましたところ、スクリプトのplayerに設定しようとすると、Inspector上のplayerに「Type mismatch」とだけ表示され設定できませんでした。
試しに他のHierarchy上のオブジェクトでも試してみましたが、同様に「Type mismatch」とだけ表示されました。
一つ気になったのですが、なぜかplayerにドラッグ&ドロップしても何も反応がなかったので、Inspector上のplayerにあるプラスボタンからオブジェクトを設定したところ、上記結果となりました。
ご教示の程よろしくお願いいたします。
普通ならばそのようなことは起きません。また書かれていないところで問題があるのではないですか。
まぁ、私もすでに回答があるとおり、タグで判別する方がいいと思います。
もし該当するものが複数あるのであれば、nameプロパティで判別するなど、他にも色々と判別する方法あると思いますので、検討してみてください。
回答2件
あなたの回答
tips
プレビュー