3

私は、キャラクターが目標を達成するためにさまざまな廊下や廊下を移動するゲームの真っ最中です。プレイヤーが廊下を通過するときに、プレイヤーが壁を「通過」したときに壁が消えるようにしたいです。これは紛らわしいように聞こえるかもしれないので、私は私が何をしたいのかについての写真を提供しました:

ダイアグラム

壁を見えなくする機能はもう持っていますが、どう呼べばいいのかわかりません。私はそれを呼んでみました

player.position.z > wall.position.z

ただし、これにより、プレーヤーが壁の途中(変形時)を通過すると、各壁が非表示になります。プレイヤーが完全に通過したときに呼び出したいと思います。プレーヤーがz軸の壁のメッシュを完全に超えているかどうかを確認する方法はありますか?

4

2 に答える 2

2

プレイヤーはその廊下を下って戻ることができますか?もしそうなら、これはカメラが問題の壁の反対側を向いているかどうかを確認する簡単な方法です。

// Please cache the variables; I'm using properties for simplicity's sake.

float maxViewAngle = Camera.main.fieldOfView / 2f + 20;  // +20 for some padding

Vector3 difference = Camera.main.transform.position - wall.transform.position;

float angleDifference = Vector3.Angle( Camera.main.transform.forward, difference );

if ( angleDifference > maxViewAngle )
{
  wall.HideThyself();  // Or whatever
}

投稿されたソリューションはplayer.position.z > wall.renderer.bounds.max.z、1つの軸に沿った一方向にのみ機能します。レベルが1次元で、前に進むだけの場合、これは問題ありません。

編集:壁が静的(不変で、インスペクターで「静的」とマークされている)の場合、Unity Proを使用していると、オクルージョンカリング(ユニティドキュメント)をはるかに簡単に使用できます。

于 2013-01-08T00:36:34.610 に答える
1

解決しました!レンダラーに「max」属性があることがわかりました。私はちょうど使用しました:

player.position.z > wall.renderer.bounds.max.z
于 2013-01-05T21:55:05.747 に答える