I'm making a simple unity 2d space shooter game for iPhone where the player has two virtual joysticks, one for movement and one for shooting. I noticed that when I shoot at an enemy while moving away from it above a certain speed the bullets fail to hit the enemy. I have rigidbody2d attached to both the bullet and the enemy. Both have colliders attached, the one on the bullet is a trigger. Here are my codes for the bullet:
#pragma strict
var EnemyBulletDelay:float;
var BulletDamage:int;
var Spark:GameObject;
function Start () {
//destroy bullet after delay
Destroy(this.gameObject,1+EnemyBulletDelay);
}
function OnTriggerEnter2D(other:Collider2D){
//detect if enemy taking player bullet shots or player taking enemy bullet shots
if ((other.gameObject.tag=="Enemy"&&gameObject.tag=="Bullet")||(other.gameObject.tag=="Player"&&gameObject.tag=="EnemyBullet")){
//target takes damage
other.SendMessage("takeDamage",BulletDamage);
//activates spark particles on hit
if(Spark){
Instantiate(Spark,transform.position,transform.rotation);
}
//destroy bullet
Destroy(this.gameObject);
}
}
And the codes for enemy:
#pragma strict
var EnemyHealth:int;
var GameManager:GameObject;
var ScoreWorth:int;
var Explosion:GameObject;
function Start(){
GameManager=GameObject.Find("GameManager");
}
function takeDamage(damage:int){
if (EnemyHealth!=0){
if(EnemyHealth-damage>0){
StartCoroutine("flashRed");
}
EnemyHealth-=damage;
if (EnemyHealth<=0){
EnemyHealth=0;
DeathSequence();
}
}
}
function flashRed(){
renderer.material.color=Color.red;
yield WaitForSeconds(.1);
renderer.material.color=Color.white;
}
function DeathSequence(){
SendMessage("Dead");
GameManager.SendMessage("AddScore",ScoreWorth);
Instantiate(Explosion,transform.position,transform.rotation);
Destroy(this.gameObject);
}
Please help!
↧