2016-09-27 13 views
0

2dプラットフォームゲームをコーディングしています。ゲームでは、味方と敵が互いに向かって歩いています。彼らがお互いに衝突すると、自分自身のタイマースクリプトがカウントダウンを開始し、その時間までに健康状態が期間として減少します。キャラクターのヘルスがゼロに等しい場合、私はそのゲームオブジェクトを破壊する。私は、お互いに衝突しているかどうかを検出するために、各キャラクターにブーリアンを追加します。両方のゲームオブジェクトを衝突させながら、を破壊すると、他の衝突ゲームオブジェクトは依然として衝突するが、衝突オブジェクトは存在しない。これはちょうど他の衝突オブジェクトが破壊されて起こります。他のゲームオブジェクトが破壊された場合、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

感謝をしてみてください。 1つ以上の異なるゲームオブジェクトが存在します。私はそれを行うと他を検出します。 –

+0

右の場合、hp <0のgameobjectを削除すると、衝突し、OnTriggerExit2Dが呼び出されませんでした。 OnTriggerExit2Dを削除してcollを呼び出すとnullになります。これをチェックして。その真実なら、if文で使うことができます –

+0

別の方法はgamefieldの外でgamefieldの位置をgamefieldの外に変更して削除することです。ハック) –

関連する問題