我正在尝试简化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也这样)。主要脚本是一个空的游戏对象,所以我只是将它添加到自己。
答案 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);
}