public void DrawTransitions() { // Remove old drawnTransitions.ForEach(x => Destroy(x.gameObject)); drawnTransitions.Clear(); // Copy of all transitions to draw List <StateMachineData.Transition> transitions = new List <StateMachineData.Transition>(stateMachineData.transitions); while (transitions.Count > 0) { // Stack same transition with other transitions List <StateMachineData.Transition> sameTransition = transitions.FindAll(x => x.from == transitions[0].from && x.to == transitions[0].to); transitions.RemoveAll(x => sameTransition.Contains(x)); // Draw GameObject o = Instantiate(transitionPrefab); o.transform.position = Vector3.zero; // Pos Vector2 startPos = stateMachineData.states.Find(x => x.id == sameTransition[0].from).pos; Vector2 endPos = stateMachineData.states.Find(x => x.id == sameTransition[0].to).pos; // Set & Add Text TransitionPrefab t = o.GetComponent <TransitionPrefab>(); t.Set(startPos, endPos, stateMachineData.InputToString(sameTransition[0].input), sameTransition[0]); sameTransition.RemoveAt(0); foreach (StateMachineData.Transition item in sameTransition) { t.AddText(stateMachineData.InputToString(item.input), item); } drawnTransitions.Add(t); } }