C# UI画布索引
我在下面有一个脚本,它执行以下操作: 如果玩家受到伤害,失去一颗心并将纹理更改为2颗心,如果他赢得一颗额外的心并将其恢复为纹理[0],那么玩家将以3颗心[0]开始。。如果你只有一颗心脏[2],并且受伤,游戏结束 这段代码工作得很好,但我想将其转换为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
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]
toGetComponent().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]
toGetComponent().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