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

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

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

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

Q&A

解決済

1回答

1995閲覧

[Unity]RigidBody2D.Cast()におけるContactFilter2D.layerMaskの利用

Zin.Creat

総合スコア42

C#

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

0グッド

0クリップ

投稿2021/01/17 01:57

編集2021/01/17 02:02

前提・実現したいこと

Unityで2Dゲームを作成しています。
接地判定をRigidBody2D.Castを利用したいと考えています。
ContactFilter2DのLayerMaskで地面のみを判定したいです。

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

LayerMask.GetMaskの部分で
CS1503: 引数 2: はintをUnityEngine.ContactFilter2Dへ変換できません
というエラーが出てきます。

該当のソースコード

C#

1int number; 2RigidBody2D rb; 3RaycastHit2D[] result = new RaycastHit[0]; 4 5bool CheckGrounded() 6{ 7 number = rb.Cast(Vector2.down, LayerMask.GetMask("Ground"), result, 0.1f); 8 if(number > 0) 9 { 10 return true; 11 } 12 return false; 13}

試したこと

事前にLayerMaskの指定をしてみましたが、同じエラーが出てきます。
以前Raycastを使ったときに同じようにLayerMask.GetMaskで判定できることは確認済みです。
BoxCastなどの代用も考えていますが、あくまでRigidBody2D.Cast()で判定したいと考えています。

参考にした情報

Unity - Scripting API: Rigidbody2D.Cast

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージはCastメソッドの第二引数が受け付けるのはintではなくContactFilter2だと言ってるのでその通り修正すればよさそうです。

csharp

1var contactFilter2d = new ContactFilter2d() 2{ 3 layerMask = LayerMask.GetMask("Ground") 4}; 5 6number = rb.Cast(Vector2.down, contactFilter2d, result, 0.1f);

※実際にコードを動かしてないので間違ってたらすみません。

投稿2021/01/17 12:40

tor4kichi

総合スコア763

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

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

Zin.Creat

2021/01/18 08:38

実際に動かしてみましたが、正常に動きました。ありがとうございました! 以前Raycastを使ったときに、始めにあげたようにコード内でlayerMaskを指定する形で出来ていたので、勘違いしていました。Raycastは特別なのでしょうか、、、 自分で調べてみて分からなければ、またの機会に質問したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問