UI canvas 索引
UI canvas Index
我有下面的脚本执行以下操作:
玩家开始时有 3 颗心 [0] 如果它受到伤害失去一颗心并将纹理更改为 2 颗心 1,如果他赢得一颗额外的心回到纹理 [0] .. 如果你只有一颗心 [ 2] 并且受伤,游戏结束。
此代码完美运行,但我想将其转换为 UI Canvas 图像。我该怎么做?
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 我将 3 个心作为图像(附上第一张图像)。但是当我进入脚本并尝试 select 根据用户的进度更改图像时,不允许仅使用图像、对象(附上第二个图像)。
1。将 Texture2D
更改为 Sprite
。
2.然后把GetComponent<GUITexture>().texture = initialHeart[0];
改成GetComponent<Image>().sprite = initialHeart[0];
3.还有两个GetComponent<GUITexture> ().texture = initialHeart [currentHearts];
到GetComponent<Image>().sprite = initialHeart[currentHearts];
注意:做GetComponent<GUITexture> ().texture
和GetComponent<Image>().sprite
是不好的。如果您需要访问任何组件 多次 次,则需要 cache
次。这意味着您执行 GetComponent<Image>()
一次并将其保存到变量中。您现在可以多次使用该变量。我在您的另一个 questions/codes 中也注意到了这一点,因此决定是时候告诉您了。看一下下面的代码以加深对它的理解。代码未经测试,但可以编译。
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
。不要忘记从该脚本将附加到的 GameObject 中删除 GUITexture
。还要确保您附加此脚本的 GameObject 附加了 Image
。否则,GetComponent<Image>();
将失败。
我有下面的脚本执行以下操作:
玩家开始时有 3 颗心 [0] 如果它受到伤害失去一颗心并将纹理更改为 2 颗心 1,如果他赢得一颗额外的心回到纹理 [0] .. 如果你只有一颗心 [ 2] 并且受伤,游戏结束。
此代码完美运行,但我想将其转换为 UI Canvas 图像。我该怎么做?
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 我将 3 个心作为图像(附上第一张图像)。但是当我进入脚本并尝试 select 根据用户的进度更改图像时,不允许仅使用图像、对象(附上第二个图像)。
1。将 Texture2D
更改为 Sprite
。
2.然后把GetComponent<GUITexture>().texture = initialHeart[0];
改成GetComponent<Image>().sprite = initialHeart[0];
3.还有两个GetComponent<GUITexture> ().texture = initialHeart [currentHearts];
到GetComponent<Image>().sprite = initialHeart[currentHearts];
注意:做GetComponent<GUITexture> ().texture
和GetComponent<Image>().sprite
是不好的。如果您需要访问任何组件 多次 次,则需要 cache
次。这意味着您执行 GetComponent<Image>()
一次并将其保存到变量中。您现在可以多次使用该变量。我在您的另一个 questions/codes 中也注意到了这一点,因此决定是时候告诉您了。看一下下面的代码以加深对它的理解。代码未经测试,但可以编译。
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
。不要忘记从该脚本将附加到的 GameObject 中删除 GUITexture
。还要确保您附加此脚本的 GameObject 附加了 Image
。否则,GetComponent<Image>();
将失败。