private void Shoot() { RaycastHit2D hit = Physics2D.Raycast( transform.position, transform.up, _vision, LayerMask.GetMask("Enemy")); Debug.DrawRay(transform.position, transform.up * _vision); if (hit.collider == null) { return; } if (!hit.transform.CompareTag("Enemy")) { return; } ProjectileBehaviourScript projectile = null; for (int i = 0; i < _projectilePool.Length; i++) { if (_projectilePool [i].gameObject.activeSelf == false) { projectile = _projectilePool [i]; projectile.transform.position = transform.position; projectile.transform.rotation = transform.rotation; projectile.Shoot(); break; } } }
private IEnumerator SquareSplitAfterTime(float _time, float _distance) { yield return(new WaitForSeconds(_time)); GameObject go1 = Instantiate(gameObject, transform.position, transform.rotation); GameObject go2 = Instantiate(gameObject, transform.position, transform.rotation); ProjectileBehaviourScript bullet1 = go1.GetComponent <ProjectileBehaviourScript>(); ProjectileBehaviourScript bullet2 = go2.GetComponent <ProjectileBehaviourScript>(); bullet1.additionalBulletBehaviour = AdditionalBulletBehaviour._null_; bullet2.additionalBulletBehaviour = AdditionalBulletBehaviour._null_; //go1.transform.position += transform.right * _distance; //go2.transform.position -= transform.right * _distance; bullet1.direction.x = bullet1.direction.y / 5; bullet2.direction.x = -bullet2.direction.y / 5; //StartCoroutine(Test(go1, go2, _distance)); bullet1.PerformSetDirectionAfterTime(direction, 0.5f); bullet2.PerformSetDirectionAfterTime(direction, 0.5f); //Destroy(this.gameObject); }
/// <summary> /// Shoot a projectil /// </summary> public virtual void Shoot() { RaycastHit2D hit = Physics2D.Raycast( _body.position, _body.up, _sensorFieldSize + 0.2f, LayerMask.GetMask(_enemyLayer)); #if UNITY_EDITOR Debug.DrawRay(_body.position, _body.up * _sensorFieldSize); #endif if (hit.collider == null) { return; } if (!hit.transform.CompareTag(_enemyTag)) { return; } ProjectileBehaviourScript projectile = null; for (int i = 0; i < _projectilePool.Length; i++) { if (_projectilePool[i].gameObject.activeSelf == false) { projectile = _projectilePool[i]; projectile.gameObject.tag = gameObject.tag; projectile.transform.position = _body.position; projectile.transform.rotation = _body.rotation; projectile.Shoot(); break; } } }
private void OnTriggerEnter2D(Collider2D collision) { if (this.GetType() != typeof(ExplosionBehaviourScript)) { if (collision.gameObject.layer == 8 /*Static*/) { if (collision.CompareTag("BulletLimiter")) { Destroy(this.gameObject); } else { InitiliseSelfDestruction(); } } if (isEnemyBullet == false) //if bullet from player { if (collision.gameObject.layer == 10 /*Enemy*/) { if (bulletType == BulletTypes.SniperBullet_lvl_X == true) { if (collision.gameObject != lastHitEnemy) { if (collision.gameObject.GetComponent <EnemyBehaviourScript>().Health >= 0) { collision.gameObject.GetComponent <EnemyBehaviourScript>().Health -= damage * damageMultiplyer; } } lastHitEnemy = collision.gameObject; } //is not sniper bullet else if (collision.gameObject.GetComponent <EnemyBehaviourScript>().Health >= 0) { collision.gameObject.GetComponent <EnemyBehaviourScript>().Health -= damage * damageMultiplyer; InitiliseSelfDestruction(); } } } else //if bullet is from enemy { if (collision.gameObject.CompareTag("Player")) { collision.gameObject.GetComponent <PlayerBehaviourScript>().ChangeHealthBy(-damage); InitiliseSelfDestruction(); } } if (collision.gameObject.CompareTag("Projectile")) { ProjectileBehaviourScript otherProjectile = collision.gameObject.GetComponent <ProjectileBehaviourScript>(); if (this.isShootable == true) { if (otherProjectile.isEnemyBullet == false) { InitiliseSelfDestruction(); } } if (bulletType == BulletTypes.WaveBullet_lvl_X) { if (otherProjectile.isEnemyBullet == true) { if (otherProjectile.isShootable == true) { otherProjectile.InitiliseSelfDestruction(); } else { Destroy(collision.gameObject); //otherProjectile.isEnemyBullet = false; //otherProjectile.gameObject.transform.rotation = Quaternion.Euler(0, 0, otherProjectile.gameObject.transform.rotation.z - 180); //otherProjectile.gameObject.transform.rotation = Quaternion.Euler(0, 0, (otherProjectile.gameObject.transform.rotation.z * transform.rotation.z)); //otherProjectile.gameObject.transform.Rotate(0, 0, 2 * (transform.rotation.z - otherProjectile.gameObject.transform.rotation.z)); } } } } } else //this is an exposion { if (isEnemyBullet == false) // is player explosion { if (collision.gameObject.layer == 10 /*Enemy*/) { collision.gameObject.GetComponent <EnemyBehaviourScript>().Health -= damage; } } else //is enemy explosion { if (collision.gameObject.CompareTag("Player")) { collision.gameObject.GetComponent <PlayerBehaviourScript>().ChangeHealthBy(-damage); InitiliseSelfDestruction(); } } } }