2016-10-20 15 views
0

Все игры gamebjects (враги) уничтожаются, когда игрок нажимает атаку на один из игровых объектов. Я хочу, чтобы он уничтожил gameObject (враг), если он столкнулся с текущими, в то время как другие не будут уничтожены. Все враги имеют один и тот же скрипт.


Вот сценарий движения, где он прикреплен в MainCharacter геймобжекты ..
Как предотвратить уничтожение объектов gameObject с помощью того же сценария при столкновении?

public class Movement : MonoBehaviour 
{ 
    public float movementSpeed = 6.0f; 
    public GameObject player; 
    public int jumpHeight = 350; 
    private bool onGround = false; 
    private bool afterMovingPlatform = false; 
    Animator anim; 

    //// Use this for initialization 
    void Start() 
    { 
     anim = GetComponent<Animator>(); 
     player = GetComponent<GameObject>(); 
    } 

    void Update() 
    { 
     //these are the codes for keyboard inputs when walking, attacking, etc... 
    } 

    void OnCollisionEnter2D(Collision2D coll) 
    { 
     if (coll.gameObject.tag == "Ground") 
     { 
      onGround = true; 

      if (afterMovingPlatform) 
      { 
       transform.parent = null; 
       afterMovingPlatform = false; 
      } 
     } 

     if ((coll.gameObject.tag == "Respawn" || coll.gameObject.tag == "Enemy") && (this.anim.GetCurrentAnimatorStateInfo(0).IsName("Attack Right") || this.anim.GetCurrentAnimatorStateInfo(0).IsName("Attack Left"))) 
     { 
      EnemyHealth.giveDamage(); 
     } 
     else if (coll.gameObject.tag == "Respawn" || coll.gameObject.tag == "Enemy") 
     { 
      CoinScore.score = 0; 
      Health.health = 3; 
      EnemyHealth.enemyHealth = 1; 
      SceneManager.LoadScene("LevelF"); 
      Debug.Log("RESPAWN"); 
     } 

     if (coll.gameObject.tag == "MovingPlatform") 
     { 
      onGround = true; 
      afterMovingPlatform = true; 
      transform.parent = coll.transform; 
     } 
    } 

    //void onCollisionExit2D(Collision2D coll) 
    //{ 
    // Debug.Log("EXIT"); 
    // if (coll.gameObject.tag == "MovingPlatform") 
    // { 
    //  transform.parent = null; 
    // } 
    //} 
} 


Script прилагается к врагам. У всех из них есть Enemy Healths: 1 введено в единстве.

using UnityEngine; 
using System.Collections; 

public class EnemyHealth : MonoBehaviour { 

    public static int enemyHealth = 1; 
    public Transform explosion; 
    public int enemyHealths; 
    CircleCollider2D coll; 

    // Use this for initialization 
    void Start() { 
     coll = GetComponent<CircleCollider2D>(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     enemyHealths = enemyHealth; 
     if (enemyHealths <= 0) 
     { 
      Instantiate(explosion, transform.position, transform.rotation); 
      Destroy(coll.gameObject); 
     } 
    } 

    public static void giveDamage() 
    { 
     enemyHealth -= 1; 
    } 
} 

ответ

2

Просто потому, что функция giveDamage объявлена ​​как static (так же член enemyHealth)

Используйте статический модификатор, чтобы объявить статический элемент, который принадлежит к самому типу, а не к конкретный объект.

Таким образом, у каждого врага одинаковое количество здоровья, и если вы повредите его, вы нанесете урон всем врагам.

Каждый враг должен иметь собственное здоровье. Удалите ключевые слова static и сделайте так, как описано в сценарии вашего плеера.

if ((coll.gameObject.tag == "Respawn" || coll.gameObject.tag == "Enemy") && (this.anim.GetCurrentAnimatorStateInfo(0).IsName("Attack Right") || this.anim.GetCurrentAnimatorStateInfo(0).IsName("Attack Left"))) 
{ 
    coll.gameObject.GetComponent<EnemyHealth>().giveDamage(); 
} 
+0

спасибо, это работает! – Temmie

 Смежные вопросы

  • Нет связанных вопросов^_^