Files
Main/Assets/Editor/DIY/SkillEditor/SkillEventEditor.cs
2025-01-25 04:38:09 +08:00

891 lines
44 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Thousandto.Code.Logic;
using Thousandto.Core.PostEffect;
using Thousandto.SkillEditor;
using Thousandto.SkillEditor.Support;
using System;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Thousandto.SkillEditor.DIY
{
class SkillEventEditor : EditorWindow
{
public static SkillBaseEventInfo EventInfo = null;
public static int SelectFrame = 0;
public static bool IsOpen = false;
public static void Open(SkillBaseEventInfo info)
{
var win = (SkillEventEditor)EditorWindow.GetWindow(typeof(SkillEventEditor), true);
win.Show();
var size = GetWindowSize(info.EventType);
win.minSize = size;
win.maxSize = size;
SelectFrame = info.EventFrame;
EventInfo = info;
IsOpen = true;
win.RefreshResList();
}
private static Vector2 GetWindowSize(SkillEventDefine type)
{
switch (type)
{
case SkillEventDefine.PlayLockTrajectory:
case SkillEventDefine.PlaySimpleSkillObject:
case SkillEventDefine.PlayLinkDamage:
return new Vector2(512, 569);
case SkillEventDefine.PlayHit:
return new Vector2(512, 500);
}
return new Vector2(512, 256);
}
public static void Hide()
{
if (!IsOpen)
return;
var win = (SkillEventEditor)EditorWindow.GetWindow(typeof(SkillEventEditor));
win.Close();
}
public string[] CameraShakeNames = new string[]
{
"上下",
"水平",
"随机",
"冲压",
};
public string[] CameraBlurNames = new string[]
{
"辐射状模糊",
"高斯模糊",
};
public string[] SkillAreaNames = new string[]
{
"矩形",
"扇形",
"圆形",
};
public string[] PosTypeNames = new string[]
{
"自身位置",
"目标位置"
};
public string[] SkillObjMoveNames = new string[]
{
"不移动",
"固定方向",
"追踪移动"
};
public string[] SelfMoveTypeNames = new string[]
{
"目标面前",
"目标背后",
"固定距离",
"后退"
};
public string[] LinkDamageType = new string[]
{
"串联",
"并联",
};
public string[] LinkStartPosType = new string[]
{
"使用者",
"目标",
};
public int SelectEvent = 0;
private int _slotSelectIndex = 0;
private int _slotSelectIndex2 = 0;
private int _slotSelectIndex3 = 0;
private string[] _slotArray = null;
private float _resetHeight = 0f;
void RefreshResList()
{
_slotSelectIndex = 0;
_slotArray = SkillResPathEditor.Slots.ToArray();
if (EventInfo != null)
{
switch (EventInfo.EventType)
{
case SkillEventDefine.PlayVfx:
{
var realData = EventInfo as PlayVfxEventInfo;
for (int i = 0; i < _slotArray.Length; ++i)
{
if (_slotArray[i] == realData.SlotName)
{
_slotSelectIndex = i;
}
}
}
break;
case SkillEventDefine.PlayLockTrajectory:
{
var realData = EventInfo as PlayLockTrajectoryEventInfo;
for (int i = 0; i < _slotArray.Length; ++i)
{
if (_slotArray[i] == realData.HitInfo.HitSlot)
{
_slotSelectIndex = i;
}
if (_slotArray[i] == realData.StartSlot)
{
_slotSelectIndex2 = i;
}
}
}
break;
case SkillEventDefine.PlayHit:
{
var realData = EventInfo as PlayHitEventInfo;
for (int i = 0; i < _slotArray.Length; ++i)
{
if (_slotArray[i] == realData.HitInfo.HitSlot)
{
_slotSelectIndex = i;
}
}
}
break;
case SkillEventDefine.PlaySimpleSkillObject:
{
var realData = EventInfo as PlaySimpleSkillObjectEventInfo;
for (int i = 0; i < _slotArray.Length; ++i)
{
if (_slotArray[i] == realData.HitInfo.HitSlot)
{
_slotSelectIndex = i;
}
}
}
break;
case SkillEventDefine.PlayLinkDamage:
{
var realData = EventInfo as PlayLinkDamageEventInfo;
for (int i = 0; i < _slotArray.Length; ++i)
{
if (_slotArray[i] == realData.HitInfo.HitSlot)
{
_slotSelectIndex = i;
}
if (_slotArray[i] == realData.UserSlot)
{
_slotSelectIndex2 = i;
}
if (_slotArray[i] == realData.TargetSlot)
{
_slotSelectIndex3 = i;
}
}
}
break;
}
}
}
// GUI
void OnGUI()
{
//编辑事件点
OnEventGUI(EventInfo);
}
void OnEventGUI(SkillBaseEventInfo data)
{
EditorGUILayout.BeginHorizontal();
data.IsEnable = EditorGUILayout.Toggle(data.IsEnable, GUILayout.Width(20));
GUI.color = Color.green;
GUILayout.Label(data.ShowName, GUILayout.Width(100));
GUI.color = Color.white;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("当前帧", GUILayout.Width(50));
GUILayout.Label(data.EventFrame.ToString(), GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
switch (data.EventType)
{
#region//PlayAnimation
case SkillEventDefine.PlayAnimation:
{
var realData = data as PlayAnimEventInfo;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("动作名字", GUILayout.Width(80));
realData.AnimName = EditorGUILayout.TextField(realData.AnimName, GUILayout.Width(100));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("是否循环", GUILayout.Width(60));
realData.Loop = EditorGUILayout.Toggle(realData.Loop != 0) ? 1 : 0;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("播放速度", GUILayout.Width(60));
realData.Speed = EditorGUILayout.FloatField(realData.Speed, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("开始时间0-1", GUILayout.Width(90));
realData.NormalizedTime = EditorGUILayout.Slider(realData.NormalizedTime, 0f, 1f, GUILayout.Width(150));
EditorGUILayout.EndHorizontal();
}
break;
#endregion
#region//PlayVfx
case SkillEventDefine.PlayVfx:
{
var realData = data as PlayVfxEventInfo;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特效ID", GUILayout.Width(50));
realData.VfxID = EditorGUILayout.IntField(realData.VfxID, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("插槽", GUILayout.Width(50));
var newSlotIndex = EditorGUILayout.Popup(_slotSelectIndex, _slotArray, GUILayout.Width(200));
if (newSlotIndex != _slotSelectIndex || string.IsNullOrEmpty(realData.SlotName))
{
_slotSelectIndex = newSlotIndex;
realData.SlotName = _slotArray[_slotSelectIndex];
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("缩放", GUILayout.Width(50));
realData.Scale = EditorGUILayout.FloatField(realData.Scale, GUILayout.Width(200));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("同步位置", GUILayout.Width(60));
realData.SyncPos = EditorGUILayout.Toggle(realData.SyncPos != 0, GUILayout.Width(40)) ? 1 : 0;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("同步旋转", GUILayout.Width(60));
realData.SyncRot = EditorGUILayout.Toggle(realData.SyncRot != 0, GUILayout.Width(40)) ? 1 : 0;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("同步缩放", GUILayout.Width(60));
realData.SyncScale = EditorGUILayout.Toggle(realData.SyncScale != 0, GUILayout.Width(40)) ? 1 : 0;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("同步帧数帧数", GUILayout.Width(60));
realData.SyncFrameCount = EditorGUILayout.IntField(realData.SyncFrameCount, GUILayout.Width(40));
EditorGUILayout.EndHorizontal();
}
break;
#endregion
#region//PlaySfx
case SkillEventDefine.PlaySfx:
{
var realData = data as PlaySfxEventInfo;
EditorGUILayout.BeginVertical();
GUILayout.Label("音效名字", GUILayout.Width(50));
realData.Sound = EditorGUILayout.TextField(realData.Sound, GUILayout.Width(200));
GUILayout.Label("Pitch", GUILayout.Width(50));
realData.Pitch = EditorGUILayout.FloatField(realData.Pitch, GUILayout.Width(200));
GUILayout.Label("音量", GUILayout.Width(50));
realData.Volume = EditorGUILayout.Slider(realData.Volume, 0f, 1f, GUILayout.Width(150));
EditorGUILayout.EndVertical();
}
break;
#endregion
#region//PlayCameraShake
case SkillEventDefine.PlayCameraShake:
{
var realData = data as PlayCameraShakeEventInfo;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("震动类型", GUILayout.Width(50));
realData.CurveType = (VFXCameraShakerType)EditorGUILayout.Popup((int)realData.CurveType, CameraShakeNames, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("震动力度", GUILayout.Width(50));
realData.CurvePower = EditorGUILayout.FloatField(realData.CurvePower, GUILayout.Width(100));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("震动时间", GUILayout.Width(50));
realData.CurveTotalTime = EditorGUILayout.FloatField(realData.CurveTotalTime, GUILayout.Width(100));
EditorGUILayout.EndHorizontal();
GUILayout.Label("震动曲线", GUILayout.Width(50));
EditorGUILayout.BeginHorizontal();
realData.Curve = EditorGUILayout.CurveField(realData.Curve, GUILayout.Width(80), GUILayout.Height(40));
if (GUILayout.Button("重置曲线", GUILayout.Width(80), GUILayout.Height(40)))
{
realData.ResetCurve();
}
EditorGUILayout.EndHorizontal();
}
break;
#endregion
#region//PlayBlur
case SkillEventDefine.PlayBlur:
{
var realData = data as PlayBlurEventInfo;
EditorGUILayout.BeginVertical();
realData.BlurType = EditorGUILayout.Popup(realData.BlurType, CameraBlurNames, GUILayout.Width(100));
switch (realData.BlurType)
{
case 0:
GUILayout.Label("开始值", GUILayout.Width(100));
realData.Start = EditorGUILayout.FloatField(realData.Start, GUILayout.Width(100));
GUILayout.Label("结束值", GUILayout.Width(100));
realData.End = EditorGUILayout.FloatField(realData.End, GUILayout.Width(100));
GUILayout.Label("持续时间", GUILayout.Width(50));
realData.Time = EditorGUILayout.FloatField(realData.Time, GUILayout.Width(100));
break;
case 1:
GUILayout.Label("模糊大小", GUILayout.Width(100));
realData.GrassBlurSize = EditorGUILayout.FloatField(realData.GrassBlurSize, GUILayout.Width(100));
GUILayout.Label("持续时间", GUILayout.Width(100));
realData.Time = EditorGUILayout.FloatField(realData.Time, GUILayout.Width(100));
break;
}
EditorGUILayout.EndVertical();
}
break;
#endregion
#region//PlaySlow
case SkillEventDefine.PlaySlow:
{
var realData = data as PlaySlowEventInfo;
EditorGUILayout.BeginVertical();
GUILayout.Label("时间缩放", GUILayout.Width(50));
realData.TimeScale = EditorGUILayout.Slider(realData.TimeScale, 0.1f, 1f, GUILayout.Width(150));
GUILayout.Label("持续时间", GUILayout.Width(50));
realData.Time = EditorGUILayout.FloatField(realData.Time, GUILayout.Width(50));
EditorGUILayout.EndVertical();
}
break;
#endregion
#region//DisableMove
case SkillEventDefine.DisableMove:
{
var realData = data as DisableMoveEventInfo;
EditorGUILayout.BeginVertical();
GUILayout.Label("禁止帧数为0表示禁止到技能结束", GUILayout.Width(200));
realData.DisableFrameCount = EditorGUILayout.IntField(realData.DisableFrameCount, GUILayout.Width(50));
EditorGUILayout.EndVertical();
}
break;
#endregion
#region//DisableChangeDir
case SkillEventDefine.DisableChangeDir:
{
var realData = data as DisableChangeDirEventInfo;
EditorGUILayout.BeginVertical();
GUILayout.Label("禁止帧数为0表示禁止到技能结束", GUILayout.Width(200));
realData.DisableFrameCount = EditorGUILayout.IntField(realData.DisableFrameCount, GUILayout.Width(50));
EditorGUILayout.EndVertical();
}
break;
#endregion
#region//PlayLockTrajectory
case SkillEventDefine.PlayLockTrajectory:
{
var realData = data as PlayLockTrajectoryEventInfo;
EditorGUILayout.BeginVertical();
OnFindTargetInfoGUI(realData.FindInfo);
EditorGUILayout.EndVertical();
GUILayout.Space(10);
OnHitEffectGUI(realData.HitInfo);
GUILayout.Space(10);
GUI.color = Color.green;
GUILayout.Label("飞行特效配置", GUILayout.Width(100));
GUI.color = Color.white;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特效开始位置插槽", GUILayout.Width(100));
var newSlotIndex = EditorGUILayout.Popup(_slotSelectIndex2, _slotArray, GUILayout.Width(200));
if (newSlotIndex != _slotSelectIndex2 || string.IsNullOrEmpty(realData.StartSlot))
{
_slotSelectIndex2 = newSlotIndex;
realData.StartSlot = _slotArray[_slotSelectIndex2];
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特效ID", GUILayout.Width(150));
realData.VfxID = EditorGUILayout.IntField(realData.VfxID, GUILayout.Width(50));
GUILayout.Label("特效半径", GUILayout.Width(150));
realData.VfxRadius = EditorGUILayout.FloatField(realData.VfxRadius, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特效飞行起始速度", GUILayout.Width(100));
realData.FlySpeed = EditorGUILayout.FloatField(realData.FlySpeed, GUILayout.Width(50));
GUILayout.Label("特效飞行加速度", GUILayout.Width(100));
realData.FlyAddSpeed = EditorGUILayout.FloatField(realData.FlyAddSpeed, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
realData.CanHitRepeatTarget = GUILayout.Toggle(realData.CanHitRepeatTarget != 0, "是否可以命中重复目标", GUILayout.Width(200)) ? 1 : 0;
}
break;
#endregion
#region//PlaySimpleSkillObject
case SkillEventDefine.PlaySimpleSkillObject:
{
var realData = data as PlaySimpleSkillObjectEventInfo;
EditorGUILayout.BeginVertical();
OnFindTargetInfoGUI(realData.FindInfo);
EditorGUILayout.EndVertical();
GUILayout.Space(10);
OnHitEffectGUI(realData.HitInfo);
GUILayout.Space(10);
GUI.color = Color.green;
GUILayout.Label("召唤物配置", GUILayout.Width(100));
GUI.color = Color.white;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("出现位置", GUILayout.Width(80));
realData.PosType = EditorGUILayout.Popup(realData.PosType, PosTypeNames, GUILayout.Width(80));
if (realData.PosType != 0)
{
GUILayout.Label("离主角最大距离", GUILayout.Width(80));
realData.MaxDis = EditorGUILayout.FloatField(realData.MaxDis, GUILayout.Width(80));
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特效ID", GUILayout.Width(80));
realData.VfxID = EditorGUILayout.IntField(realData.VfxID, GUILayout.Width(50));
GUILayout.Label("生存帧数", GUILayout.Width(80));
realData.LifeFrame = EditorGUILayout.IntField(realData.LifeFrame, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("开始伤害帧数", GUILayout.Width(80));
realData.StartHitFrame = EditorGUILayout.IntField(realData.StartHitFrame, GUILayout.Width(50));
GUILayout.Label("产生伤害次数", GUILayout.Width(80));
realData.HitCount = EditorGUILayout.IntField(realData.HitCount, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("伤害间隔帧数", GUILayout.Width(80));
realData.HitInterval = EditorGUILayout.IntField(realData.HitInterval, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
}
break;
#endregion
#region//PlaySkillObject
case SkillEventDefine.PlaySkillObject:
{
var realData = data as PlaySkillObjectEventInfo;
GUILayout.Label("召唤对象配置名", GUILayout.Width(200));
realData.SkillName = EditorGUILayout.TextField(realData.SkillName, GUILayout.Width(200));
EditorGUILayout.BeginHorizontal();
GUILayout.Label("出现位置", GUILayout.Width(80));
realData.PosType = EditorGUILayout.Popup(realData.PosType, PosTypeNames, GUILayout.Width(80));
if (realData.PosType != 0)
{
GUILayout.Label("离主角最大距离", GUILayout.Width(80));
realData.MaxDis = EditorGUILayout.FloatField(realData.MaxDis, GUILayout.Width(80));
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("移动方式", GUILayout.Width(80));
realData.MoveType = (SkillObjMoveType)EditorGUILayout.Popup((int)realData.MoveType, SkillObjMoveNames, GUILayout.Width(100));
EditorGUILayout.EndHorizontal();
if (realData.MoveType == SkillObjMoveType.FixDirMove || realData.MoveType == SkillObjMoveType.LockMove)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("移动速度", GUILayout.Width(80));
realData.MoveSpeed = EditorGUILayout.FloatField(realData.MoveSpeed, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("移动加速度", GUILayout.Width(80));
realData.MoveAddSpeed = EditorGUILayout.FloatField(realData.MoveAddSpeed, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
}
if (realData.MoveType == SkillObjMoveType.FixDirMove)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("偏移角度", GUILayout.Width(80));
realData.FixDirOffsetAngle = EditorGUILayout.FloatField(realData.FixDirOffsetAngle, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
}
}
break;
#endregion
#region//PlayHit
case SkillEventDefine.PlayHit:
{
var realData = data as PlayHitEventInfo;
EditorGUILayout.BeginVertical();
OnFindTargetInfoGUI(realData.FindInfo);
EditorGUILayout.EndVertical();
GUILayout.Space(10);
OnHitEffectGUI(realData.HitInfo);
GUILayout.Space(10);
}
break;
#endregion
#region//PlaySelfMove
case SkillEventDefine.PlaySelfMove:
{
var realData = data as PlaySelfMoveEventInfo;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("移动类型", GUILayout.Width(80));
realData.MoveType = (SelfMoveType)EditorGUILayout.Popup((int)realData.MoveType, SelfMoveTypeNames, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("最大移动距离", GUILayout.Width(80));
realData.MaxDis = EditorGUILayout.FloatField(realData.MaxDis, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("移动时间", GUILayout.Width(80));
realData.MoveTime = EditorGUILayout.FloatField(realData.MoveTime, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("无目标时移动距离", GUILayout.Width(80));
realData.NoTargetDis = EditorGUILayout.FloatField(realData.NoTargetDis, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("移动曲线", GUILayout.Width(80), GUILayout.Height(30));
realData.MoveCurve = EditorGUILayout.CurveField(realData.MoveCurve, GUILayout.Width(80), GUILayout.Height(30));
if (GUILayout.Button("重置", GUILayout.Width(50), GUILayout.Height(30)))
{
realData.ResetMoveCurve();
}
EditorGUILayout.EndHorizontal();
}
break;
#endregion
#region//PlayHideWeapon
case SkillEventDefine.PlayHideWeapon:
{
var realData = data as PlayHideWeaponEventInfo;
EditorGUILayout.BeginVertical();
GUILayout.Label("隐藏帧数为0表示隐藏到技能结束", GUILayout.Width(200));
realData.HideFrame = EditorGUILayout.IntField(realData.HideFrame, GUILayout.Width(50));
EditorGUILayout.EndVertical();
}
break;
#endregion
#region//PlayLinkDamage
case SkillEventDefine.PlayLinkDamage:
{
var realData = data as PlayLinkDamageEventInfo;
EditorGUILayout.BeginVertical();
OnFindTargetInfoGUI(realData.FindInfo);
GUILayout.Space(10);
OnHitEffectGUI(realData.HitInfo);
GUILayout.Space(10);
GUI.color = Color.green;
GUILayout.Label("链接效果配置", GUILayout.Width(100));
GUI.color = Color.white;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("生存帧数", GUILayout.Width(80));
realData.LifeFrameCount = EditorGUILayout.IntField(realData.LifeFrameCount, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("开始伤害帧数", GUILayout.Width(80));
realData.StartHitFrame = EditorGUILayout.IntField(realData.StartHitFrame, GUILayout.Width(50));
GUILayout.Label("产生伤害次数", GUILayout.Width(80));
realData.HitCount = EditorGUILayout.IntField(realData.HitCount, GUILayout.Width(50));
GUILayout.Label("伤害间隔帧数", GUILayout.Width(80));
realData.HitInterval = EditorGUILayout.IntField(realData.HitInterval, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("开始位置", GUILayout.Width(50));
realData.StartPosType = EditorGUILayout.Popup(realData.StartPosType, LinkStartPosType, GUILayout.Width(100));
GUILayout.Label("链接类型", GUILayout.Width(50));
realData.LinkType = EditorGUILayout.Popup(realData.LinkType, LinkDamageType, GUILayout.Width(100));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("主特效ID", GUILayout.Width(60));
realData.VfxID = EditorGUILayout.IntField(realData.VfxID, GUILayout.Width(50));
GUILayout.Label("开始点特效", GUILayout.Width(60));
realData.StartVfxID = EditorGUILayout.IntField(realData.StartVfxID, GUILayout.Width(50));
GUILayout.Label("目标点特效", GUILayout.Width(60));
realData.TargetVfxID = EditorGUILayout.IntField(realData.TargetVfxID, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特效开始插槽", GUILayout.Width(80));
var newSlotIndex = EditorGUILayout.Popup(_slotSelectIndex2, _slotArray, GUILayout.Width(100));
if (newSlotIndex != _slotSelectIndex2 || string.IsNullOrEmpty(realData.UserSlot))
{
_slotSelectIndex2 = newSlotIndex;
realData.UserSlot = _slotArray[_slotSelectIndex2];
}
GUILayout.Label("特效目标插槽", GUILayout.Width(80));
newSlotIndex = EditorGUILayout.Popup(_slotSelectIndex3, _slotArray, GUILayout.Width(100));
if (newSlotIndex != _slotSelectIndex3 || string.IsNullOrEmpty(realData.TargetSlot))
{
_slotSelectIndex3 = newSlotIndex;
realData.TargetSlot = _slotArray[_slotSelectIndex3];
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
}
break;
#endregion
}
}
private void OnFindTargetInfoGUI(FindTargetInfo realData)
{
GUI.color = Color.green;
GUILayout.Label("查找目标数据");
GUI.color = Color.white;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("技能范围", GUILayout.Width(50));
realData.AreaType = (SkillTargetArea)EditorGUILayout.Popup((int)realData.AreaType, SkillAreaNames, GUILayout.Width(50));
switch (realData.AreaType)
{
case SkillTargetArea.Rectangle:
{
GUILayout.Label("矩形宽", GUILayout.Width(40));
realData.RectWidth = EditorGUILayout.FloatField(realData.RectWidth, GUILayout.Width(50));
GUILayout.Label("矩形高", GUILayout.Width(40));
realData.RectHeight = EditorGUILayout.FloatField(realData.RectHeight, GUILayout.Width(50));
}
break;
case SkillTargetArea.FanShaped:
{
GUILayout.Label("扇形角度", GUILayout.Width(50));
realData.SectorAngle = EditorGUILayout.FloatField(realData.SectorAngle, GUILayout.Width(50));
GUILayout.Label("扇形半径", GUILayout.Width(50));
realData.SectorRadius = EditorGUILayout.FloatField(realData.SectorRadius, GUILayout.Width(50));
}
break;
case SkillTargetArea.Round:
{
GUILayout.Label("圆形半径", GUILayout.Width(50));
realData.RoundRadius = EditorGUILayout.FloatField(realData.RoundRadius, GUILayout.Width(50));
}
break;
}
GUILayout.Label("开始距离", GUILayout.Width(50));
realData.StartDis = EditorGUILayout.FloatField(realData.StartDis, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("最大可攻击目标数量", GUILayout.Width(110));
realData.MaxTargetCount = EditorGUILayout.IntField(realData.MaxTargetCount, GUILayout.Width(50));
realData.ShowWarningField = GUILayout.Toggle(realData.ShowWarningField, "是否显示警示圈", GUILayout.Width(100));
EditorGUILayout.EndHorizontal();
}
private void OnHitEffectGUI(HitEffectInfo realData)
{
GUI.color = Color.green;
GUILayout.Label("受击效果数据");
GUI.color = Color.white;
EditorGUILayout.BeginHorizontal();
GUILayout.Label("时间变化曲线", GUILayout.Width(80), GUILayout.Height(30));
realData.HitTimeCurve = EditorGUILayout.CurveField(realData.HitTimeCurve, GUILayout.Width(80), GUILayout.Height(30));
if (GUILayout.Button("重置", GUILayout.Width(50), GUILayout.Height(30)))
{
realData.ResetHitTimeCurve();
}
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
GUILayout.Label("受击特效", GUILayout.Width(50));
realData.HitVfx = EditorGUILayout.IntField(realData.HitVfx, GUILayout.Width(40));
GUILayout.Label("受击特效插槽", GUILayout.Width(70));
var newSlotIndex = EditorGUILayout.Popup(_slotSelectIndex, _slotArray, GUILayout.Width(100));
if (newSlotIndex != _slotSelectIndex || string.IsNullOrEmpty(realData.HitSlot))
{
_slotSelectIndex = newSlotIndex;
realData.HitSlot = _slotArray[_slotSelectIndex];
}
GUILayout.Label("特效缩放", GUILayout.Width(50));
realData.HitVfxScale = EditorGUILayout.FloatField(realData.HitVfxScale, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("受击动作", GUILayout.Width(50));
realData.HitAnim = EditorGUILayout.TextField(realData.HitAnim, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("特殊参数", GUILayout.Width(50));
realData.Params = EditorGUILayout.TextField(realData.Params, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
GUILayout.Label("闪烁时间", GUILayout.Width(50));
realData.BlinkTime = EditorGUILayout.FloatField(realData.BlinkTime, GUILayout.Width(50));
GUILayout.Label("闪烁强度", GUILayout.Width(50));
realData.BlinkPower = EditorGUILayout.FloatField(realData.BlinkPower, GUILayout.Width(50));
GUILayout.Label("闪烁颜色", GUILayout.Width(50));
realData.BlinkColor = EditorGUILayout.ColorField(realData.BlinkColor, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("闪烁曲线", GUILayout.Width(50));
realData.BlinkCurve = EditorGUILayout.CurveField(realData.BlinkCurve, GUILayout.Width(80), GUILayout.Height(30));
if (GUILayout.Button("重置", GUILayout.Width(50), GUILayout.Height(30)))
{
realData.ResetBlinkCurve();
}
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
GUILayout.Label("攻击效果", GUILayout.Width(50));
realData.HitType = (SkillHitType)EditorGUILayout.Popup((int)realData.HitType, new String[] { "无", "受击僵直", "击退", "击飞", "抓取" }, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
bool showHitFly = false;
switch (realData.HitType)
{
case SkillHitType.HitStiff:
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("僵直时间", GUILayout.Width(50));
realData.HitEffectTime = EditorGUILayout.FloatField(realData.HitEffectTime, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
GUI.color = Color.green;
GUILayout.Label("追击击飞", GUILayout.Width(50));
GUI.color = Color.white;
GUILayout.Label("击飞方向类型", GUILayout.Width(70));
realData.HitDirType = (SkillHitDirType)EditorGUILayout.Popup((int)realData.HitDirType, new String[] { "真实方向", "同方向" }, GUILayout.Width(80));
showHitFly = true;
}
break;
case SkillHitType.HitBack:
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("击退方向类型", GUILayout.Width(70));
realData.HitDirType = (SkillHitDirType)EditorGUILayout.Popup((int)realData.HitDirType, new String[] { "真实方向", "同方向" }, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("击退距离", GUILayout.Width(50));
realData.BackDis = EditorGUILayout.FloatField(realData.BackDis, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("击退时间", GUILayout.Width(50));
realData.HitEffectTime = EditorGUILayout.FloatField(realData.HitEffectTime, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
GUI.color = Color.green;
GUILayout.Label("追击击飞", GUILayout.Width(50));
GUI.color = Color.white;
showHitFly = true;
}
break;
case SkillHitType.HitFly:
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("击飞方向类型", GUILayout.Width(70));
realData.HitDirType = (SkillHitDirType)EditorGUILayout.Popup((int)realData.HitDirType, new String[] { "真实方向", "同方向" }, GUILayout.Width(80));
EditorGUILayout.EndHorizontal();
showHitFly = true;
}
break;
case SkillHitType.HitGrab:
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("抓取点的位置", GUILayout.Width(80));
realData.GrabPos = EditorGUILayout.FloatField(realData.GrabPos, GUILayout.Width(50));
GUILayout.Label("抓取结果距离", GUILayout.Width(80));
realData.GrabDis = EditorGUILayout.FloatField(realData.GrabDis, GUILayout.Width(50));
GUILayout.Label("抓取时间", GUILayout.Width(50));
realData.HitEffectTime = EditorGUILayout.FloatField(realData.HitEffectTime, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
}
break;
}
if (showHitFly)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("击飞距离", GUILayout.Width(50));
realData.FlyDis = EditorGUILayout.FloatField(realData.FlyDis, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("高度变化曲线", GUILayout.Width(80), GUILayout.Height(30));
realData.HitFlyHeightCurve = EditorGUILayout.CurveField(realData.HitFlyHeightCurve, GUILayout.Width(80), GUILayout.Height(30));
if (GUILayout.Button("重置", GUILayout.Width(50), GUILayout.Height(30)))
{
realData.ResetFlyHeightCurve();
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("击飞时间", GUILayout.Width(50));
realData.FlyTime = EditorGUILayout.FloatField(realData.FlyTime, GUILayout.Width(50));
GUILayout.Label("倒地时间", GUILayout.Width(50));
realData.LieTime = EditorGUILayout.FloatField(realData.LieTime, GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
}
}
public void OnDestroy()
{
EventInfo = null;
IsOpen = false;
}
}
}