BlasterBullet.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using UnityEngine;
  2. namespace Assets.Scripts.BlasterWeapon
  3. {
  4. [RequireComponent(typeof(TrailRenderer))]
  5. internal sealed class BlasterBullet : MonoBehaviour
  6. {
  7. [HideInInspector]
  8. public float Speed = 1;
  9. [HideInInspector]
  10. public float LifeTime = 2f;
  11. [HideInInspector]
  12. public float LifeTimeAfterCollision = 1f;
  13. [HideInInspector]
  14. public bool DestroyOnCollision = true;
  15. public GameObject ImpactEffect;
  16. private Transform _transform;
  17. private bool _isCollisionDetected;
  18. private void Start()
  19. {
  20. _transform = transform;
  21. Destroy(gameObject, LifeTime);
  22. }
  23. private void Update()
  24. {
  25. if (_isCollisionDetected)
  26. return;
  27. _transform.position += _transform.forward * Speed * Time.deltaTime;
  28. RaycastHit hit;
  29. if (!Physics.Raycast(_transform.position, _transform.forward, out hit, Speed * Time.deltaTime * 2))
  30. return;
  31. _isCollisionDetected = true;
  32. _transform.position = hit.point;
  33. if (DestroyOnCollision)
  34. Destroy(gameObject, LifeTimeAfterCollision);
  35. if (ImpactEffect == null)
  36. return;
  37. var impactEffect = Instantiate(ImpactEffect, hit.point, new Quaternion());
  38. impactEffect.transform.LookAt(_transform.position + hit.normal);
  39. Destroy(impactEffect, LifeTime);
  40. }
  41. }
  42. }