使用类在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.
你不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);
}