using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using Newtonsoft.Json;
using System.IO;
using System;
public class Windows : EditorWindow
{
static AnimatorOverrideController animator;
[MenuItem("Tool/Skill #Q")]
public static void Open()
{
GetWindow<Windows>().Show(false);
}
GameObject player;
string table_name;
int skill_id;
string skill_name;
string skill_des;
AnimationClip clip;
AudioClip audio;
ParticleSystem particle;
GameObject tx;
GameObject tx_game;
List<string> att_list = new List<string>() { null, Att.单体.ToString(), Att.小范围AOE.ToString(), Att.群体.ToString() };
List<string> job_list = new List<string>() { null, Job.打野.ToString(), Job.坦克.ToString(), Job.射手.ToString(), Job.战士.ToString(), Job.法师.ToString(), Job.辅助.ToString() };
int job_index = 0;
int att_index = 0;
float scope;
float cd;
float front;
List<string> track_list = new List<string>() {null,Track.抛物线.ToString(), Track.曲线.ToString(), Track.直线.ToString() };
List<Track> tracks = new List<Track>() {Track.直线,Track.抛物线,Track.曲线 };
int track_index;
int track_index2;
Texture texture;
[Obsolete]
private void OnGUI()
{
GUILayout.BeginVertical();
GUILayout.BeginHorizontal();
GUILayout.Label("请输入配置表名称:");
table_name = GUILayout.TextField(table_name);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请输入技能ID:");
skill_id = EditorGUILayout.IntField(skill_id);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请输入技能名称:");
skill_name = GUILayout.TextField(skill_name);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请输入技能描述:");
skill_des = GUILayout.TextField(skill_des);
GUILayout.EndHorizontal();
texture = Resources.Load<Texture>("KatarinaLoadScreen");
if (GUILayout.Button(texture,GUILayout.Width(50),GUILayout.Height(50)))
{
Debug.Log(texture.name);
}
GUILayout.BeginHorizontal();
GUILayout.Label("请设置技能CD:");
cd =EditorGUILayout.FloatField(cd);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请设置技能前摇:");
front = EditorGUILayout.FloatField(front);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请设置技能轨迹:");
track_index = EditorGUILayout.Popup(track_index, track_list.ToArray()) ;
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请选择技能动画:");
clip = (AnimationClip)EditorGUILayout.ObjectField(clip, typeof(AnimationClip));
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请选择技能音效:");
audio = (AudioClip)EditorGUILayout.ObjectField(audio, typeof(AudioClip));
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请选择技能特效:");
tx = (GameObject)EditorGUILayout.ObjectField(tx, typeof(GameObject));
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请选择角色职业:");
job_index = EditorGUILayout.Popup(job_index, job_list.ToArray());
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请选择角色攻击类型:");
att_index = EditorGUILayout.Popup(att_index, att_list.ToArray());
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("请设置攻击范围:");
scope = EditorGUILayout.FloatField(scope);
GUILayout.EndHorizontal();
if (GUILayout.Button("保存"))
{
SkillData data = new SkillData();
data.id = skill_id;
data.name = skill_name;
data.des = skill_des;
data.animationClip = "/Resources/阿卡丽/" + clip.name;
data.audioClip = audio.name;
data.job = job_list[job_index];
data.att = att_list[att_index];
data.scope = scope;
string info = JsonConvert.SerializeObject(data);
File.WriteAllText("Assets/SkillConfigurationTable/" + table_name + ".json", info);
AssetDatabase.Refresh();
}
if (GUILayout.Button("播放"))
{
player = GameObject.Find("taunt");
animator = new AnimatorOverrideController(player.GetComponent<Animator>().runtimeAnimatorController);
player.GetComponent<Animator>().runtimeAnimatorController = animator;
animator["run"] = clip;
player.GetComponent<Animator>().Play("run");
AudioSource source = player.GetComponent<AudioSource>();
source.clip = audio;
source.Play(0);
if (tx_game == null)
{
tx_game = Instantiate(AssetDatabase.LoadAssetAtPath<GameObject>(AssetDatabase.GetAssetPath(tx)));
tx_game.transform.position = player.transform.position+Vector3.up*0.5f+Vector3.forward*-1f;
tx_game.transform.eulerAngles = player.transform.eulerAngles;
}
else
{
particle = tx_game.GetComponent<ParticleSystem>();
particle.Play(true);
}
}
GUILayout.EndVertical();
}
}
代码如下,效果如下
OnGUI的一些常用API(不完整),具体可以看一下ObjectField怎么去设置类型
还有一点就是播放逻辑