Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

Physics.CapsuleCastAll

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える
public static function CapsuleCastAll(point1: Vector3, point2: Vector3, radius: float, direction: Vector3, maxDistance: float = Mathf.Infinity, layermask: int = DefaultRaycastLayers, queryTriggerInteraction: QueryTriggerInteraction = QueryTriggerInteraction.UseGlobal): RaycastHit[];
public static RaycastHit[] CapsuleCastAll(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance = Mathf.Infinity, int layermask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static function CapsuleCastAll(point1: Vector3, point2: Vector3, radius: float, direction: Vector3, maxDistance: float = Mathf.Infinity, layermask: int = DefaultRaycastLayers, queryTriggerInteraction: QueryTriggerInteraction = QueryTriggerInteraction.UseGlobal): RaycastHit[];
public static RaycastHit[] CapsuleCastAll(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance = Mathf.Infinity, int layermask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static function CapsuleCastAll(point1: Vector3, point2: Vector3, radius: float, direction: Vector3, maxDistance: float = Mathf.Infinity, layermask: int = DefaultRaycastLayers, queryTriggerInteraction: QueryTriggerInteraction = QueryTriggerInteraction.UseGlobal): RaycastHit[];
public static RaycastHit[] CapsuleCastAll(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance = Mathf.Infinity, int layermask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static function CapsuleCastAll(point1: Vector3, point2: Vector3, radius: float, direction: Vector3, maxDistance: float = Mathf.Infinity, layermask: int = DefaultRaycastLayers, queryTriggerInteraction: QueryTriggerInteraction = QueryTriggerInteraction.UseGlobal): RaycastHit[];
public static RaycastHit[] CapsuleCastAll(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance = Mathf.Infinity, int layermask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

パラメーター

point1 カプセルの start にある球形の中心
point2 カプセルの end にある球形の中心
radius カプセルの半径
direction カプセル型の通過方向
maxDistance スイープの最大の長さ。
layermask レイヤーマスク はレイキャストするときに選択的に衝突を無視するために使用します。
queryTriggerInteraction トリガーに設定されているものも検索対象にするか

戻り値

RaycastHit[] 通過で衝突した全コライダーの配列

説明

Physics.CapsuleCast のようですが、この関数はヒットしたすべての情報を取得します

カプセル型のレイを飛ばし、オブジェクトコライダーの付いたオブジェクトがヒットするかを調べます カプセルは2つの終点である point1point2 、それらの 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; } } } }