void GenerateNewTrailElement() { m_CurrentDisplacement -= m_ZMoveStep; if (m_CurrentDisplacement <= m_ZMoveStep) { m_CurrentDisplacement = m_ZMoveMax; } GameObject _tmpGo = TrailElement.GetFreeElement(); TrailElement _TmpElement = _tmpGo.GetComponent <TrailElement>(); //GameObject _tmpGo = GameObject.Instantiate(m_TrailElementPrefab); //_tmpGo.name = "TRAIL_" + m_SpriteToDuplicate.name; //_tmpGo.hideFlags = HideFlags.None; //_tmpGo.transform.Equals(m_SpriteToDuplicate.transform); _TmpElement.m_Transform.SetParent(m_SpriteToDuplicate.transform, true); _TmpElement.m_Transform.localScale = new Vector3(1, 1, 1); _TmpElement.m_Transform.localRotation = Quaternion.identity; _TmpElement.m_Transform.localPosition = Vector3.zero; if (m_TrailParent == null) { _TmpElement.m_Transform.SetParent(m_GlobalTrailContainer, true); } else { _TmpElement.m_Transform.SetParent(m_LocalTrailContainer, true); } Vector3 _NewPos = _tmpGo.transform.position; _NewPos.z = m_CurrentDisplacement; _TmpElement.m_Transform.position = _NewPos; _TmpElement.Initialise(this); _tmpGo.layer = LayerMask.NameToLayer(m_LayerName); }
static bool Prefix(float t, ref float localF, ref int __result, TrailElementCollection __instance) { float num = __instance[__instance.capacity - 2].distance * Mathf.Clamp01(t); int i = 0; while (__instance[i].distance < num && i < __instance.capacity - 1) { i++; } if (i == 0 || i == __instance.capacity - 1) { localF = 0f; __result = 0; } else { TrailElement trailElement = __instance[i - 1]; localF = (num - trailElement.distance) / (__instance[i].distance - trailElement.distance); __result = i - 1; } return(false); }
/// <summary> /// Hide the current trail, delete all trails elements in this trail. /// </summary> public void HideTrail() { while (m_ElementsInTrail.Count > 0) { TrailElement _tmp = m_ElementsInTrail.Dequeue(); if (_tmp != null) { _tmp.Hide(); } } }
private void Awake() { if (m_TrailCount == 0) { TrailElement.ClearFreeElements(); Destroy(m_TrailElementPrefab); m_TrailElementPrefab = null; } m_TrailCount++; SetTrailParent(m_TrailParent); m_CurrentDisplacement = m_ZMoveMax; m_TrailElementPrefab = GameObject.Find("TrailElementReference"); if (m_TrailElementPrefab == null) { m_TrailElementPrefab = new GameObject(); m_TrailElementPrefab.AddComponent <SpriteRenderer>(); m_TrailElementPrefab.AddComponent <TrailElement>(); m_TrailElementPrefab.name = "TrailElementReference"; #if HIDE_TRAIL_IN_HIERRARCHY m_TrailElementPrefab.hideFlags = HideFlags.HideInHierarchy; #endif if (m_TrailParent == null) { m_TrailElementPrefab.transform.SetParent(m_GlobalTrailContainer, true); } else { m_TrailElementPrefab.transform.SetParent(m_LocalTrailContainer, true); } m_TrailElementPrefab.GetComponent <TrailElement>().Hide(false); } if (m_SpriteToDuplicate == null) { m_SpriteToDuplicate = GetComponent <SpriteRenderer>(); } if (m_SpriteToDuplicate == null) { Debug.LogError("You need a SpriteRenderer on the same GameObject as the SpriteTrail script. Else, you can set the SpriteToDuplicate variable from the inspector"); return; } m_PreviousPosSpawned = m_SpriteToDuplicate.transform.position; /*if (m_EnabledByDefault) * EnableTrailEffect();*/ }
void OnLevelWasLoaded() { TrailElement.ClearFreeElements(); Destroy(m_TrailElementPrefab); m_TrailElementPrefab = null; }