SetPositionOnHit.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using UnityEngine;
  3. public class SetPositionOnHit : BaseBehaviour
  4. {
  5. private void GetEffectSettingsComponent(Transform tr)
  6. {
  7. Transform parent = tr.parent;
  8. if (parent != null)
  9. {
  10. this.effectSettings = parent.GetComponentInChildren<EffectSettings>();
  11. if (this.effectSettings == null)
  12. {
  13. this.GetEffectSettingsComponent(parent.transform);
  14. }
  15. }
  16. }
  17. private void Start()
  18. {
  19. this.GetEffectSettingsComponent(base.transform);
  20. if (this.effectSettings == null)
  21. {
  22. UnityEngine.Debug.Log("Prefab root or children have not script \"PrefabSettings\"");
  23. }
  24. this.tRoot = this.effectSettings.transform;
  25. }
  26. private void effectSettings_CollisionEnter(object sender, CollisionInfo e)
  27. {
  28. Vector3 normalized = (this.tRoot.position + Vector3.Normalize(e.Hit.point - this.tRoot.position) * (this.effectSettings.MoveDistance + 1f)).normalized;
  29. base.transform.position = e.Hit.point - normalized * this.OffsetPosition;
  30. }
  31. private void Update()
  32. {
  33. if (!this.isInitialized)
  34. {
  35. this.isInitialized = true;
  36. this.effectSettings.CollisionEnter += this.effectSettings_CollisionEnter;
  37. }
  38. }
  39. private void OnDisable()
  40. {
  41. base.transform.position = Vector3.zero;
  42. }
  43. public float OffsetPosition;
  44. private EffectSettings effectSettings;
  45. private Transform tRoot;
  46. private bool isInitialized;
  47. }