protected virtual void Start() { if (world == null) { world = World.Main; } if (trail == null) { trail = new List <CharacterTrail>(10); } audioSrc = GetComponent <AudioSource>(); if (spriteRenderer == null) { spriteRenderer = GetComponentInChildren <SpriteRenderer>(false); } if (trailPrefab != null && trailStartLength > 0) { CharacterTrail prevTrail = null; for (int i = 0; i < trailStartLength; ++i) { CharacterTrail ct = Instantiate <CharacterTrail>(trailPrefab, world.transform); ct.character = this; ct.previousTrail = prevTrail; ct.transform.position = transform.position - curMoveDir * i * ct.spacing; trail.Add(ct); prevTrail = ct; } } }
public void CutTrail(CharacterTrail trailPart) { if (trail == null || trailPart == null) { return; } int index = trail.IndexOf(trailPart); if (index < 0 || index >= trail.Count) { return; } int restCount = trail.Count - index; CharacterTrail[] rest = trail.GetRange(index, restCount).ToArray(); trail.RemoveRange(index, restCount); if (rest != null) { foreach (CharacterTrail ct in rest) { Destroy(ct.gameObject); } } if (Length < 1) { InvokeDeath(); } }