【发布时间】:2016-09-13 22:46:35
【问题描述】:
我有一个脚本可以为角色的心形图像赋予或赋予“生命”。
using UnityEngine;
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;
}
}
}
我把最初的 3 颗心放在了,检查员把尺寸 3:
array 0: 3 hearts
array 1: 2 hearts
array 2: 1 heart
如果玩家与炸弹(预制)相撞,他会失去一颗心,如果他没有心,则将屏幕称为“GameOver”。
一切正常。但我决定做一个测试,如果我为玩家获得一个皮肤,我会创建一个“升级”,我会得到更多的“2”心。
在检查员处放尺寸 5
array 0: 5 hearts
array 1: 4 hearts
array 2: 3 hearts
array 3: 2 hearts
array 4: 1 heart
当我输入脚本时出现问题:heartImage.sprite = initialHeart[3]; 游戏开始时只有“3”颗心。
当玩家与炸弹(预制件)碰撞时,他会获得一条生命而不是失去一条生命,但随后的碰撞它开始正常失去生命,直到游戏结束。
如果我从 3 颗心开始并且在游戏中“抓到”一颗额外的心并没有改变,而不是 3 到 4 颗,我仍然保持 3 颗心。
在我与第一个炸弹(预制件)碰撞并获得 1 颗心而不是失去之后,脚本开始正常运行。撞到炸弹我就输了,抓到一颗心我就赢了。
我想知道为什么我把heartImage.sprite = initialHeart[0];(5颗心)改成heartImage.sprite = initialHeart[2];(3颗心),第一次碰撞就出现这个bug。
编辑
我找到了问题所在,但不知道如何解决。
我的数组会固定为5,但有时我想启动[0](5颗红心)和其他情况启动[2](3颗红心)。
在Start () 内,声明heartImage.sprite = initialHeart [2];(初始3 颗心)。但是TakeHeart方法里面有取Hearts的功能。
if (currentHearts <(hearts - 1))
{
currentHearts + = 1;
heartImage.sprite = initialHeart [currentHearts]; ;
return true;
}
事实证明,当我声明时:heartImage.sprite = initialHeart [currentHearts];
我说的是initialHeart[1](4 颗心),但应该是[3](2 颗心)
可以做点什么添加:initialHeart [currentHearts] + initialHeart [2];`?
因此,intialHeart 的结果将是 [3](2 颗红心),这是我想要的方式。
【问题讨论】:
-
您是否真的尝试过使用调试器来单步调试代码以查看您是否遇到索引问题? \
-
通常从不使用 Unity 中的数组。学习使用 List(明确地说,它更容易)。您在这里尝试整理代码绝对不值得。只需从
List<>重新开始,几分钟后即可完成。 -
@JoeBlow 我正在尝试
List <>,但我遇到了麻烦。 -
请勾选“TICK”答案以结束此问题。然后,问一个关于 List 的新问题
标签: c# arrays unity3d unityscript