using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Collections.Generic;
public class Test {
[MenuItem("Assets/生成动作帧事件")]
public static void GenerAnimationEvent1()
{
List<AnimationEvent> eventGroup = new List<AnimationEvent>();
AnimationEvent hit = new AnimationEvent();
hit.time = 0.0f;
hit.functionName = "hit";
hit.messageOptions = SendMessageOptions.DontRequireReceiver;
eventGroup.Add(hit);
AnimationEvent pr = new AnimationEvent();
pr.time = 0.3f;
pr.functionName = "pr";
eventGroup.Add(pr);
GenerAnimationEvent(eventGroup.ToArray());
}
private static void GenerAnimationEvent(AnimationEvent[] eventGroup)
{
UnityEngine.Object[] selObjs = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);
if (selObjs == null || selObjs.Length == 0)
{
Debug.LogError("请选择需要添加帧事件的动画!");
return;
}
foreach (UnityEngine.Object obj in selObjs)
{
if (obj.GetType() != typeof(GameObject))
continue;
GameObject fbx = (GameObject)obj;
string fbxPath = AssetDatabase.GetAssetPath(fbx);
UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(fbxPath);
foreach (UnityEngine.Object objGo in assets)
{
if (objGo.GetType() != typeof(AnimationClip))
continue;
if (objGo.name.Contains("Take 0"))
continue;
Debug.Log(objGo.name);
AnimationClip clipGo = (AnimationClip)objGo;
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(clipGo);
if (events.Length != 0)
{
Debug.Log(fbx.name + "/" + clipGo.name + "已有帧事件");
foreach (AnimationEvent eventGo in events)
Debug.Log(string.Format("functionName: {0}, time: {1}", eventGo.functionName, eventGo.time));
continue;
}
ModelImporter modelImporter = AssetImporter.GetAtPath(
Unity3D 自动添加Fbx Animation Event
最新推荐文章于 2024-06-06 16:03:40 发布