我在下面的脚本中做了以下工作:
玩家从3颗心开始,如果它遭受伤害失去一颗心,并改变纹理为2心1,如果他赢得了多一颗心回到纹理。如果你只有一颗心2,并且受伤了,游戏就结束了。
这段代码工作得很好,但是我想把它转换成UI画布图像。我该怎么做?
using UnityEngine;
using System.Collections;
public class Hearts : MonoBehaviour {
public Texture2D[]initialHeart;
private int hearts;
private int currentHearts;
// Use this for initialization
void Start () {
GetComponent<GUITexture>().texture = initialHeart[0];
hearts = initialHeart.Length;
}
// Update is called once per frame
void Update () {
}
public bool TakeHeart()
{
if (hearts < 0) {
return false;
}
if (currentHearts < (hearts - 1)) {
currentHearts += 1;
GetComponent<GUITexture> ().texture = initialHeart [currentHearts];
return true;
} else {
return false;
}
}
public bool AddHeart() {
if (currentHearts > 0) {
currentHearts -= 1;
GetComponent<GUITexture> ().texture = initialHeart [currentHearts];
return true;
} else {
return false;
}
}
}
编辑:
看看发生了什么:
在对象检查器中,HealthBar我把三个心作为图像(第一个图像附在一起)。但是当我进入脚本并尝试根据用户的进度选择要更改的图像时,不允许使用图像、对象(第二个图像附加)。
发布于 2016-05-01 21:34:42
1.Change Texture2D
to Sprite
.
2.Then将GetComponent<GUITexture>().texture = initialHeart[0];
改为GetComponent<Image>().sprite = initialHeart[0];
3.And the two GetComponent<GUITexture> ().texture = initialHeart [currentHearts];
to GetComponent<Image>().sprite = initialHeart[currentHearts];
备注:做GetComponent<GUITexture> ().texture
和GetComponent<Image>().sprite
是不好的。如果需要多次访问任何组件,则需要对其进行cache
。这意味着您只需执行一次GetComponent<Image>()
并将其保存到变量中。这个变量现在可以多次使用。我在你的其他问题/代码中也注意到了这一点,并决定是时候告诉你了。看看下面的代码,可以更好地理解它。代码没有经过测试,但它会编译。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Hearts : MonoBehaviour
{
public Sprite[] initialHeart;
private int hearts;
private int currentHearts;
// Use this for initialization
//Used for chaching Image so that you won't be doing GetComponent<Image>(); each time
Image heartImage;
void Start()
{
//Cache the Image once so that you won't be doing GetComponent<Image>(); each time
heartImage = GetComponent<Image>();
heartImage.sprite = initialHeart[0];
hearts = initialHeart.Length;
}
// Update is called once per frame
void Update()
{
}
public bool TakeHeart()
{
if (hearts < 0)
{
return false;
}
if (currentHearts < (hearts - 1))
{
currentHearts += 1;
heartImage.sprite = initialHeart[currentHearts];
return true;
}
else
{
return false;
}
}
public bool AddHeart()
{
if (currentHearts > 0)
{
currentHearts -= 1;
heartImage.sprite = initialHeart[currentHearts];
return true;
}
else
{
return false;
}
}
}
编辑:我将initialHeart
从Image
更改为Sprite
,以便您可以直接放置Sprite
。不要忘记从这个脚本将附加到的GUITexture
中删除GameObject。还要确保您要附加此脚本的GameObject将一个Image
附加到它。如果你不这样做,GetComponent<Image>();
就会失败。
https://stackoverflow.com/questions/36971964
复制相似问题