0

3Dオブジェクト(平面)に基づいて基本的なHUDレーダーシステムを作成しました。スクリプトは敵を検出し、画面上で敵を追跡しますが、問題は、HUDが画面領域から外れることがあることです。

これが私のコードです:

#pragma strict

// ******Public dimentions ******
public var AircraftObject : Transform;
// ******Private dimentions ******
//Fetch CpuScript class to get some varibles
private var mainClass : CpuScript;
private var isRenderer : boolean;
private var aircraftArea : float;
//Other perfabs
private var Spd : GameObject;
private var Alt : GameObject;
private var Trg : GameObject;
//Calculating varibles
private var Distance : int;
private var Speed : int;


function Awake()
{
    //Finding all objects
    findObjects();
    //Set PlayerScript into the mainClass
    mainClass = gameObject.GetComponent(CpuScript);
}

function FixedUpdate() 
{
    isRenderer = mainClass.isProximity;
    aircraftArea = mainClass.mainObjectArea;
    transform.position.x = aircraftArea / 6;
    //Set GUI's
    guiControl();
    getValue();
}

function guiControl()
{
    Spd.GetComponent.<TextMesh>().text = Speed + " Knot";
    Alt.GetComponent.<TextMesh>().text = "Enemy detected";
    Trg.GetComponent.<TextMesh>().text = Distance + " Ft";
}

function getValue()
{
    Distance = Vector3.Distance(AircraftObject.transform.position, mainClass.AircraftDistance) * 4;
    Speed = Random.Range(100, 300);
}

function findObjects()
{
    Spd = GameObject.Find("Speed");
    Alt = GameObject.Find("Alt");
    Trg = GameObject.Find("AimTarget");
}
4

1 に答える 1

2

あなたが示したコードから、あなたの3dhudが画面から消える理由を正確に言うことは不可能です。

ただし、HUDなどの3Dオブジェクトを常に画面に表示したい場合は、常にカメラによって画面にレンダリングされていることを確認する必要があります。

これは、さまざまな方法で実行できます。

1つの方法は、次のことです。

  1. 2台目のカメラを使用してHUDをレンダリングします
  2. クリアフラグを深度のみに設定します(インスペクターで)
  3. このカメラの深度をメインカメラ(インスペクター内)よりも高く設定します

この2番目のカメラを動かさない限り、HUDは常に表示されます。

また、メインカメラがHUDをレンダリングしないことを確認する必要があります。これを行うには:

  1. HUDのレイヤーを変更します(獲得したHUDレイヤーを作成します)。
  2. このレイヤーのみをレンダリングするようにhudカメラを設定します。
  3. HUDレイヤー以外の他のすべてのレイヤーをレンダリングするようにメインカメラを設定します。

これは、両方のカメラのインスペクターにあるカリングマスクドロップセレクターを使用して行います。

参考:カメラのカリングマスクをコードで設定することもできますが、これを行うには、ビット演算子を使用する必要があります。

別の方法としては、HUDをシーンビューのメインカメラの子にして、カメラが移動するとHUDがに移動するようにする方法があります。ただし、これにより、HUDが他のゲームオブジェクトによって隠される可能性があります。

于 2012-04-27T13:31:57.257 に答える