2017-12-11 10 views
0

私はUnity3Dの問題に直面しています。私は、プレイヤーと敵の両方に同じ健康スクリプトを添付しています。プレイヤーが死んだときにゲームオーバーメッセージを表示したいのですが、プレイヤーと敵の両方が死ぬとメッセージオーバーゲームが表示されるという問題があります。単体でのスクリプティング3d

私のコードがあるように見えること:

public class CharacterStats : MonoBehaviour 
{ 
    // Use this for initialization 
    void Start() 
    { 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     health = Mathf.Clamp (health, 0, 100); 
    } 

    public void damage(float damage) 
    { 
     health -= damage; 
     if(health<=0) 
     { 
      Die(); 
      Application.LoadLevel(gameover); 
     } 
    } 

    void Die() 
    { 
     characterController.enabled = false; 
     if (scriptstodisable.Length == 0) 
      return; 
       foreach (MonoBehaviour scripts in scriptstodisable) 

       scripts.enabled = false; 
       if (ragdollmanger != null) 
        ragdollmanger.Raggdoll(); 
    } 
} 
+0

あなたは、あなたのキャラクター(プレイヤーや敵)とショー「ダイ」というメッセージのタイプを記述する列挙型を追加することができた場合にのみ、あなたの列挙型の値==プレイヤーアップ...(Y)、その作業の親指仲間 – V319

答えて

2

あなたはプレーヤーと敵の両方のために1つのスクリプトを使用していたよう。このことができます:)

+0

ありがとう –

1

をあなたはCharacterStatsがあるかどうかを確認するためにBOOLを使用することができます希望


public class Character : MonoBehaviour 
{ 
    public float Health; 

    public virtual void Damage(float damageValue) 
    { 
     Health -= damageValue; 
    } 

    public virtual void Die() 
    { 

    } 
} 

public Enemy : Character 
{ 
    public override void Die() 
    { 
     // do enemy related stuff 
    } 
} 

public Player : Character 
{ 
    public override void Die() 
    { 
     // do player related stuff. 
     // like game over screen 
    } 
} 

:あなたは両方のためのさまざまなクラスを持っているとのインタフェースを実装したり、健康を実装するための基本クラスから派生する必要がありますたとえば、 ”Player”というタグをプレーヤーのゲームオブジェクトに追加し、 gameObject.tag == “Player”かどうかをチェックするか、ゲームオブジェクト ”Player”と同等の名前を付けることができます。チェックする場合は、 gameObject.nameをチェックします。

ゲームオーバーメッセージの機能は、ゲームオブジェクトがプレーヤーの場合にのみ実行できます(isPlayerがtrue)。

public class CharacterStats : MonoBehaviour 
{ 
    bool isPlayer = false; 

    // Use this for initialization 
    void Start() 
    { 
     if(gameObject.tag == “Player”) 
     { 
      isPlayer = true; 
     }  
    } 

    // Update is called once per frame 
    void Update() 
    { 
     health = Mathf.Clamp (health, 0, 100); 
    } 

    public void damage(float damage) 
    { 
     health -= damage; 
     if(health<=0) 
     { 
      if(isPlayer) 
      { 
       // Do Player-only stuff 
      } 

      // Do Stuff for both players and enemies 
     } 
    } 
} 
+0

場合(gameObject.tag == 'Player);このエラーが発生します –

+0

タグは文字列であり、 'if(gameObject.tag ==" Player ")'のように二重引用符で囲む必要があります。 – padonald

+0

ありがとう@padonald。愚かなタイプミスでした。それはあなたのために今働いたのですか、@yasirkhan? – Jakey