【发布时间】:2016-08-15 05:14:28
【问题描述】:
我正在编写一个玩家有 3 颗心的 2D 游戏的代码。
如果玩家与炸弹预制件发生碰撞,他会失去 1 颗心。如果玩家与 heartPrefab 碰撞,他会赢得额外的心。如果他连续 3 次与炸弹预制件发生碰撞,则游戏结束。
Hearts 纹理如下。阵列 0(3 颗心)阵列 1(2 颗心)阵列 2(1 颗心)。
我遇到了限制数组的问题!我想知道如何得到以下响应:如果玩家有 3 颗心并与一个 heartPrefab 碰撞,则只有对象被破坏,玩家拥有的心数没有变化。
下面的代码可以获取和给予额外的爱心。但是当我与一个 heartPrefab 发生碰撞,并且我已经有 3 个心(最大)时,我得到了错误:索引超出范围数组。
我应该如何进行?如果可能,C# 回答
using UnityEngine;
using System.Collections;
using UnityEngine;
using System.Collections;
public class Heart : MonoBehaviour
{
public Texture2D[] initialHeart;
private int heart;
private int manyHeart;
void Start ()
{
// The game start with 3 hearts at RANGE 0
GetComponent<GUITexture> ().texture = initialHeart [0];
heart = initialHeart.Length;
}
void Update ()
{
}
public bool TakeHearts ()
{
if (heart < 0) {
return false;
}
if (manyHeart < (heart - 1)) {
manyHeart += 1;
GetComponent<GUITexture> ().texture = initialHeart [manyHeart];
return true;
} else {
return false;
}
}
public bool AddHearts ()
{
if (heart <= 2) {
return false;
}
if (manyHeart < (heart + 1)) {
manyHeart -= 1;
GetComponent<GUITexture> ().texture = initialHeart [manyHeart];
return true;
} else {
return false;
}
}
}
【问题讨论】:
-
我们能看到初始化
initialHeart的代码吗? -
@Quantic 我在 Unity 中创建了 GameObject(重命名为 Hearts),添加了 GuiTexture 和 Heart Script,我可以通过检查器设置数组 =]
-
if (manyHeart < (heart + 1))应该是if (manyHeart > 0)我认为。 -
@GunnarB。不起作用,当玩家与 heartPrefab 碰撞时,什么也没有发生(不输,不赢)。但是 ty =]
-
它必须与此有关,因为当前您的代码可能会遇到负索引,当您尝试调用
initialHeart[-1]时会产生错误。见 MatthewS 的回答。
标签: c# arrays unity3d unityscript unity3d-2dtools