private void Update() { if (_player.Energy <= 0) { return; } if (Input.GetKey(KeyCode.DownArrow)) { _isCharge = true; var asts = _astFactory.FieldAsteroids; var count = 0; _nowLockonTime = Mathf.Max(0, _nowLockonTime - Time.deltaTime); // TODO: かなり処理負荷がキツい箇所になっているのでもっと数を出したい場合は見直しが必要 foreach (var ast in asts) { if (!(this.InCamera(ast.gameObject) && count < _maxBullet)) { _targets.Remove(ast); continue; } count++; if (_targets.Contains(ast)) { continue; } if (_nowLockonTime == 0) { _targets.Add(ast); SoundManager.Instance.Play(SoundClip.LOCKON, false); _nowLockonTime = _lockonTime; } } return; } // レーザー発射判定~発射 if (!_isCharge) { return; } _player.AddDamage(100); foreach (var ast in _targets) { if (ast == null) { continue; } _player.AddDamage(1); var laser = Instantiate( _laser, _player.transform.position, _player.transform.rotation * Quaternion.Euler(Random.Range(-90, 90), Random.Range(-90, 90), Random.Range(-90, 90))); laser.Target = ast.gameObject; } _targets.Clear(); _isCharge = false; }
private void OnCollisionEnter(Collision other) { if (other.gameObject.tag == TagList.Player) { var isDestroy = this.AddDamage(_player.NowAttackPower); if (!isDestroy) { _player.AddDamage(_damage); } _player.PlayDamageEffect(); } }