Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UI画布索引_C#_Unity3d_Android Canvas_Unityscript_Unity5 - Fatal编程技术网

C# UI画布索引

C# UI画布索引,c#,unity3d,android-canvas,unityscript,unity5,C#,Unity3d,Android Canvas,Unityscript,Unity5,我在下面有一个脚本,它执行以下操作: 如果玩家受到伤害,失去一颗心并将纹理更改为2颗心,如果他赢得一颗额外的心并将其恢复为纹理[0],那么玩家将以3颗心[0]开始。。如果你只有一颗心脏[2],并且受伤,游戏结束 这段代码工作得很好,但我想将其转换为UI画布图像。我该怎么做 using UnityEngine; using System.Collections; public class Hearts : MonoBehaviour { public Texture2D[]initia

我在下面有一个脚本,它执行以下操作:

如果玩家受到伤害,失去一颗心并将纹理更改为2颗心,如果他赢得一颗额外的心并将其恢复为纹理[0],那么玩家将以3颗心[0]开始。。如果你只有一颗心脏[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;
        }
    }
}
使用UnityEngine;
使用系统集合;
公共阶层的心:单一行为{
公共结构2d[]心脏;
私心;
私心;
//用于初始化
无效开始(){
GetComponent().texture=initialHeart[0];
心脏=初始心脏。长度;
}
//每帧调用一次更新
无效更新(){
}
公共图书馆
{
如果(心脏<0){
返回false;
}
如果(当前心脏<(心脏-1)){
电流+=1;
GetComponent().texture=InitialHearts[currentHearts];
返回true;
}否则{
返回false;
}   
}
公共图书馆{
如果(currentHearts>0){
当前心脏-=1;
GetComponent().texture=InitialHearts[currentHearts];
返回true;
}否则{
返回false;
}
}
}
编辑:

看看发生了什么:

在ObjectInspector中,HealthBar我将3颗心脏作为图像(第一个图像M已附加)。但是,当我进入脚本并尝试根据用户的进度选择要更改的图像时,不允许仅使用图像、对象(附加第二个图像)


1。将
Texture2D
更改为
Sprite

2。然后更改
GetComponent()。纹理=初始心脏[0]
to
GetComponent().sprite=initialHeart[0]

3和两个
GetComponent().texture=initialHeart[currentHearts]
GetComponent().sprite=initialHeart[currentHearts]

注意:执行
GetComponent()。纹理
GetComponent()。精灵
不好。如果需要多次访问任何组件,则需要缓存它。这意味着您只需执行一次
GetComponent()
,然后将其保存到变量。这个变量现在可以多次使用。我在你的其他问题/代码中也注意到了这一点,并决定是时候告诉你了。请看下面的代码,以进一步了解它。代码未经测试,但可编译

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;

        }
    }
}
使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
公共阶层的心:单一行为
{
公众的心灵;
私心;
私心;
//用于初始化
//用于更改图像,这样您就不会每次都执行GetComponent()
图像中心图像;
void Start()
{
//缓存映像一次,这样就不会每次都执行GetComponent()
heartImage=GetComponent();
heartImage.sprite=initialHeart[0];
心脏=初始心脏。长度;
}
//每帧调用一次更新
无效更新()
{
}
公共图书馆
{
如果(心脏<0)
{
返回false;
}
如果(当前心脏<(心脏-1))
{
电流+=1;
heartImage.sprite=initialHeart[currentHearts];
返回true;
}
其他的
{
返回false;
}
}
公共图书馆
{
如果(currentHearts>0)
{
当前心脏-=1;
heartImage.sprite=initialHeart[currentHearts];
返回true;
}
其他的
{
返回false;
}
}
}

编辑:我将
initialHeart
Image
更改为
Sprite
,以便您可以直接放置
Sprite
。别忘了从这个脚本将附加到的游戏对象中删除
GUITexture
。另外,请确保您将此脚本附加到的游戏对象附带有
图像。如果您不这样做,
GetComponent()将失败。

1。将
Texture2D
更改为
Sprite

2。然后更改
GetComponent()。纹理=初始心脏[0]
to
GetComponent().sprite=initialHeart[0]

3和两个
GetComponent().texture=initialHeart[currentHearts]
GetComponent().sprite=initialHeart[currentHearts]

注意:执行
GetComponent()。纹理
GetComponent()。精灵
不好。如果需要多次访问任何组件,则需要缓存它。这意味着您只需执行一次
GetComponent()
,然后将其保存到变量。这个变量现在可以多次使用。我在你的其他问题/代码中也注意到了这一点,并决定是时候告诉你了。请看下面的代码,以进一步了解它。代码未经测试,但可编译

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;

        }
    }
}
使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
公共阶层的心:单一行为
{
公众的心灵;
私心;
私心;
//用于初始化
//用于更改图像,这样您就不会每次都执行GetComponent()
图像中心图像;
void Start()
{
//缓存映像一次,这样就不会每次都执行GetComponent()
heartImage=GetComponent();
heartImage.sprite=initialHeart[0];
心脏=初始心脏。长度;
}
//每帧调用一次更新
无效更新()
{
}
公共图书馆
{
如果(hea