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

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

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

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

Unity

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

Q&A

解決済

1回答

2101閲覧

【Unity】レイキャストで、意図よりも長い距離で衝突判定される

futon-fukafuka

総合スコア9

C#

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

Unity

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

0グッド

0クリップ

投稿2020/08/11 03:42

編集2020/08/11 03:45

前提・実現したいこと

下方向のレイキャストでキャラクターの足元に地面があるかどうかを判定しようとしましたが、
意図した設定よりもレイが長くなっているようで、上手く行きません。
下記コードで長さを1.0fに設定していますが、それより先のオブジェクトと衝突判定が出てしまいます。
デバッグ用のレイの描線を見ても、(画面上では)描線がオブジェクトに触れていない間も衝突判定が出ていました。
レイの長さを限りなくゼロに近づけても、ずっと下のオブジェクトとの衝突判定が生じてしまいます。
そのため、例えば階段状のオブジェクトを降りていく際に、段差を認識しない状態になっています(段差を広げれば、意図しない衝突判定はなくなります)。
下記コードで何か問題があれば教えて頂けると嬉しいです。

該当のソースコード

C#

1 public float rayLength = 1.0f;//レイの長さ 2 private int layermask;//レイヤーマスク 3 4 void Start() 5 { 6 //レイヤーマスクでDefault以外にレイが当たらないように設定 7 layermask = 1 << 0; 8 } 9 10 void Update() 11 { 12 //レイの開始位置 13 Transform rayTransform = this.transform; 14 Vector3 rayPosition = rayTransform.position; 15 16 //下方向のレイキャスト 17 RaycastHit verticalHit; 18 if (Physics.Raycast(rayPosition, transform.TransformDirection(Vector3.down) * rayLength, out verticalHit, layermask) == true) 19 { 20 Debug.Log("レイが当たったのは" + verticalHit.collider.gameObject.name); 21 } 22 23 if (Physics.Raycast(rayPosition, transform.TransformDirection(Vector3.down) * rayLength, out verticalHit, layermask) == false) 24 { 25 Debug.Log("レイが外れた"); 26 } 27 28 //デバッグ用レイ 29 Debug.DrawRay(rayPosition, transform.TransformDirection(Vector3.down) * rayLength, Color.green, 0, false); 30 31 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

第二引数で距離を指定しているつもりのようですが、そこは「方向」を指定するものであって距離ではありません。

ドキュメントには距離の指定は第三引数に float で与えることになっています。

public static bool Raycast (Vector3 origin, Vector3 direction, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

距離を第三引数に指定してみてください。

投稿2020/08/11 10:40

edo_m18

総合スコア2283

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

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

futon-fukafuka

2020/08/11 12:05 編集

アドバイスありがとうございます。下記の通り修正したら解決できました。 Debug.DrawRayとは仕様が違うんですね…。 ```C# Physics.Raycast(rayPosition, transform.TransformDirection(Vector3.down), out verticalHit, rayLength, layermask) ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問