public void Update() { bool focoused = Input.isFocused; string typed = Input.text.Trim(); bool isCmd = typed.StartsWith("/"); if (InputManager.IsDown("Complete Command", true)) { if (isCmd && Suggestions.Matches.Count > 0) { string complete = this.Suggestions.Matches[autoIndex++].Name; if (typed.Length - 1 < complete.Length) { Input.text = '/' + complete; Input.caretPosition = Input.text.Length; } } } if (InputManager.IsDown("Enter Command", true)) { if (isCmd) { // Execute here... string error; bool clear = Commands.TryExecute(Input.text.Trim(), out error); if (clear) { // Assume this means it executed successfuly. Commands.AddCommandAsExectued(Input.text); Input.text = ""; Suggestions.Text.text = ""; autoIndex = 0; } if (!string.IsNullOrWhiteSpace(error)) { Output.Log(RichText.InColour(error.Trim(), Color.red)); } } // Give focous back to the input field. Slightly hackish, very effective. EventSystem.current.SetSelectedGameObject(Input.gameObject, null); Input.ActivateInputField(); } }