2016-04-21 26 views
1

私は、プレイヤーが3つの心臓を持っている2Dのゲームのコードに取り組んでいます。最大配列の範囲の制限

プレーヤーがbombPrefabと衝突すると、彼は1つの心臓を失います。プレイヤーがheartPrefabに衝突した場合、彼は余分な心を獲得する。彼がbombPrefabと3回連続して衝突すると、ゲームは終了する。

ハートのテクスチャは次のとおりです。アレイ0(3心)アレイ1(2心)アレイ2(1心)。

アレイを制限する問題が発生しています。私は次のような反応を得る方法を知りたいです:プレイヤーが3つの心臓を持っていて、heartPrefabと衝突すると、そのオブジェクトだけが破壊されます。プレイヤーが持っている心臓の数に変化はありません。

以下のコードは、余分な心を奪うためのものです。しかし、私が1つの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; 

     } 
    } 
} 
+0

「initialHeart」を初期化するコードはありますか? – Quantic

+0

@Quantic Unity内でGameObject(Heartsに改名)を作成し、GuiTextureとHeart Scriptを追加しました。インスペクタで配列を設定できます。 –

+0

if(manyHeart <(heart + 1)) 'は(if manyHeart> 0) '私は思う。 @ GunnarB。 –

答えて

1

場合は、if文(そうするためのいくつかの他の理由がない限り)... VaRのmanyHeartと心は常に反比例している過度に複雑されています。単に:

public bool AddHearts() 
{ 
    if (manyHeart > 0) { 
     manyHeart -= 1; 
     GetComponent<GUITexture>().texture = initialHeart [manyHeart]; 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

すっごくありがとう!しかし、今、どのようにプレーヤーが3つの心を持っている場合、私はheartPrefabを破壊することができますか? –

+0

おそらく 'OnColliderEnter'関数(あるいはそれに類するもの)をどこかで持っていて、インスタンス化された心臓の破棄を呼び出して、プレーヤーが実行して、' AddHearts'を呼び出すでしょう。そうであれば、実際にはうまくいくはずです.GOを破壊してプレイヤーに心臓を加えるのは2つの別々の作業です。そうでなければ、実際に 'Add/TakeHearts'を呼び出すコードを提供する必要があります。私が持っているGunnarB.yes @ –

+0

: '無効OnCollisionEnter2D(Collision2Dのcolisor) \t { \t \t(colisor.gameObject.tag == "ビー"){ \t \t \tソム()であれば、 \t \t \t heart = GameObject.FindGameObjectWithTag( "Heart")。GetComponent ()をハートにします。 \t \t \t IF(vida.AddHearts()) \t \t \t \t(ゲームオブジェクト)を破壊します。 \t \t} \t \t IF(colisor.gameObject.tagが "床" ==){ \t \t \tは(ゲームオブジェクト、1を破壊します。5f)。 \t \t} \t}しかし、もしプレイヤーが3心臓heartprefabを破壊しないなら、なぜですか? –