使用类在Unity中定义GUI

本文关键字:定义 GUI Unity | 更新日期: 2023-09-27 18:18:17

我试图简化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),"");
        }
    }   
}

c

...
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的Start()中使用了这个hpBar = gameObject.AddComponent("Bar") as Bar;初始化bar,然后在OnGUI()中设置引用并将构造函数更改为设置变量的函数:

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

我可能会将此放入Update()以发生每个循环(即使OnGUI也这样做)。主脚本是在一个空的gameobject上,所以我只是把它添加到self.

使用类在Unity中定义GUI

你不new monobehaviour,你将它们附加到场景中的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);
}