Пример #1
0
        IEnumerator DoConvertAnimatorMeta(AnimatorMeta oldMeta, AnimateMeta newMeta, string assetPath)
        {
            foreach (var oldTake in oldMeta.takes)
            {
                var newTake = new Take();

                AddMessage(" - convert take: " + oldTake.name);

                yield return(EditorCoroutines.StartCoroutine(DoConvertTake(oldTake, newTake, true, assetPath), this));

                newMeta.takes.Add(newTake);
            }
        }
Пример #2
0
    /// <summary>
    /// if copyTakes is true, overrides all takes in newMeta (if null, then to our dataholder) with current data
    /// </summary>
    public void MetaSet(AnimatorMeta newMeta, bool copyTakes) {
        if(mMetaHolder.meta != newMeta) {
            AnimatorMeta prevMeta = mMetaHolder.meta;
            List<AMTakeData> prevTakes = new List<AMTakeData>(takes); //preserve the list of takes from previous
            string prevPlayOnStartName = mData.defaultTakeName;

            mMetaHolder.meta = newMeta; //this will clear out internal takes list

            if(mMetaHolder.meta) {
                if(copyTakes) { //duplicate takes to the new meta
                    mMetaHolder.meta.takes.Clear();

                    foreach(AMTakeData take in prevTakes)
                        DuplicateTake(take, true, true);
                }

                //clear out non-meta stuff
                if(mMetaHolder.dataHolder) {
                    UnityEditor.Undo.DestroyObjectImmediate(mMetaHolder.dataHolder);
                    mMetaHolder.dataHolder = null;
                }
            }
            else {
                //create data holder
#if MATE_DEBUG_ANIMATOR
                mMetaHolder.dataHolder = new GameObject("_animdata", typeof(AnimatorDataHolder));
#else
                mMetaHolder.dataHolder = new GameObject("_animdata");
#endif
                mMetaHolder.dataHolder.transform.parent = mData.transform;

                UnityEditor.Undo.RegisterCreatedObjectUndo(mMetaHolder.dataHolder, "Set Meta");

                if(copyTakes) { //duplicate meta to takeData
                    foreach(AMTakeData take in prevTakes)
                        DuplicateTake(take, true, false);
                }
            }

            if(takes == null || takes.Count == 0) { //add at least one take
                AddNewTake();
            }

            //get new play on start
            if(!string.IsNullOrEmpty(prevPlayOnStartName)) {
                string newPlayOnStart = "";
                foreach(AMTakeData take in takes) {
                    if(take.name == prevPlayOnStartName) {
                        newPlayOnStart = take.name;
                        break;
                    }
                }

                mData.defaultTakeName = newPlayOnStart;
            }
            else
                mData.defaultTakeName = "";
            //

            //destroy previous meta if it is not prefab
            if(prevMeta && UnityEditor.PrefabUtility.GetPrefabType(prevMeta) != UnityEditor.PrefabType.Prefab) {
                UnityEditor.Undo.DestroyObjectImmediate(prevMeta.gameObject);
            }
        }
    }