private void shoot() { _should_shoot = false; if (!_reload_timestamp.HasPassed()) { return; } if (!Munitions.TryShoot()) { Reload(); return; } if (gameObject.GetComponentInParent <Player>() != null) { AkSoundEngine.PostEvent("Player_Shoot", gameObject); } else if (gameObject.GetComponent <EnemyBehaviour>() != null) { AkSoundEngine.PostEvent("Robot_Shoot", gameObject); } CreateShotEffect(); if (!Physics.Raycast(_aim_camera_object.position, _aim_camera_object.forward, out var hit, _range)) { create_projectile(_aim_camera_object.position + _aim_camera_object.forward * _range, _aim_camera_object.forward); return; } create_projectile(hit.point, (hit.point - _aim_camera_object.position).normalized); var hit_obj = hit.rigidbody?.GetComponent <Targetable>(); var hit_dto = new HitInfoDto { Damage = _damage, HitPosition = hit.point, Origin = transform.position }; hit_obj?.Hit(hit_dto); if (hit_obj == null) { Targetable.CreateHitEffect(hit_dto); } }
public static void CreateHitEffect(HitInfoDto hitInfoDto, ParticleSystem hitEffect = null) { if (hitEffect == null) { hitEffect = ShotManager.Instance.BasicEffect; AkSoundEngine.PostEvent("Bullet_Impact_Mud", FindObjectOfType <Player>().gameObject); } else { AkSoundEngine.PostEvent("Bullet_Impact_Metal", FindObjectOfType <Player>().gameObject); } var obj = Instantiate(hitEffect); obj.transform.position = hitInfoDto.HitPosition; obj.transform.LookAt(hitInfoDto.Origin); obj.Play(); Destroy(obj.gameObject, 0.2f); }
public void Hit(HitInfoDto hitInfoDto) { CreateHitEffect(hitInfoDto, hitEffect); Damageable.TakeDamage(hitInfoDto.Damage); }