Unity如何制作动画编辑器(unity,开发技术)

时间:2024-04-29 05:36:12 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

Unity如何制作动画编辑器

为了更方便地为UI视图添加动画,将动画的编辑功能封装在了UI View类中,可以通过编辑器快速的为视图编辑动画。动画分为两种类型,一种是Unity中的Animator动画,该类型直接通过一个字符串类型变量记录动画State状态的名称即可,播放时调用Animator类中的Play方法传入该名称。另一种是DoTween动画,支持视图的移动、旋转、缩放、淡入淡出动画的编辑:

Unity如何制作动画编辑器

首先看一下动画相关的几个类的数据结构:

usingSystem;usingUnityEngine;usingDG.Tweening;namespaceSK.Framework{///<summary>///UI移动动画///</summary>[Serializable]publicclassUIMoveAnimation{publicenumMoveMode{MoveIn,MoveOut}///<summary>///UI移动动画方向///</summary>publicenumUIMoveAnimationDirection{Left,Right,Top,Bottom,TopLeft,TopRight,MiddleCenter,BottomLeft,BottomRight,}publicfloatduration=1f;publicfloatdelay;publicEaseease=Ease.Linear;publicUIMoveAnimationDirectiondirection=UIMoveAnimationDirection.Left;publicboolisCustom;publicVector3startValue;publicVector3endValue;publicMoveModemoveMode=MoveMode.MoveIn;publicTweenPlay(RectTransformtarget,boolinstant=false){Vector3pos=Vector3.zero;floatxOffset=target.rect.width/2+target.rect.width*target.pivot.x;floatyOffset=target.rect.height/2+target.rect.height*target.pivot.y;switch(direction){caseUIMoveAnimationDirection.Left:pos=newVector3(-xOffset,0f,0f);break;caseUIMoveAnimationDirection.Right:pos=newVector3(xOffset,0f,0f);break;caseUIMoveAnimationDirection.Top:pos=newVector3(0f,yOffset,0f);break;caseUIMoveAnimationDirection.Bottom:pos=newVector3(0f,-yOffset,0f);break;caseUIMoveAnimationDirection.TopLeft:pos=newVector3(-xOffset,yOffset,0f);break;caseUIMoveAnimationDirection.TopRight:pos=newVector3(xOffset,yOffset,0f);break;caseUIMoveAnimationDirection.MiddleCenter:pos=Vector3.zero;break;caseUIMoveAnimationDirection.BottomLeft:pos=newVector3(-xOffset,-yOffset,0f);break;caseUIMoveAnimationDirection.BottomRight:pos=newVector3(xOffset,-yOffset,0f);break;}switch(moveMode){caseMoveMode.MoveIn:target.anchoredPosition3D=isCustom?startValue:pos;returntarget.DOAnchorPos3D(endValue,instant?0f:duration).SetDelay(instant?0f:delay).SetEase(ease);caseMoveMode.MoveOut:target.anchoredPosition3D=startValue;returntarget.DOAnchorPos3D(isCustom?endValue:pos,instant?0f:duration).SetDelay(instant?0f:delay).SetEase(ease);default:returnnull;}}}}
usingSystem;usingUnityEngine;usingDG.Tweening;namespaceSK.Framework{///<summary>///UI旋转动画///</summary>[Serializable]publicclassUIRotateAnimation{publicfloatduration=1f;publicfloatdelay;publicEaseease=Ease.Linear;publicVector3startValue;publicVector3endValue;publicRotateModerotateMode=RotateMode.Fast;publicboolisCustom;publicTweenPlay(RectTransformtarget,boolinstant=false){if(isCustom){target.localRotation=Quaternion.Euler(startValue);}returntarget.DORotate(endValue,instant?0f:duration,rotateMode).SetDelay(instant?0f:delay).SetEase(ease);}}}
usingSystem;usingUnityEngine;usingDG.Tweening;namespaceSK.Framework{///<summary>///UI缩放动画///</summary>[Serializable]publicclassUIScaleAnimation{publicfloatduration=1f;publicfloatdelay;publicEaseease=Ease.Linear;publicVector3startValue=Vector3.zero;publicVector3endValue=Vector3.one;publicboolisCustom;publicTweenPlay(RectTransformtarget,boolinstant=false){if(isCustom){target.localScale=startValue;}returntarget.DOScale(endValue,instant?0f:duration).SetDelay(instant?0f:delay).SetEase(ease);}}}
usingSystem;usingDG.Tweening;usingUnityEngine;namespaceSK.Framework{///<summary>///UI淡入淡出动画///</summary>[Serializable]publicclassUIFadeAnimation{publicfloatduration=1f;publicfloatdelay;publicEaseease=Ease.Linear;publicfloatstartValue;publicfloatendValue=1f;publicboolisCustom;publicTweenPlay(CanvasGrouptarget,boolinstant=false){if(isCustom){target.alpha=startValue;}returntarget.DOFade(endValue,instant?0f:duration).SetDelay(instant?0f:delay).SetEase(ease);}}}
namespaceSK.Framework{///<summary>///UI动画类型///</summary>publicenumUIAnimationType{///<summary>///DoTween动画///</summary>Tween,///<summary>///Animator动画///</summary>Animator,}}
usingSystem;usingUnityEngine;namespaceSK.Framework{///<summary>///UI动画///</summary>[Serializable]publicclassUIAnimation{publicUIAnimationTypeanimationType=UIAnimationType.Tween;publicstringstateName;publicboolmoveToggle;publicUIMoveAnimationmoveAnimation;publicboolrotateToggle;publicUIRotateAnimationrotateAnimation;publicboolscaleToggle;publicUIScaleAnimationscaleAnimation;publicboolfadeToggle;publicUIFadeAnimationfadeAnimation;publicboolHasTweenAnimation{get{returnmoveToggle||rotateToggle||scaleToggle||fadeToggle;}}publicIChainPlay(UIViewview,boolinstant=false,Actioncallback=null){switch(animationType){caseUIAnimationType.Tween:if(HasTweenAnimation){varchain=view.Sequence();varcc=newConcurrentChain();if(moveToggle)cc.Tween(()=>moveAnimation.Play(view.RectTransform,instant));if(rotateToggle)cc.Tween(()=>rotateAnimation.Play(view.RectTransform,instant));if(scaleToggle)cc.Tween(()=>scaleAnimation.Play(view.RectTransform,instant));if(fadeToggle)cc.Tween(()=>fadeAnimation.Play(view.CanvasGroup,instant));chain.Append(cc).Event(()=>callback?.Invoke()).Begin();returnchain;}else{callback?.Invoke();returnnull;}caseUIAnimationType.Animator:returnview.Sequence().Animation(view.GetComponent<Animator>(),stateName).Event(()=>callback?.Invoke()).Begin();default:returnnull;}}}}

在UI View类中的相关变量如下:

Unity如何制作动画编辑器

usingSystem;usingUnityEngine.Events;namespaceSK.Framework{[Serializable]publicclassViewVisibilityChangedEvent{publicUIAnimationanimation=newUIAnimation();publicUnityEventonBeginEvent;publicUnityEventonEndEvent;}}

为UI View创建Custom Editor:

usingSystem;usingUnityEngine;usingUnityEditor;usingDG.Tweening;usingSystem.Reflection;usingUnityEditor.Animations;usingUnityEditor.AnimatedValues;namespaceSK.Framework{[CustomEditor(typeof(UIView),true)]publicclassUIViewInspector:Editor{privateenumMenu{Animation,UnityEvent,}privateUIViewTarget;privateSerializedPropertyvariables;privateViewVisibilityChangedEventonShow;privateViewVisibilityChangedEventonHide;privatestaticstringuiViewOnShowFoldout="UIViewOnShowFoldout";privatestaticstringuiViewOnHideFoldout="UIViewOnHideFoldout";privateboolonShowFoldout;privateboolonHideFoldout;privateMenuonShowMenu=Menu.Animation;privateMenuonHideMenu=Menu.Animation;privateSerializedPropertyonShowBeginEvent;privateSerializedPropertyonShowEndEvent;privateSerializedPropertyonHideBeginEvent;privateSerializedPropertyonHideEndEvent;privateAnimBoolonShowMoveAnimBool;privateAnimBoolonShowRotateAnimBool;privateAnimBoolonShowScaleAnimBool;privateAnimBoolonShowFadeAnimBool;privateAnimBoolonHideMoveAnimBool;privateAnimBoolonHideRotateAnimBool;privateAnimBoolonHideScaleAnimBool;privateAnimBoolonHideFadeAnimBool;privateconstfloattitleWidth=80f;privateconstfloatlabelWidth=60f;publicoverridevoidOnInspectorGUI(){if(Target==null){Target=targetasUIView;onShow=typeof(UIView).GetField("onVisible",BindingFlags.Instance|BindingFlags.NonPublic).GetValue(Target)asViewVisibilityChangedEvent;onHide=typeof(UIView).GetField("onInvisible",BindingFlags.Instance|BindingFlags.NonPublic).GetValue(Target)asViewVisibilityChangedEvent;variables=serializedObject.FindProperty("variables");onShowFoldout=EditorPrefs.GetBool(uiViewOnShowFoldout);onHideFoldout=EditorPrefs.GetBool(uiViewOnHideFoldout);onShowBeginEvent=serializedObject.FindProperty("onVisible").FindPropertyRelative("onBeginEvent");onShowEndEvent=serializedObject.FindProperty("onVisible").FindPropertyRelative("onEndEvent");onHideBeginEvent=serializedObject.FindProperty("onInvisible").FindPropertyRelative("onBeginEvent");onHideEndEvent=serializedObject.FindProperty("onInvisible").FindPropertyRelative("onEndEvent");onShowMoveAnimBool=newAnimBool(onShow.animation.moveToggle,Repaint);onShowRotateAnimBool=newAnimBool(onShow.animation.rotateToggle,Repaint);onShowScaleAnimBool=newAnimBool(onShow.animation.scaleToggle,Repaint);onShowFadeAnimBool=newAnimBool(onShow.animation.fadeToggle,Repaint);onHideMoveAnimBool=newAnimBool(onHide.animation.moveToggle,Repaint);onHideRotateAnimBool=newAnimBool(onHide.animation.rotateToggle,Repaint);onHideScaleAnimBool=newAnimBool(onHide.animation.scaleToggle,Repaint);onHideFadeAnimBool=newAnimBool(onHide.animation.fadeToggle,Repaint);}EditorGUILayout.PropertyField(variables);//OnShow折叠栏varnewOnShowFoldout=EditorGUILayout.Foldout(onShowFoldout,"OnVisible",true);if(newOnShowFoldout!=onShowFoldout){onShowFoldout=newOnShowFoldout;EditorPrefs.SetBool(uiViewOnShowFoldout,onShowFoldout);}//Showif(onShowFoldout){GUILayout.BeginHorizontal();Colorcolor=GUI.color;GUI.color=onShowMenu==Menu.Animation?Color.cyan:color;if(GUILayout.Button("Animation","ButtonLeft")){onShowMenu=Menu.Animation;}GUI.color=onShowMenu==Menu.UnityEvent?Color.cyan:color;if(GUILayout.Button("Event","ButtonRight")){onShowMenu=Menu.UnityEvent;}GUI.color=color;GUILayout.EndHorizontal();switch(onShowMenu){caseMenu.Animation://AnimationTypeGUILayout.BeginHorizontal();GUILayout.Label("Mode",GUILayout.Width(titleWidth));varnewOnShowAnimationType=(UIAnimationType)EditorGUILayout.EnumPopup(onShow.animation.animationType);if(newOnShowAnimationType!=onShow.animation.animationType){Undo.RecordObject(Target,"OnShowAnimationType");onShow.animation.animationType=newOnShowAnimationType;EditorUtility.SetDirty(Target);}GUILayout.EndHorizontal();UIAnimationanimation=onShow.animation;switch(animation.animationType){caseUIAnimationType.Tween://Move、Rotate、Scale、FadeGUILayout.BeginHorizontal();{GUI.color=animation.moveToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("MoveTool"),"ButtonLeft",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnShowAnimationMoveToggle");animation.moveToggle=!animation.moveToggle;onShowMoveAnimBool.target=animation.moveToggle;EditorUtility.SetDirty(Target);}GUI.color=animation.rotateToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("RotateTool"),"ButtonMid",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnShowAnimationRotateToggle");animation.rotateToggle=!animation.rotateToggle;onShowRotateAnimBool.target=animation.rotateToggle;EditorUtility.SetDirty(Target);}GUI.color=animation.scaleToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("ScaleTool"),"ButtonMid",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnShowAnimationScaleToggle");animation.scaleToggle=!animation.scaleToggle;onShowScaleAnimBool.target=animation.scaleToggle;EditorUtility.SetDirty(Target);}GUI.color=animation.fadeToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("ViewToolOrbit"),"ButtonRight",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnShowAnimationFadeToggle");animation.fadeToggle=!animation.fadeToggle;onShowFadeAnimBool.target=animation.fadeToggle;EditorUtility.SetDirty(Target);}GUI.color=color;}GUILayout.EndHorizontal();//MoveAnimationvarmoveAnimation=animation.moveAnimation;if(EditorGUILayout.BeginFadeGroup(onShowMoveAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(40f);GUILayout.Label(EditorGUIUtility.IconContent("MoveTool"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(moveAnimation.duration);if(newDuration!=moveAnimation.duration){Undo.RecordObject(Target,"OnShowAnimationMoveDuration");moveAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(moveAnimation.delay);if(newDelay!=moveAnimation.delay){Undo.RecordObject(Target,"OnShowAnimationMoveDelay");moveAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(moveAnimation.isCustom?"CustomPosition":"Direction","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("Direction"),!moveAnimation.isCustom,()=>{moveAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("CustomPosition"),moveAnimation.isCustom,()=>{moveAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));if(moveAnimation.isCustom){Vector3newStartValue=EditorGUILayout.Vector3Field(GUIContent.none,moveAnimation.startValue);if(newStartValue!=moveAnimation.startValue){Undo.RecordObject(Target,"OnShowAnimationMoveFrom");moveAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}else{varnewMoveDirection=(UIMoveAnimationDirection)EditorGUILayout.EnumPopup(moveAnimation.direction);if(newMoveDirection!=moveAnimation.direction){Undo.RecordObject(Target,"OnShowAnimationMoveDirection");moveAnimation.direction=newMoveDirection;EditorUtility.SetDirty(Target);}}}GUILayout.EndHorizontal();//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));Vector3newEndValue=EditorGUILayout.Vector3Field(GUIContent.none,moveAnimation.endValue);if(newEndValue!=moveAnimation.endValue){Undo.RecordObject(Target,"OnShowAnimationMoveTo");moveAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(moveAnimation.ease);if(newEase!=moveAnimation.ease){Undo.RecordObject(Target,"OnShowAnimationMoveEase");moveAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();//RotateAnimationvarrotateAnimation=animation.rotateAnimation;if(EditorGUILayout.BeginFadeGroup(onShowRotateAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(rotateAnimation.isCustom?50f:40f);GUILayout.Label(EditorGUIUtility.IconContent("RotateTool"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(rotateAnimation.duration);if(newDuration!=rotateAnimation.duration){Undo.RecordObject(Target,"OnShowAnimationRotateDuration");rotateAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(rotateAnimation.delay);if(newDelay!=rotateAnimation.delay){Undo.RecordObject(Target,"OnShowAnimationRotateDelay");rotateAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(rotateAnimation.isCustom?"FixedRotation":"CurrentRotation","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("CurrentRotation"),!rotateAnimation.isCustom,()=>{rotateAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("FixedRotation"),rotateAnimation.isCustom,()=>{rotateAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();if(rotateAnimation.isCustom){//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));Vector3newStartValue=EditorGUILayout.Vector3Field(GUIContent.none,rotateAnimation.startValue);if(newStartValue!=rotateAnimation.startValue){Undo.RecordObject(Target,"OnShowAnimationRotateFrom");rotateAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));Vector3newEndValue=EditorGUILayout.Vector3Field(GUIContent.none,rotateAnimation.endValue);if(newEndValue!=rotateAnimation.endValue){Undo.RecordObject(Target,"OnShowAnimationRotateTo");rotateAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//RotateModeGUILayout.BeginHorizontal();{GUILayout.Label("Mode",GUILayout.Width(labelWidth));varnewRotateMode=(RotateMode)EditorGUILayout.EnumPopup(rotateAnimation.rotateMode);if(newRotateMode!=rotateAnimation.rotateMode){Undo.RecordObject(Target,"OnShowAnimationRotateMode");rotateAnimation.rotateMode=newRotateMode;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(rotateAnimation.ease);if(newEase!=rotateAnimation.ease){Undo.RecordObject(Target,"OnShowAnimationRotateEase");rotateAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();//ScaleAnimationvarscaleAnimation=animation.scaleAnimation;if(EditorGUILayout.BeginFadeGroup(onShowScaleAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(scaleAnimation.isCustom?40f:30f);GUILayout.Label(EditorGUIUtility.IconContent("ScaleTool"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(scaleAnimation.duration);if(newDuration!=scaleAnimation.duration){Undo.RecordObject(Target,"OnShowAnimationScaleDuration");scaleAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(scaleAnimation.delay);if(newDelay!=scaleAnimation.delay){Undo.RecordObject(Target,"OnShowAnimationScaleDelay");scaleAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(scaleAnimation.isCustom?"FixedScale":"CurrentScale","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("CurrentScale"),!scaleAnimation.isCustom,()=>{scaleAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("FixedScale"),scaleAnimation.isCustom,()=>{scaleAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();if(scaleAnimation.isCustom){//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));Vector3newStartValue=EditorGUILayout.Vector3Field(GUIContent.none,scaleAnimation.startValue);if(newStartValue!=scaleAnimation.startValue){Undo.RecordObject(Target,"OnShowAnimationScaleFrom");scaleAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));Vector3newEndValue=EditorGUILayout.Vector3Field(GUIContent.none,scaleAnimation.endValue);if(newEndValue!=scaleAnimation.endValue){Undo.RecordObject(Target,"OnShowAnimationScaleTo");scaleAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(scaleAnimation.ease);if(newEase!=scaleAnimation.ease){Undo.RecordObject(Target,"OnShowAnimationScaleEase");scaleAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();//FadeAnimationvarfadeAnimation=animation.fadeAnimation;if(EditorGUILayout.BeginFadeGroup(onShowFadeAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(fadeAnimation.isCustom?40f:30f);GUILayout.Label(EditorGUIUtility.IconContent("ViewToolOrbit"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(fadeAnimation.duration);if(newDuration!=fadeAnimation.duration){Undo.RecordObject(Target,"OnShowAnimationFadeDuration");fadeAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(fadeAnimation.delay);if(newDelay!=fadeAnimation.delay){Undo.RecordObject(Target,"OnShowAnimationFadeDelay");fadeAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(fadeAnimation.isCustom?"FixedAlpha":"CurrentAlpha","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("CurrentAlpha"),!fadeAnimation.isCustom,()=>{fadeAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("FixedAlpha"),fadeAnimation.isCustom,()=>{fadeAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();if(fadeAnimation.isCustom){//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));floatnewStartValue=EditorGUILayout.FloatField(GUIContent.none,fadeAnimation.startValue);if(newStartValue!=fadeAnimation.startValue){Undo.RecordObject(Target,"OnShowAnimationFadeFrom");fadeAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));floatnewEndValue=EditorGUILayout.FloatField(GUIContent.none,fadeAnimation.endValue);if(newEndValue!=fadeAnimation.endValue){Undo.RecordObject(Target,"OnShowAnimationFadeTo");fadeAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(fadeAnimation.ease);if(newEase!=fadeAnimation.ease){Undo.RecordObject(Target,"OnShowAnimationFadeEase");fadeAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();break;caseUIAnimationType.Animator:varanimator=Target.GetComponent<Animator>();if(animator!=null){varanimatorController=animator.runtimeAnimatorControllerasAnimatorController;varstateMachine=animatorController.layers[0].stateMachine;if(stateMachine.states.Length==0){EditorGUILayout.HelpBox("noanimatorstatewasfound.",MessageType.Info);}else{string[]stateNames=newstring[stateMachine.states.Length];for(inti=0;i<stateNames.Length;i++){stateNames[i]=stateMachine.states[i].state.name;}varindex=Array.FindIndex(stateNames,m=>m==animation.stateName);GUILayout.BeginHorizontal();GUILayout.Label("StateName",GUILayout.Width(titleWidth));varnewIndex=EditorGUILayout.Popup(index,stateNames);if(newIndex!=index){Undo.RecordObject(Target,"ShowAnimationStateName");animation.stateName=stateNames[newIndex];EditorUtility.SetDirty(Target);}GUILayout.EndHorizontal();}}else{EditorGUILayout.HelpBox("noanimatorcomponentonthisview.",MessageType.Error);}break;default:break;}break;caseMenu.UnityEvent://OnBeginEvent、OnEndEventEditorGUILayout.PropertyField(onShowBeginEvent);EditorGUILayout.PropertyField(onShowEndEvent);break;default:break;}}//OnHide折叠栏varnewOnHideFoldout=EditorGUILayout.Foldout(onHideFoldout,"OnInvisible",true);if(newOnHideFoldout!=onHideFoldout){onHideFoldout=newOnHideFoldout;EditorPrefs.SetBool(uiViewOnHideFoldout,onHideFoldout);}//Hideif(onHideFoldout){GUILayout.BeginHorizontal();Colorcolor=GUI.color;GUI.color=onHideMenu==Menu.Animation?Color.cyan:color;if(GUILayout.Button("Animation","ButtonLeft")){onHideMenu=Menu.Animation;}GUI.color=onHideMenu==Menu.UnityEvent?Color.cyan:color;if(GUILayout.Button("Event","ButtonRight")){onHideMenu=Menu.UnityEvent;}GUI.color=color;GUILayout.EndHorizontal();switch(onHideMenu){caseMenu.Animation://AnimationTypeGUILayout.BeginHorizontal();GUILayout.Label("Mode",GUILayout.Width(titleWidth));varnewOnHideAnimationType=(UIAnimationType)EditorGUILayout.EnumPopup(onHide.animation.animationType);if(newOnHideAnimationType!=onHide.animation.animationType){Undo.RecordObject(Target,"OnHideAnimationType");onHide.animation.animationType=newOnHideAnimationType;}GUILayout.EndHorizontal();UIAnimationanimation=onHide.animation;switch(animation.animationType){caseUIAnimationType.Tween://Move、Rotate、Scale、FadeGUILayout.BeginHorizontal();{GUI.color=animation.moveToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("MoveTool"),"ButtonLeft",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnHideAnimationMoveToggle");animation.moveToggle=!animation.moveToggle;onHideMoveAnimBool.target=animation.moveToggle;EditorUtility.SetDirty(Target);}GUI.color=animation.rotateToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("RotateTool"),"ButtonMid",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnHideAnimationRotateToggle");animation.rotateToggle=!animation.rotateToggle;onHideRotateAnimBool.target=animation.rotateToggle;EditorUtility.SetDirty(Target);}GUI.color=animation.scaleToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("ScaleTool"),"ButtonMid",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnHideAnimationScaleToggle");animation.scaleToggle=!animation.scaleToggle;onHideScaleAnimBool.target=animation.scaleToggle;EditorUtility.SetDirty(Target);}GUI.color=animation.fadeToggle?color:Color.gray;if(GUILayout.Button(EditorGUIUtility.IconContent("ViewToolOrbit"),"ButtonRight",GUILayout.Width(25f))){Undo.RecordObject(Target,"OnHideAnimationFadeToggle");animation.fadeToggle=!animation.fadeToggle;onHideFadeAnimBool.target=animation.fadeToggle;EditorUtility.SetDirty(Target);}GUI.color=color;}GUILayout.EndHorizontal();//MoveAnimationvarmoveAnimation=animation.moveAnimation;if(EditorGUILayout.BeginFadeGroup(onHideMoveAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(40f);GUILayout.Label(EditorGUIUtility.IconContent("MoveTool"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(moveAnimation.duration);if(newDuration!=moveAnimation.duration){Undo.RecordObject(Target,"OnHideAnimationMoveDuration");moveAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(moveAnimation.delay);if(newDelay!=moveAnimation.delay){Undo.RecordObject(Target,"OnHideAnimationMoveDelay");moveAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//FromGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth));Vector3newStartValue=EditorGUILayout.Vector3Field(GUIContent.none,moveAnimation.startValue);if(newStartValue!=moveAnimation.startValue){Undo.RecordObject(Target,"OnHideAnimationMoveFrom");moveAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(moveAnimation.isCustom?"CustomPosition":"Direction","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("Direction"),!moveAnimation.isCustom,()=>{moveAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("CustomPosition"),moveAnimation.isCustom,()=>{moveAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();//ToGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));if(moveAnimation.isCustom){Vector3newEndValue=EditorGUILayout.Vector3Field(GUIContent.none,moveAnimation.endValue);if(newEndValue!=moveAnimation.endValue){Undo.RecordObject(Target,"OnHideAnimationMoveEnd");moveAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}else{varnewMoveDirection=(UIMoveAnimationDirection)EditorGUILayout.EnumPopup(moveAnimation.direction);if(newMoveDirection!=moveAnimation.direction){Undo.RecordObject(Target,"OnHideAnimationMoveDirection");moveAnimation.direction=newMoveDirection;EditorUtility.SetDirty(Target);}}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(moveAnimation.ease);if(newEase!=moveAnimation.ease){Undo.RecordObject(Target,"OnHideAnimationMoveEase");moveAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();//RotateAnimationvarrotateAnimation=animation.rotateAnimation;if(EditorGUILayout.BeginFadeGroup(onHideRotateAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(rotateAnimation.isCustom?50f:40f);GUILayout.Label(EditorGUIUtility.IconContent("RotateTool"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(rotateAnimation.duration);if(newDuration!=rotateAnimation.duration){Undo.RecordObject(Target,"OnHideAnimationRotateDuration");rotateAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(rotateAnimation.delay);if(newDelay!=rotateAnimation.delay){Undo.RecordObject(Target,"OnHideAnimationRotateDelay");rotateAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(rotateAnimation.isCustom?"FixedRotation":"CurrentRotation","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("CurrentRotation"),!rotateAnimation.isCustom,()=>{rotateAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("FixedRotation"),rotateAnimation.isCustom,()=>{rotateAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();if(rotateAnimation.isCustom){//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));Vector3newStartValue=EditorGUILayout.Vector3Field(GUIContent.none,rotateAnimation.startValue);if(newStartValue!=rotateAnimation.startValue){Undo.RecordObject(Target,"OnHideAnimationRotateFrom");rotateAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));Vector3newEndValue=EditorGUILayout.Vector3Field(GUIContent.none,rotateAnimation.endValue);if(newEndValue!=rotateAnimation.endValue){Undo.RecordObject(Target,"OnHideAnimationRotateTo");rotateAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//RotateModeGUILayout.BeginHorizontal();{GUILayout.Label("Mode",GUILayout.Width(labelWidth));varnewRotateMode=(RotateMode)EditorGUILayout.EnumPopup(rotateAnimation.rotateMode);if(newRotateMode!=rotateAnimation.rotateMode){Undo.RecordObject(Target,"OnHideAnimationRotateMode");rotateAnimation.rotateMode=newRotateMode;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(rotateAnimation.ease);if(newEase!=rotateAnimation.ease){Undo.RecordObject(Target,"OnHideAnimationRotateEase");rotateAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();//ScaleAnimationvarscaleAnimation=animation.scaleAnimation;if(EditorGUILayout.BeginFadeGroup(onHideScaleAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(scaleAnimation.isCustom?40f:30f);GUILayout.Label(EditorGUIUtility.IconContent("ScaleTool"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(scaleAnimation.duration);if(newDuration!=scaleAnimation.duration){Undo.RecordObject(Target,"OnHideAnimationScaleDuration");scaleAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(scaleAnimation.delay);if(newDelay!=scaleAnimation.delay){Undo.RecordObject(Target,"OnHideAnimationScaleDelay");scaleAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(scaleAnimation.isCustom?"FixedScale":"CurrentScale","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("CurrentScale"),!scaleAnimation.isCustom,()=>{scaleAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("FixedScale"),scaleAnimation.isCustom,()=>{scaleAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();if(scaleAnimation.isCustom){//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));Vector3newStartValue=EditorGUILayout.Vector3Field(GUIContent.none,scaleAnimation.startValue);if(newStartValue!=scaleAnimation.startValue){Undo.RecordObject(Target,"OnHideAnimationScaleFrom");scaleAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));Vector3newEndValue=EditorGUILayout.Vector3Field(GUIContent.none,scaleAnimation.endValue);if(newEndValue!=scaleAnimation.endValue){Undo.RecordObject(Target,"OnHideAnimationScaleTo");scaleAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(scaleAnimation.ease);if(newEase!=scaleAnimation.ease){Undo.RecordObject(Target,"OnHideAnimationScaleEase");scaleAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();//FadeAnimationvarfadeAnimation=animation.fadeAnimation;if(EditorGUILayout.BeginFadeGroup(onHideFadeAnimBool.faded)){GUILayout.BeginHorizontal("Badge");{GUILayout.BeginVertical();{GUILayout.Space(fadeAnimation.isCustom?40f:30f);GUILayout.Label(EditorGUIUtility.IconContent("ViewToolOrbit"));}GUILayout.EndVertical();GUILayout.BeginVertical();{//Duration、DelayGUILayout.BeginHorizontal();{GUILayout.Label("Duration",GUILayout.Width(labelWidth));varnewDuration=EditorGUILayout.FloatField(fadeAnimation.duration);if(newDuration!=fadeAnimation.duration){Undo.RecordObject(Target,"OnHideAnimationFadeDuration");fadeAnimation.duration=newDuration;EditorUtility.SetDirty(Target);}GUILayout.Label("Delay",GUILayout.Width(labelWidth-20f));varnewDelay=EditorGUILayout.FloatField(fadeAnimation.delay);if(newDelay!=fadeAnimation.delay){Undo.RecordObject(Target,"OnHideAnimationFadeDelay");fadeAnimation.delay=newDelay;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//IsCustomGUILayout.BeginHorizontal();{GUILayout.Label("From",GUILayout.Width(labelWidth-2f));if(GUILayout.Button(fadeAnimation.isCustom?"FixedAlpha":"CurrentAlpha","DropDownButton")){GenericMenugm=newGenericMenu();gm.AddItem(newGUIContent("CurrentAlpha"),!fadeAnimation.isCustom,()=>{fadeAnimation.isCustom=false;EditorUtility.SetDirty(Target);});gm.AddItem(newGUIContent("FixedAlpha"),fadeAnimation.isCustom,()=>{fadeAnimation.isCustom=true;EditorUtility.SetDirty(Target);});gm.ShowAsContext();}}GUILayout.EndHorizontal();if(fadeAnimation.isCustom){//FromGUILayout.BeginHorizontal();{GUILayout.Label(GUIContent.none,GUILayout.Width(labelWidth));floatnewStartValue=EditorGUILayout.FloatField(GUIContent.none,fadeAnimation.startValue);if(newStartValue!=fadeAnimation.startValue){Undo.RecordObject(Target,"OnHideAnimationFadeFrom");fadeAnimation.startValue=newStartValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}//ToGUILayout.BeginHorizontal();{GUILayout.Label("To",GUILayout.Width(labelWidth));floatnewEndValue=EditorGUILayout.FloatField(GUIContent.none,fadeAnimation.endValue);if(newEndValue!=fadeAnimation.endValue){Undo.RecordObject(Target,"OnHideAnimationFadeTo");fadeAnimation.endValue=newEndValue;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();//EaseGUILayout.BeginHorizontal();{GUILayout.Label("Ease",GUILayout.Width(labelWidth));varnewEase=(Ease)EditorGUILayout.EnumPopup(fadeAnimation.ease);if(newEase!=fadeAnimation.ease){Undo.RecordObject(Target,"OnHideAnimationFadeEase");fadeAnimation.ease=newEase;EditorUtility.SetDirty(Target);}}GUILayout.EndHorizontal();}GUILayout.EndVertical();}GUILayout.EndHorizontal();}EditorGUILayout.EndFadeGroup();break;caseUIAnimationType.Animator:varanimator=Target.GetComponent<Animator>();if(animator!=null){varanimatorController=animator.runtimeAnimatorControllerasAnimatorController;varstateMachine=animatorController.layers[0].stateMachine;if(stateMachine.states.Length==0){EditorGUILayout.HelpBox("noanimatorstatewasfound.",MessageType.Info);}else{string[]stateNames=newstring[stateMachine.states.Length];for(inti=0;i<stateNames.Length;i++){stateNames[i]=stateMachine.states[i].state.name;}varindex=Array.FindIndex(stateNames,m=>m==animation.stateName);GUILayout.BeginHorizontal();GUILayout.Label("StateName",GUILayout.Width(titleWidth));varnewIndex=EditorGUILayout.Popup(index,stateNames);if(newIndex!=index){Undo.RecordObject(Target,"ShowAnimationStateName");animation.stateName=stateNames[newIndex];EditorUtility.SetDirty(Target);}GUILayout.EndHorizontal();}}else{EditorGUILayout.HelpBox("noanimatorcomponentonthisview.",MessageType.Error);}break;default:break;}break;caseMenu.UnityEvent://OnBeginEvent、OnEndEventEditorGUILayout.PropertyField(onHideBeginEvent);EditorGUILayout.PropertyField(onHideEndEvent);break;default:break;}}serializedObject.ApplyModifiedProperties();}}}

Unity如何制作动画编辑器

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Unity如何制作动画编辑器的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:python Django如何实现增删改查下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18