使用类在Unity中定义GUI

时间:2014-08-17 17:08:46

标签: c# user-interface unity3d

我正在尝试简化Unity中的进度条以及其他一些功能,但是当我实例化它们时它们没有显示。这是我到目前为止所拥有的。我没做什么让这不起作用?

Bar.cs

using UnityEngine;
using System.Collections;

public class Bar : MonoBehaviour {

    private float x,y,w,h;
    private string text;
    private int barCap;
    private int curr;

    bool refSet = false;
    public bool visible = true;

    public Bar(float xIn, float yIn, float wIn, float hIn, string textIn)
    {
        this.x = xIn;
        this.y = yIn;
        this.w = wIn;
        this.h = hIn;
        this.text = textIn;     
    }

    public void setRef(int value, int amount)
    {
        this.barCap = value;
        this.curr = amount;
        this.refSet = true;
    }

    void OnGUI () 
    {
        if(refSet && visible)
        {
            Debug.Log("Getting hit");
            GUI.Box (new Rect(x,y,w,h),text);
            GUI.Box (new Rect(x,y,(w/barCap)*curr,h),"");
        }
    }   
}

Main.cs

...
private Bar hpBar;

// Use this for initialization
void Start () 
{
    //HP Bar
    hpBar = new Bar((ScreenWidth - ((barWidth + (padding * 3))*2)),(ScreenHeight - (boxBGHeight - padding * 3)), 100, 30, "HP");
    hpBar.setRef(HP, currHP);
}
...

编辑:

我在Main.cs的hpBar = gameObject.AddComponent("Bar") as Bar;中使用了此Start() 初始化一个条,然后在OnGUI()我设置引用并将构造函数更改为一个函数来设置变量:

hpBar.setBar(ScreenWidth - ((barWidth + (padding * 3))*2),ScreenHeight - (boxBGHeight - padding * 5),barWidth,barHeight,"HP");
            hpBar.setRef(HP,currHP);

我可能会把它放到Update()每个循环中发生(即使OnGUI也这样)。主要脚本是一个空的游戏对象,所以我只是将它添加到自己。

1 个答案:

答案 0 :(得分:0)

你不是new MonoBehaviours,你将它们附加到你场景中的GameObjects。选择一个GameObject,附加一个Bar并从那里继续前进。如果您希望使用单个脚本管理Bar,请执行以下操作:

//Inside the script that manages bars.
public Bar hpBar; //Set this reference in the editor.

void Start () 
{
    hpBar.setPositionAndStuff(...);
    hpBar.setRef(HP, currHP);
}