using System; using UnityEngine; public class SetPositionOnHit : BaseBehaviour { private void GetEffectSettingsComponent(Transform tr) { Transform parent = tr.parent; if (parent != null) { this.effectSettings = parent.GetComponentInChildren(); if (this.effectSettings == null) { this.GetEffectSettingsComponent(parent.transform); } } } private void Start() { this.GetEffectSettingsComponent(base.transform); if (this.effectSettings == null) { UnityEngine.Debug.Log("Prefab root or children have not script \"PrefabSettings\""); } this.tRoot = this.effectSettings.transform; } private void effectSettings_CollisionEnter(object sender, CollisionInfo e) { Vector3 normalized = (this.tRoot.position + Vector3.Normalize(e.Hit.point - this.tRoot.position) * (this.effectSettings.MoveDistance + 1f)).normalized; base.transform.position = e.Hit.point - normalized * this.OffsetPosition; } private void Update() { if (!this.isInitialized) { this.isInitialized = true; this.effectSettings.CollisionEnter += this.effectSettings_CollisionEnter; } } private void OnDisable() { base.transform.position = Vector3.zero; } public float OffsetPosition; private EffectSettings effectSettings; private Transform tRoot; private bool isInitialized; }