1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using UnityEngine;
- namespace Assets.Scripts.BlasterWeapon
- {
- [RequireComponent(typeof(TrailRenderer))]
- internal sealed class BlasterBullet : MonoBehaviour
- {
- [HideInInspector]
- public float Speed = 1;
- [HideInInspector]
- public float LifeTime = 2f;
- [HideInInspector]
- public float LifeTimeAfterCollision = 1f;
- [HideInInspector]
- public bool DestroyOnCollision = true;
- public GameObject ImpactEffect;
- private Transform _transform;
- private bool _isCollisionDetected;
- private void Start()
- {
- _transform = transform;
- Destroy(gameObject, LifeTime);
- }
- private void Update()
- {
- if (_isCollisionDetected)
- return;
- _transform.position += _transform.forward * Speed * Time.deltaTime;
- RaycastHit hit;
- if (!Physics.Raycast(_transform.position, _transform.forward, out hit, Speed * Time.deltaTime * 2))
- return;
- _isCollisionDetected = true;
- _transform.position = hit.point;
- if (DestroyOnCollision)
- Destroy(gameObject, LifeTimeAfterCollision);
- if (ImpactEffect == null)
- return;
- var impactEffect = Instantiate(ImpactEffect, hit.point, new Quaternion());
- impactEffect.transform.LookAt(_transform.position + hit.normal);
- Destroy(impactEffect, LifeTime);
- }
- }
- }
|