首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UI画布索引

UI画布索引
EN

Stack Overflow用户
提问于 2016-05-01 21:07:51
回答 1查看 71关注 0票数 0

我在下面的脚本中做了以下工作:

玩家从3颗心开始,如果它遭受伤害失去一颗心,并改变纹理为2心1,如果他赢得了多一颗心回到纹理。如果你只有一颗心2,并且受伤了,游戏就结束了。

这段代码工作得很好,但是我想把它转换成UI画布图像。我该怎么做?

代码语言:javascript
运行
复制
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我把三个心作为图像(第一个图像附在一起)。但是当我进入脚本并尝试根据用户的进度选择要更改的图像时,不允许使用图像、对象(第二个图像附加)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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> ().textureGetComponent<Image>().sprite是不好的。如果需要多次访问任何组件,则需要对其进行cache。这意味着您只需执行一次GetComponent<Image>()并将其保存到变量中。这个变量现在可以多次使用。我在你的其他问题/代码中也注意到了这一点,并决定是时候告诉你了。看看下面的代码,可以更好地理解它。代码没有经过测试,但它会编译。

代码语言:javascript
运行
复制
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;

        }
    }
}

编辑:我将initialHeartImage更改为Sprite,以便您可以直接放置Sprite。不要忘记从这个脚本将附加到的GUITexture中删除GameObject。还要确保您要附加此脚本的GameObject将一个Image附加到它。如果你不这样做,GetComponent<Image>();就会失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36971964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档