| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- using ChivaXR;
- using Newtonsoft.Json;
- using Sirenix.OdinInspector;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using UnityEngine;
- public class AnimationBackFill : MonoBehaviour
- {
- #if UNITY_EDITOR
- [HideInInspector]
- public string targetOperationDataName;
- [HideInInspector]
- public string sourceOperationDataName;
- [LabelText("倒序动画")]
- [ShowInInspector]
- public bool ReverseAnidataBtn = true;
- [LabelText("动画源")]
- [ShowInInspector]
- [ValueDropdown("GetAllOperationDataNames", IsUniqueList = true)]
- public string OperationDataNameSource
- {
- get { return sourceOperationDataName; }
- set
- {
- if (sourceOperationDataName != value)
- {
- sourceOperationDataName = value;
- }
- }
- }
- [LabelText("回装动画")]
- [ShowInInspector, HideIf("ReverseAnidataBtn")]
- [ValueDropdown("GetAllOperationDataNames", IsUniqueList = true)]
- public string OperationDataNameTarget
- {
- get { return targetOperationDataName; }
- set
- {
- if (targetOperationDataName != value)
- {
- targetOperationDataName = value;
- }
- }
- }
- private static IEnumerable GetAllOperationDataNames()
- {
- return AnimationManager.Instance.animationDatas.Select(s => new ValueDropdownItem(s.AniDataName, s.AniDataName));
- }
- [Button("导入")]
- [PropertySpace(SpaceBefore=80),HideIf("ReverseAnidataBtn")]
- public void AddSelectAniData()
- {
- if (sourceOperationDataName == "" || targetOperationDataName == "") { return; }
- AniDataContainer sourceTmpAniDataContainer =
- AnimationManager.Instance.animationDatas.Where(s => s.AniDataName == sourceOperationDataName).First();
- AniDataContainer targeTmpAniDataContainer =
- AnimationManager.Instance.animationDatas.Where(s => s.AniDataName == targetOperationDataName).First();
- if (sourceTmpAniDataContainer != null || targeTmpAniDataContainer != null)
- {
- targeTmpAniDataContainer.aniData.AnimationDriverDatas = DeepCopy(sourceTmpAniDataContainer.aniData.AnimationDriverDatas);
- targeTmpAniDataContainer.aniData.AnimationDriverDatas.Reverse();
- try
- {
- /* AniDataEditorContainer sourceAnimationEditorDatas =
- AnimationDataEditor.Instance.animationEditorDatas.Where(s => s.AniName == sourceOperationDataName).First();
- AniDataEditorContainer targetAnimationEditorDatas =
- AnimationDataEditor.Instance.animationEditorDatas.Where(s => s.AniName == targetOperationDataName).First();
- targetAnimationEditorDatas.relatGameObjects = sourceAnimationEditorDatas.relatGameObjects;*/
- }
- catch (System.Exception)
- {
- }
- }
- }
- [Button("倒序")]
- [PropertySpace(SpaceBefore = 80), ShowIf("ReverseAnidataBtn")]
- public void ReverseSelectAniData()
- {
- AniDataContainer sourceTmpAniDataContainer =
- AnimationManager.Instance.animationDatas.Where(s => s.AniDataName == sourceOperationDataName).First();
- sourceTmpAniDataContainer.aniData.AnimationDriverDatas.Reverse();
- }
- public List<AnimationDriverBase> DeepCopy(List<AnimationDriverBase> original)
- {
- if (original == null) return null;
- var copy = new List<AnimationDriverBase>();
- foreach (var item in original)
- {
- if (item != null)
- {
- // 使用 JsonUtility 复制每个对象
- var json = JsonUtility.ToJson(item);
- var copiedItem = (AnimationDriverBase)Activator.CreateInstance(item.GetType());
- JsonUtility.FromJsonOverwrite(json, copiedItem);
- copy.Add(copiedItem);
- }
- else
- {
- copy.Add(null);
- }
- }
- return copy;
- }
- #endif
- }
|