Unity TextField实现复制粘贴功能
发表于2018-08-21
很多人吐槽说unity的编辑器文本输入框GUILayout.TextField不能快捷键复制粘贴,实际上并非如此,主要是大家还没掌握到技巧,下面就和大家分享下使用TextField实现复制粘贴功能。
代码如下:
public static string HandleCopyPaste(int controlID) { if (controlID == GUIUtility.keyboardControl) { if (Event.current.type == UnityEngine.EventType.KeyUp && (Event.current.modifiers == EventModifiers.Control || Event.current.modifiers == EventModifiers.Command)) { if (Event.current.keyCode == KeyCode.C) { Event.current.Use(); TextEditor editor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); editor.Copy(); } else if (Event.current.keyCode == KeyCode.V) { Event.current.Use(); TextEditor editor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); editor.Paste(); #if UNITY_5_3_OR_NEWER || UNITY_5_3 return editor.text; //以及更高的unity版本中editor.content.text已经被废弃,需使用editor.text代替 #else return editor.content.text; #endif } else if (Event.current.keyCode == KeyCode.A) { Event.current.Use(); TextEditor editor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); editor.SelectAll(); } } } return null; } /// <summary> /// TextField复制粘贴的实现 /// </summary> public static string TextField(string value, params GUILayoutOption[] options) { int textFieldID = GUIUtility.GetControlID("TextField".GetHashCode(), FocusType.Keyboard) + 1; if (textFieldID == 0) return value; //处理复制粘贴的操作 value = HandleCopyPaste(textFieldID) ?? value; return GUILayout.TextField(value, options); }
使用上面的TextField,就可以选中想要复制的文本按Ctrl+C,Ctrl+V 进行复制粘贴了。