2016-09-27 40 views
0

我編碼2D平臺遊戲。在遊戲中,有盟友和敵人走向對方。如果他們相互碰撞,他們自己的計時器腳本開始倒數計時,健康減少的時間爲週期。如果一個角色的健康等於零,我摧毀了這個gameobject。我爲每個角色添加一些布爾值來檢測它們是否相互碰撞。雖然碰撞兩個gameobjects,如果一個破壞,其他碰撞gameobject仍然持續碰撞,雖然沒有碰撞對象。這隻會發生其他碰撞對象被破壞。如果其他遊戲對象破壞,Unity 2D碰撞不會停止

public float setSpeed; 
public bool enemyColliding; 

float speed; 

void Start() { 

} 

// Update is called once per frame 
void Update() { 
    speed= setSpeed; 
    GetComponent<Rigidbody2D>().velocity = new Vector2 (speed,GetComponent<Rigidbody2D>().velocity.y); 
    if (enemyColliding) { 
     attackAnimation(); 
    } 
    else 
    { 
     walkAnimation(); 
    } 
} 

void OnTriggerEnter2D(Collider2D coll) 
{ 
    if (coll.gameObject.tag == "dusman" /*enemy*/) { 
     enemyColliding= true; 
    } 

} 
void OnTriggerExit2D(Collider2D coll) 
{ 
    if (coll.gameObject.tag=="dusman" /*enemy*/) { 
     enemyColliding= false; 
    } 
} 
void attackAnimation() 
{ 
    Animator animator = this.gameObject.GetComponent<Animator>(); 
    animator.runtimeAnimatorController = Resources.Load ("AllyWr2AttackAnim") as RuntimeAnimatorController; 
} 
void walkAnimation() 
{ 
    Animator animator = this.gameObject.GetComponent<Animator>(); 
    animator.runtimeAnimatorController = Resources.Load ("AllyWr2WalkAnim") as RuntimeAnimatorController; 
} 

任何幫助,請...

回答

1
void OnTriggerExit2D(Collider2D coll) 
{ 
    enemyColliding= false; 
} 

試試這個

+0

謝謝回答。還有更多不同的gameobjects。它檢測到他人,如果我這樣做。 –

+0

如果我是正確的,當你刪除gamepject與HP <0,他們仍然衝突和OnTriggerExit2D沒有被調用。它在刪除之後調用並且OnTriggerExit2D中的coll應該爲null。檢查這個。如果它是真的,你可以在if語句 –

+0

中使用它,另一種方法是改變gameobject在gamefield外的位置,然後刪除它。黑客) –