最近做项目的时候需要经常用计算器来算一些东西,电脑切屏感觉比较麻烦,然后自己在Unity里面自己写一个比较简单的计算器(编辑器拓展),逻辑代码也比较粗犷,如果需要的人建议好好把代码逻辑进行重构一下,因为本人觉得目前这个版本的代码比较潦草(不优雅)。
using UnityEditor;
using UnityEngine;
public enum SymbolType {
None = 0,
Plus = 1,
Subtract = 2,
Ride = 3,
Divide = 4,
}
public class CalculatorTools : EditorWindow {
#region [MenuItem]
private static CalculatorTools mTools = null;
[MenuItem("Tools/ Calculator ")]
static void MenuFunction()
{
Rect rect = new Rect(0, 400, 300, 220);
mTools = GetWindowWithRect<CalculatorTools>(rect);
mTools.Show();
mTools.titleContent = new GUIContent("Calculator Tools");
}
#endregion
private string mInputNumder = string.Empty;
private SymbolType mSymbolType = SymbolType.None;
string value;
void OnGUI()
{
EditorGUILayout.BeginVertical();
{
EditorGUILayout.TextField(mInputNumder, GUILayout.Height(50));
EditorGUILayout.BeginHorizontal();
{
if (GUILayout.Button("*", GUILayout.Height(30)))
{
value = mInputNumder;
mInputNumder = string.Empty;
mSymbolType = SymbolType.Ride;
}
if (GUILayout.Button("/", GUILayout.Height(30)))
{
value = mInputNumder;
mInputNumder = string.Empty;
mSymbolType = SymbolType.Divide;
}
if (GUILayout.Button(".", GUILayout.Height(30)))
{
mInputNumder += ".";
}
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.BeginVertical();
{
EditorGUILayout.BeginHorizontal();
{
if (GUILayout.Button("1", GUILayout.Height(30)))
{
mInputNumder += 1;
}
if (GUILayout.Button("2", GUILayout.Height(30)))
{
mInputNumder += 2;
}
if (GUILayout.Button("3", GUILayout.Height(30)))
{
mInputNumder += 3;
}
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
if (GUILayout.Button("4", GUILayout.Height(30)))
{
mInputNumder += 4;
}
if (GUILayout.Button("5", GUILayout.Height(30)))
{
mInputNumder += 5;
}
if (GUILayout.Button("6", GUILayout.Height(30)))
{
mInputNumder += 6;
}
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
if (GUILayout.Button("7", GUILayout.Height(30)))
{
mInputNumder += 7;
}
if (GUILayout.Button("8", GUILayout.Height(30)))
{
mInputNumder += 8;
}
if (GUILayout.Button("9", GUILayout.Height(30)))
{
mInputNumder += 9;
}
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
if (GUILayout.Button("0", GUILayout.Height(30)))
{
mInputNumder += 0;
}
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndVertical();
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.BeginVertical();
{
if (GUILayout.Button("+", GUILayout.Height(30)))
{
value = mInputNumder;
mInputNumder = string.Empty;
mSymbolType = SymbolType.Plus;
}
if (GUILayout.Button("-", GUILayout.Height(30)))
{
if (mInputNumder == string.Empty)
{
mInputNumder = "-";
}
else
{
value = mInputNumder;
mInputNumder = string.Empty;
mSymbolType = SymbolType.Subtract;
}
}
if (GUILayout.Button("=", GUILayout.Height(30)))
{
switch (mSymbolType)
{
case SymbolType.None:
mInputNumder = string.Empty;
break;
case SymbolType.Plus:
mInputNumder = (float.Parse(value) + float.Parse(mInputNumder)).ToString();
break;
case SymbolType.Subtract:
mInputNumder = (float.Parse(value) - float.Parse(mInputNumder)).ToString();
break;
case SymbolType.Ride:
mInputNumder = (float.Parse(value) * float.Parse(mInputNumder)).ToString();
break;
case SymbolType.Divide:
mInputNumder = (float.Parse(value) / float.Parse(mInputNumder)).ToString();
break;
}
}
if (GUILayout.Button("Eliminate", GUILayout.Height(30)))
{
mInputNumder = string.Empty;
}
}
EditorGUILayout.EndVertical();
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndVertical();
}
}
效果