技能编辑器主要是用于修改一些游戏模型和一些数据的便利的工具 当然也是修改 测试游戏必不可少的一部分
这些都是在Unity 才能看到的不参与打包所以存放的地方一定要注意 不然打包会报错
要放在Editor文件夹下 如图所示
废话不多 首先是命名空间是必不可少的
using UnityEditor;
没有这个下面的代码都等于白写
接下来是打开窗口路径
代码部分
public class SkillEditor: EditorWindow
{
//打开的路径
[MenuItem("Tools/SkillEdito")]
public static void Init()
{
//是否在运行状态
if(Application.isPlaying)
{
//获取这个并打开
GetWindow<SkillEditor>("我是窗口名字").Show();
}
}
}
每次打开时运行 比如加载一些需要用的数据等等
private void OnEnable()
{
}
一些具体常用的API和用法 和代码例子 注意OnGUI是每帧调用的不参与打包无需过多的考虑性能问题
private void OnGUI()
{
//窗口的文字
GUILayout.Label("技能id :");
//纵向开始
GUILayout.BeginVertical();
//写一些纵向的内容
//xxxx
//纵向结束
GUILayout.EndVertical();
//横向的开始
GUILayout.BeginHorizontal();
//写一些横向的内容
//xxxx
//横向的结束
GUILayout.EndHorizontal();
//输入的string类型
skill.nick = GUILayout.TextField( skill.nick, GUILayout.Width(200));
//输入的Int类型 默认为0
skill.num = EditorGUILayout.IntField("技能个数",skill.num);
//输入的Float类型 默认为0.0
skill.cd = EditorGUILayout.FloatField("技能CD", skill.cd);
//箱子显示头像等 也可以在里面写一些逻辑
GUILayout.Box(texture);
if(GUILayout.Button(texture,GUILayout.Width(50),GUILayout.Height(50)))
{
//打开指定文件夹选择图片 并返回地址
string path = EditorUtility.OpenFilePanel("选择图片", Application.dataPath + "/Resources/icon/", "png");
string[] a=path.Split('/');
string[] b = a[a.Length - 1].Split('.');
texture = Resources.Load<Texture>("icon/" + b[0]);
skill.iconpath = "icon/" + b[0];
}
//万能的ObjectField 可以放材质 音频 动画 预制体等等
texture=EditorGUILayout.ObjectField(texture,typeof(Texture),true) as Texture;
animationclip = (AnimationClip)EditorGUILayout.ObjectField("动作", animationclip, typeof(AnimationClip),true);
audioClip = (AudioClip)EditorGUILayout.ObjectField("技能音效", audioClip, typeof(AudioClip), true);
areaeeffect = (GameObject)EditorGUILayout.ObjectField("范围效果", areaeeffect, typeof(GameObject),true);
//下拉列表(存放字符串)和(Enum枚举类型)
skill.track = EditorGUILayout.Popup("轨迹", skill.track);
skill.track = (Track)EditorGUILayout.EnumPopup("轨迹", skill.track);
//ScrollView用法和 按钮点击 轻松易上手 大部分都懂没啥可说的
v2 =GUILayout.BeginScrollView(v2);
buff = GUILayout.SelectionGrid(buff, buffs.ToArray(),1);
GUILayout.EndScrollView();
GUILayout.BeginHorizontal();
buffdata.type = (BuffType)EditorGUILayout.EnumPopup(buffdata.type);
if(GUILayout.Button("添加buff"))
{
buffs.Add(buffdata.type.ToString());
buffids.Add(buffs.Count);
}
if(GUILayout.Button("移除buff"))
{
buffs.Remove(buffdata.type.ToString());
buffids.Add(buffs.Count);
}
GUILayout.EndHorizontal();
}
For Example