point1 | カプセルの start にある球形の中心 |
point2 | カプセルの end にある球形の中心 |
radius | カプセルの半径 |
direction | カプセル型の通過方向 |
maxDistance | スイープの最大の長さ。 |
layermask | レイヤーマスク はレイキャストするときに選択的に衝突を無視するために使用します。 |
queryTriggerInteraction | トリガーに設定されているものも検索対象にするか |
RaycastHit[] 通過で衝突した全コライダーの配列
Physics.CapsuleCast のようですが、この関数はヒットしたすべての情報を取得します
カプセル型のレイを飛ばし、オブジェクトコライダーの付いたオブジェクトがヒットするかを調べます
カプセルは2つの終点である point1
と point2
、それらの radius
からなる2つの球形で定義されます。
カプセル型が direction
に沿って移動していた場合、 hits にはカプセルに衝突するすべてのコライダーが返されます。
この関数はキャラクターなど、どこかに移動できる特定の大きさを持つオブジェクトを何にも衝突させずに見つけたいために Raycast で十分な精度を得られない場合に有効です。
注意: 通過開始時点でカプセル型に重なるコライダーの場合、 RaycastHit 構造体の出力方向は設定したものの逆に、距離・ベクトルは 0 になります。特定ケースの検索や検索結果の改善のために追加の検索を実行する場合は確認してください。
If you move colliders from scripting or by animation, there needs to be at
物理ライブラリが更新できるように CapsuleCast が新しい位置に当たる前に
最低でも1度 FixedUpdate が実行されている必要があります。
See Also: Physics.SphereCast, Physics.CapsuleCast, Physics.Raycast, Rigidbody.SweepTest.
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Update() { RaycastHit[] hits; CharacterController charCtrl = GetComponent<CharacterController>(); Vector3 p1 = transform.position + charCtrl.center + Vector3.up * -charCtrl.height * 0.5F; Vector3 p2 = p1 + Vector3.up * charCtrl.height; // Cast character controller shape 10 meters forward, to see if it is about to hit anything hits = Physics.CapsuleCastAll(p1, p2, charCtrl.radius, transform.forward, 10);
// Change the material of all hit colliders // to use a transparent Shader for (int i = 0; i < hits.Length; i++) { RaycastHit hit = hits[i]; Renderer rend = hit.transform.GetComponent<Renderer>(); if (rend) { rend.material.shader = Shader.Find("Transparent/Diffuse"); Color tempColor = rend.material.color; tempColor.a = 0.3F; rend.material.color = tempColor; } } } }