SFX_GroundAttacher.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using UnityEngine;
  2. // ReSharper disable once CheckNamespace
  3. namespace QFX.SFX
  4. {
  5. public class SFX_GroundAttacher : SFX_ControlledObject
  6. {
  7. public LayerMask LayerMask;
  8. public float MaxDistance = 100;
  9. public bool OverrideRotation;
  10. public Vector3 Offset;
  11. private bool _isAttached;
  12. private Transform _transform;
  13. private void Awake()
  14. {
  15. _transform = transform;
  16. }
  17. private void Update()
  18. {
  19. if (!IsRunning || _isAttached)
  20. return;
  21. _isAttached = true;
  22. RaycastHit raycastHit;
  23. var hitPos = _transform.position.y;
  24. if (Physics.Raycast(_transform.position, Vector3.down, out raycastHit, MaxDistance, LayerMask))
  25. hitPos = Mathf.Min(hitPos, raycastHit.point.y);
  26. if (!(Mathf.Abs(_transform.position.y - hitPos) > 0.01f))
  27. return;
  28. transform.position = new Vector3(_transform.position.x, hitPos + Offset.y, _transform.position.z);
  29. if (OverrideRotation)
  30. transform.rotation = Quaternion.LookRotation(Vector3.forward);
  31. Stop();
  32. }
  33. }
  34. }