Unity3d 抬头显示器雷达问题

Unity3d 抬头显示器雷达问题,unity3d,Unity3d,我已经创建了一个基于3D对象(平面)的基本HUD雷达系统,脚本检测敌人并在屏幕上跟踪他,但我的问题是,有时HUD会超出屏幕区域 这是我的密码: #pragma strict // ******Public dimentions ****** public var AircraftObject : Transform; // ******Private dimentions ****** //Fetch CpuScript class to get some varibles private v

我已经创建了一个基于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");
}
#pragma strict
//*******公共尺寸******
公共var飞机对象:转换;
//*******私人尺寸******
//获取CpuScript类以获取一些变量
私有变量main类:CpuScript;
私有变量isRenderer:布尔值;
私人var飞机区域:浮动;
//其他性能
私有变量Spd:游戏对象;
私有变量Alt:游戏对象;
私有变量训练:游戏对象;
//计算变量
私有var距离:int;
私人速度:int;
函数Awake()
{
//查找所有对象
findObjects();
//将PlayerScript设置为Main类
mainClass=gameObject.GetComponent(CpuScript);
}
函数FixedUpdate()
{
isRenderer=mainClass.isProximity;
aircraftArea=mainClass.mainObjectArea;
transform.position.x=飞机面积/6;
//设置GUI的
guiControl();
getValue();
}
函数guiControl()
{
Spd.GetComponent.(.text=速度+结);
Alt.GetComponent.(.text=“检测到敌人”;
Trg.GetComponent.(.text=距离+英尺);
}
函数getValue()
{
距离=矢量3.距离(AircraftObject.transform.position,mainClass.AircraftDistance)*4;
速度=随机范围(100300);
}
函数findObjects()
{
Spd=游戏对象。查找(“速度”);
Alt=GameObject.Find(“Alt”);
Trg=GameObject.Find(“AimTarget”);
}

从代码中无法确切说明为什么3d hud会离开屏幕

但如果你想让任何3d对象(比如你的HUD)一直在屏幕上,你需要确保它一直被摄像机渲染到屏幕上

这可以通过多种方式实现

一种方法是:

  • 使用第二个摄影机渲染HUD
  • 将其清除标志设置为仅深度(在inspector中)
  • 将此摄影机的深度设置为高于主摄影机(在“检查器”中)
  • 只要不移动第二个摄像头,HUD就会一直显示

    您还需要确保主摄影机不会渲染HUD。 为此,请执行以下操作:

  • 更改HUD图层(创建您的HUD图层)
  • 将hud摄影机设置为仅渲染此层
  • 设置主摄影机以渲染除HUD层之外的所有其他层 您可以使用两个摄影机的检查器中的消隐遮罩放置选择器执行此操作

    仅供参考:您也可以在代码中设置相机的消隐遮罩,但要做到这一点,您需要使用位运算符

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