大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发。这一章我们将处理单位信息在UI上的具体显示。
首先为了显示一些信息,我们需要新创建一个脚本来控制信息面板,所以在HUD文件夹下创建一个InfoManager的脚本,如下
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class InfoManager : MonoBehaviour {
public static InfoManager Current;
public Image ProfilePic; //所选单位的缩略图
public Text Line1, Line2, Line3; //所选单位的信息介绍
public InfoManager()
{
Current = this;
}
/// <summary>
/// 设置text文字
/// </summary>
/// <param name="line1"></param>
/// <param name="line2"></param>
/// <param name="line3"></param>
public void SetLines(string line1, string line2, string line3)
{
Line1.text = line1;
Line2.text = line2;
Line3.text = line3;
}
/// <summary>
/// 清理文字
/// </summary>
public void ClearLines()
{
SetLines ("", "", "");
}
/// <summary>
/// 设置头像
/// </summary>
/// <param name="pic"></param>
public void SetPic(Sprite pic)
{
ProfilePic.sprite = pic;
ProfilePic.color = Color.white;
}
/// <summary>
/// 清理头像
/// </summary>
public void ClearPic()
{
ProfilePic.color = Color.clear;
}
// Use this for initialization
void Start () {
ClearLines ();
ClearPic ();
}
}
保存代码,在游戏中选择Hud下的Info物体,并添加InfoManager组件,分别给InfoManager中的变量赋值,如图
现在InfoManager就可以控制面板信息显示了,刚开始运行会清空面板,我们做的目的是为了选中单位时,显示单位的详细信息,这样就意味着每个单位要有自己的详细信息,所以,我们在Interactions文件夹下,新建一个ShowUnitInfo脚本,如图:
using UnityEngine;
using System.Collections;
public class ShowUnitInfo : Interaction {
public string Name; //单位名称
public float MaxHealth, CurrentHealth; //最大血量 当前血量
public Sprite ProfilePic; //头像
/// <summary>
/// 重写被选中方法
/// </summary>
public override void Select ()
{
InfoManager.Current.SetPic (ProfilePic);
InfoManager.Current.SetLines (
Name,
CurrentHealth + "/" + MaxHealth,
"Owner: " + GetComponent<Player> ().Info.Name);
}
/// <summary>
/// 取消被选中的方法
/// </summary>
public override void Deselect ()
{
InfoManager.Current.ClearPic ();
InfoManager.Current.ClearLines ();
}
}
代码我们写好了,保存一下。这个脚本中我们需要设置头像,所以我们需要一张图片,找到第一章节中所给的资源Resources->Content4中的DroneUnitFace图片,把它拖到Unity中,然后把它的Texture type 属性改成Sprite, max Size 改成256 如图:
接着,我们为DroneUnit预设添加ShowUnitInfo脚本,并把DroneUnitFace图片拖拽到ProfilePic上,设置一下预设的名字,血量值,如图:
好了,现在运行起来,选择单位时就能显示它的信息了。如图所示:
接下来,我们要从这个文本区内显示我们拥有多少金钱,我们创建一个CashBoxManager脚本,并编辑,如下:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class CashBoxManager : MonoBehaviour {
public Text CashField; //显示持续更新的金币信息
// Update is called once per frame
void Update () {
CashField.text = "$ " + (int)Player.Default.Credits;
}
}
保存代码并返回Unity,把CashBoxManager添加到Manager上,然后把Hud下的CashBoxImage拖拽到CashField位置上,运行就可以看到金额显示了,如图: