モバイル用の3Dゲームを開発している間にボックスキャストに関する問題が発生しました。BoxCastAllで2つのオブジェクトの間にオブジェクトがあるかどうかを検出します
環境オブジェクトを通過するのを避けるために、自分のプレーヤーとターゲットの間のパスを確認したい(剛体が取り付けられておらず、特定のポイント間での移動のみ可能)。
これは私がチェックするために使用されるコードです:
private bool CheckPath (Vector3 position, Vector3 target)
{
Vector3 center = Vector3.Lerp(transform.position, target, 0.5f);
Vector3 halfExtents = new Vector3(1, 1, (transform.position - target).magnitude)/2;
Quaternion rotation = Quaternion.LookRotation((transform.position - target).normalized);
RaycastHit[] rhit = Physics.BoxCastAll(center, halfExtents, (transform.position - target).normalized, rotation);
bool result = rhit.All(r => r.collider.tag != "Environment");
DebugUtilities.BoxCastDebug.DrawBox(center, halfExtents, rotation, result ? Color.green : Color.red, 3);
return result;
}
このコードは、ほとんどの場合に動作します:
しかし、失敗した、このような状況のために、たとえば:
ボックスキャストを視覚化するために、私はthis Unity Answersリンクからスクリプトを使用しました。
問題がどこにあるのかわかりませんが、上記のデバッグスクリプトに欠陥があり、ボックスキャストの呼び出しが正しいと思われました。
私はすべてのソリューションに感謝していますが、シンプルな方が高く評価されます。
いくつかのより詳細な情報(必要な場合):私はEnvironment
タグでマークされている通行不能にしたい
- オブジェクト。
- 私はデバッグスクリプトを書いた人ではありませんでした。最初はうまくいたようでしたので、うまくいきました。慰めのパラメータから、あなたのコード内の
を、ありがとう!あなたは私がボックスキャストコールをついに理解するようにしました。 :) –
問題ありません。この問題を検索する将来の人々にもっと役立つようにタイトルを変更しました – Programmer
私はユニットサイズのプレーヤーを持っている場合、 'halfExtents'は' Vector3.one/2'ですか? –