玩会技能编辑器~~~


public class SkilEditormy : EditorWindow
{
    private static SkillData skill; //技能数据
    static List<string> anims = new List<string>(); //动画名称集合

    private static List<SkillData> list; // 技能列表

    //技能图标
    private static Texture texture;
    //buffer集合
    static  List<BufferData> bufferlist=new List<BufferData>();

    private static List<string> buffernames = new List<string>();
    //打开技能编辑器
    [MenuItem("Tools/SkilEditormy")]
    public static void Init()
    {
        //创建控技能数据
        skill = new SkillData();
        //加载json技能列表
        TextAsset text = Resources.Load<TextAsset>("skill");
        if (text == null) //判空  
        {
            list = new List<SkillData>(); //空则新建
        }
        else
        {
            list = JsonConvert.DeserializeObject<List<SkillData>>(text.text); //不为空 读取
        }

        skill.id = list.Count;

   
        //创建编辑器窗口
        var win = GetWindow<SkilEditormy>();
        //打开窗口
        win.Show();
        //设置默认图片
        texture = Resources.LoadAll<Texture>("icon")[0];

        for (int i = 0; i < bufferlist.Count; i++)
        {
            buffernames.Add(bufferlist[i].nick);
        }
    }


   
    private int bufferid;
    private GameObject effect;
    private GameObject areaeffect;
    private List<string> buffers = new List<string>();
    private List<int> buffids = new List<int>();
    private int buff;
    private Vector2 v2;
    private AnimationClip clip;

    [System.Obsolete]
    private void OnGUI()
    {
        //添加纵向布局
        GUILayout.BeginVertical();
        //显示文字
        GUILayout.Label("技能id:  " + skill.id);
        //添加横向布局
        GUILayout.BeginHorizontal();
        //显示文字
        GUILayout.Label("技能名称");
        skill.nick = GUILayout.TextField(skill.nick, GUILayout.Width(200));
        //结束纵向布局
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("技能描述");
        skill.des = GUILayout.TextField(skill.des, GUILayout.Width(200));
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        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]);
        }

        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("技能CD");

        //添加float输入框
        skill.cd = EditorGUILayout.FloatField(skill.cd, GUILayout.Width(200));
        GUILayout.EndHorizontal();

        //
        GUILayout.BeginHorizontal();
        GUILayout.Label("动作");
        //添加下拉栏
        clip = (AnimationClip)EditorGUILayout.ObjectField(clip, typeof(AnimationClip));
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("前摇"); //或者吟诵
        skill.delay = EditorGUILayout.FloatField(skill.delay, GUILayout.Width(200));
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("发射间隔"); 
        skill.interval = EditorGUILayout.FloatField(skill.interval, GUILayout.Width(200));
        GUILayout.EndHorizontal();
        
        GUILayout.BeginHorizontal();
        GUILayout.Label("施法距离"); 
        skill.distance = EditorGUILayout.FloatField(skill.distance, GUILayout.Width(200));
        GUILayout.EndHorizontal();
        
        GUILayout.BeginHorizontal();
        GUILayout.Label("施法时间"); 
        skill.casttime = EditorGUILayout.FloatField(skill.casttime, GUILayout.Width(200));
        GUILayout.EndHorizontal();
        
        
        GUILayout.BeginHorizontal();
        GUILayout.Label("轨迹"); 
        skill.track = (Track)EditorGUILayout.EnumPopup(skill.track, GUILayout.Width(200));
        GUILayout.EndHorizontal();
      
        GUILayout.BeginHorizontal();
        GUILayout.Label("弹道效果路径"); 
        effect  = (GameObject)EditorGUILayout.ObjectField(effect,typeof(GameObject), GUILayout.Width(200));
        GUILayout.EndHorizontal();
        
        GUILayout.BeginHorizontal();
        GUILayout.Label("攻击范围"); 
        skill.area = EditorGUILayout.FloatField(skill.area, GUILayout.Width(200));
        GUILayout.EndHorizontal();
       
        GUILayout.BeginHorizontal();
        GUILayout.Label("攻击范围形状"); 
        skill.shape = (Shape)EditorGUILayout.EnumPopup(skill.shape, GUILayout.Width(200));
        GUILayout.EndHorizontal();

        
        GUILayout.BeginHorizontal();
        GUILayout.Label("持续时间"); 
        skill.duration = EditorGUILayout.FloatField(skill.duration, GUILayout.Width(200));
        GUILayout.EndHorizontal();
      
        GUILayout.BeginHorizontal();
        GUILayout.Label("范围效果"); 
        areaeffect  = (GameObject)EditorGUILayout.ObjectField(areaeffect,typeof(GameObject), GUILayout.Width(200));
        GUILayout.EndHorizontal();

        v2 = GUILayout.BeginScrollView(v2);
        buff = GUILayout.SelectionGrid(buff, buffers.ToArray(),1);
       GUILayout.EndScrollView();

       GUILayout.BeginHorizontal();
       bufferid = EditorGUILayout.Popup(bufferid, buffernames.ToArray());
       //添加文字按钮
       if (GUILayout.Button("添加buffer",GUILayout.Width(200)))
       {
           buffers.Add(buffernames[bufferid]);
           buffids.Add(bufferlist[bufferid].id);
       }
       GUILayout.EndHorizontal();
       
        //添加文字按钮
        if (GUILayout.Button("保存"))
        {
            string animpath = AssetDatabase.GetAssetPath(clip);
            //赋值动画路径
            skill.animpath = "Anim/" + GetName(animpath);

            string effectapath = AssetDatabase.GetAssetPath(effect);
            //赋值弹道路径
            skill.effectpath = "Anim/" + GetName(effectapath);
            
            string areaeffectpath = AssetDatabase.GetAssetPath(areaeffect);
            //赋值弹道路径
            skill.areaeffectpath = "Anim/" + GetName(areaeffectpath);
            //技能列表写入json
            list.Add(skill);
            string json = JsonConvert.SerializeObject(list);
            File.WriteAllText(Application.dataPath + "/Resources/Skill.json", json);
            AssetDatabase.Refresh();
        }

        GUILayout.EndVertical();
    }

    public string GetName(string path)
    {
        string[] a = path.Split('/');
        string[] b = a[a.Length - 1].Split('.');
        return  b[0]; 
    }
}

技能编译

public enum  Shape
{
      fang,
      yuan
}

public enum Track
{
    直线,
    弧线
}
public class SkillData
{
    //技能id
    public int id;
    //技能名称
    public string nick;
    //技能描述
    public string des;
    //技能图标  (图片路径)
    public string iconpath;
    //技能cd
    public float cd;
    //技能动画
    public string animpath;
    //施法距离  0为近战  1为远程  
    public float distance;
    //施法时间
    public float casttime;
    //技能轨迹
    public Track track;
    //弹道效果   路径
    public string effectpath;
    //攻击范围
    public float area;
    //范围形状
    public  Shape shape;
     //技能前摇  延迟创建时间
     public float delay;
     //持续时间
     public float duration;
    //技能个数
    public int num;
    //攻击人数
    public int objnum;
    //技能间隔 0 时发射
    public float interval;
    //范围效果
    public string areaeffectpath;
    //buff数组
    public string[]  buffer;
    //节能音效
    public string soundpath;

}

技能数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值