Playable Director의 Unused Editor 확장을 한 번에 삭제

바쁜 사람들을 위한 소스 코드


using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Playables;

public class DeleteUnused : EditorWindow
{
    [MenuItem("GameObject/Tools/Timeline/Unusedを消去",false,1)]
    static void Delete()
    {
        // シーン上で選択中のGameObjectのPlayableAssetを取得する
        GameObject[] gameObjects = Selection.gameObjects;
        foreach (var obj in gameObjects)
        {
            try
            {
		// 現在Playableに設定されてるTimelineAssetを取得する
                var pd = obj.GetComponent<PlayableDirector>();
                var asset = pd.playableAsset;
                var path = AssetDatabase.GetAssetPath(asset);
                // シリアライズ化
                var so = new SerializedObject(pd);
                so.Update();

                // m_SceneBindingsの変数を取得
                var prop = so.FindProperty("m_SceneBindings");

                for (int i = 0; i < prop.arraySize; i++)
                {
                    // m_SceneBindingsの配列のi番目のkeyのプロパティを取得
                    var key = prop.GetArrayElementAtIndex(i).FindPropertyRelative("key");
                    // keyの参照しているオブジェクトのインスタンスIDを取得
                    var tmp = key.objectReferenceInstanceIDValue;
                    // インスタンスIDを元にアセットのパスを取得する
                    var propPath = AssetDatabase.GetAssetPath(tmp);

		  // 現在シーンに設定されてるTimelineAssetと比較して一致しなければ配列から消す
                    if (path != propPath)
                    {
                        prop.DeleteArrayElementAtIndex(i);
                        i--;
                    }
                }
		
                so.ApplyModifiedProperties();
            }
            catch(System.Exception e)
            {
                Debug.Log(e);
            }
        }
        // フィードバックないと分かり辛いから完了したらログなどで教えてあげよう
        Debug.Log("完了");
    }
}

사용법


Scene에서 Playabrector가 있는 GameObject를 선택한 상태에서 마우스 오른쪽 버튼으로 클릭
Tools&Timeline&Unused 삭제를 선택합니다.

Playable Director의 서문


먼저 Playable Director는 프로젝트의 Timeline Assiet과 Animation Clip, Audio Clip 등 다른 Asset과 Scene의 GameObject를 연결합니다.
모든 GameObject에서 프레임 또는 초 단위로 지정된 작업을 수행할 수 있습니다.

이 때 장면의 GameObject와 관련된 정보는 TimelineAsset 자체가 아닙니다
Scene 파일에 저장됩니다.장면에 있는 게임Object의 유일한 정보는 Scene 파일만 있기 때문에 어쩔 수 없습니다.
그래서 "Timeline을 복사하면 GameObject의 참조가 삭제됩니다!"누군가는 놀라겠지만 타임라인에셋에 게임오브젝트 정보가 저장돼 있지 않기 때문에 정확한 것은 벗겨진 것이 아니라 모르는 것이다.

Unused가 어떻게 생겼는지.


어떻게 된 건지 잘 모르겠지만 빙딩 게임 Object 설정은 플레이어블 다이렉터의 타임라인 에셋을 다른 것으로 바꾸면 교체 전 빙딩 설정이 그대로 유지돼 정말 잘 모르겠다.
Show Unused 체크 상자가 갑자기 생겨서 체크하면 이전 설정을 볼 수 있습니다. (이것 있습니까?)

인력이 필요하지 않은 Timeline Assiet을 선택하고 "-버튼"을 누르면 간단히 제거할 수 있습니다.

각 캐릭터에 대해 여러 개의 TimelineAsset을 제작하거나 캐릭터를 대량으로 표시하고 동작이나 효과를 진행한다.ver1.playable 등 각양각색의 교체물이 증가하고 자원을 대량으로 제작하기 위해 기초적인 장면과 Timeline Assiet을 복제하여 작업 시간을 줄일 때 하나하나 구성 요소를 켜면potchport를 끄는 것이 번거로워진다

Editor로 확장하여 한꺼번에 제거하면 편해지는 도구


Unused를 없애지 않으면 어떨까요?


필요 없는 Binding 설정 장면별 파일 용량 지속적 증가


안 끄고 장면을 복제하면 눈사람처럼 부풀어요.


Asseetbundle로 필요 없는 부분을 읽었어요.


총결산


소규모 개발은 사용할 기회가 매우 적다
대규모 개발이라면 필요 없는 읽기량이 무거워질 테니 도구로 꼼꼼히 제거해

좋은 웹페이지 즐겨찾기