前提・実現したいこと
下方向のレイキャストでキャラクターの足元に地面があるかどうかを判定しようとしましたが、
意図した設定よりもレイが長くなっているようで、上手く行きません。
下記コードで長さを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 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/11 12:05 編集