HUD雷达问题

时间:2012-04-26 19:06:34

标签: unity3d

我已经创建了一个基于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");
}

1 个答案:

答案 0 :(得分:2)

不可能从你已经显示出来的代码中说明为什么你的3D视频会在屏幕上消失。

但是,如果您想在屏幕上随时保留任何3D对象(如HUD),则需要确保它始终由相机在屏幕上呈现。

这可以通过多种方式完成。

一种方法是:

  1. 使用第二台相机渲染HUD
  2. 仅将其清除标志设置为深度(在检查器中)
  3. 将此相机的深度设置为高于主相机(在检查器中)
  4. 只要您不移动第二台相机,就应始终显示HUD。

    您还需要确保主摄像头不会渲染HUD。 这样做:

    1. 更改HUD图层(创建您的HUD图层)。
    2. 将hud相机设置为仅渲染此图层。
    3. 设置主摄像头以将所有其他图层与HUD图层分开。
    4. 您可以使用检查器中的剔除蒙版放置选择器为这两个相机执行此操作。

      仅供参考:你也可以在代码中设置摄像机的剔除掩码,但为了做到这一点,你需要使用按位运算符。

      替代方法包括,使HUD成为场景视图中主摄像机的子级,以便当摄像机移动时HUD移动到。 但是,这可能会导致您的HUD被其他游戏对象遮挡。