336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



- 유니티 버전 : 5.3.4f -



유니티3D 에디터(Editor) 캐시 삭제하기(Clean Cache)


어셋번들 매니저를 만들면서 테스트 하는데, 


단축키로 캐시삭제(Caching.CleanCache)를 하는데 불편함을 느껴서


에디터로 옮겼습니다.


*참고 : 캐시 삭제하는 함수는 Caching.CleanCache()입니다.


1분 작업량에 비해 많이 편하네요. 


우선 메뉴가 잘 만들어 졌는지 확인을 하겠습니다.


CleanCache라고 제가 만들어논 메뉴가 보이네요.




메뉴를 선택해보니 


오류없이 삭제되었다는 알림이 나왔습니다.




이제 정말 캐시가 삭제되었는지 확인을 해봐야 겠네요.


참고로 저는 지금 임시 UI로 


패치시스템을 만들고 있는 중입니다. (아주 간단하게..)


게임 실행을 해보니 13개 파일 받을게 있네요.




잘 받아지는지도 확인 해 보겠습니다.


13개가 차례대로 잘 받아집니다.




< 에디터 코드 >

using UnityEngine;
using UnityEditor;
using System.Collections;

public class PedtClearCaching {

    [MenuItem("Util/CleanCache")]
    public static void CleanCache()
    {
        if(Caching.CleanCache())
        {
            EditorUtility.DisplayDialog("알림", "캐시가 삭제되었습니다.", "확인");
        }
        else
        {
            EditorUtility.DisplayDialog("오류", "캐시 삭제에 실패했습니다.", "확인");
        }
    }
}


성공여부에 따라 팝업을 하나 띄워두었습니다.


Caching.CleanCache가 실패하는 경우는 


캐시를 사용하고 있을 때 입니다. 


혹시 실패가 뜬다면 유니티를 다시 껐다가 다시 켜보세요.


도움되셨길 바랍니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



- 유니티 버전 : 5.3.4f -



니티3D 에디터(Editor) 하위 폴더 순회하기(Recursion)


특정 폴더가 있고 그 하위 게임오브젝트에 어떠한 스크립트를 추가 할 일이 생겼습니다.


그런데 너무 많다보니 수작업으로는 안되겠더라구요.


그래서 에디터를 이용해서 추가하였습니다.


(실제 코드는 아래쪽에 작성하겠습니다.)


상단 메뉴로 Util을 만들고 하위에 두개의 메뉴를 만들었습니다.


하나는 스크립트 붙이는거, 다른 하나는 스크립트 제거하는거.




아래 그림에 있는 설명처럼 루트 폴더를 선택하고, 메뉴를 통해 스크립트를 붙여주면, 


프리팹 게임오브젝트에만 스크립트가 붙는걸 볼 수 있습니다.




다시 루트에서 제거하기 메뉴를 누르면


스크립트가 제거되는 걸 볼 수 있습니다.



< 에디터 코드 >


using UnityEditor;
using UnityEngine;
using System.Collections;
using System.IO;

public class PedtAutoAttachScript : Editor{
    [MenuItem("Util/AttachReApplyShaders")]
    public static void AttachReApplyShaders()
    {
        Object[] selectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);

        foreach(Object obj in selectedAsset)
        {            
            GameObject gObj = obj as GameObject;
            if (gObj != null)
            {
                string str = AssetDatabase.GetAssetPath(gObj);
                // Skip FBX 
                string strExtension = Path.GetExtension(str);
                Debug.Log(strExtension);
                if (strExtension.ToLower().CompareTo(".prefab") == 0)
                {
                    // 이미 추가 되어있는지 검사.
                    PcAutoAttatch script = gObj.GetComponent();
                    if(script == null)
                    {
                        // 없으면 추가.
                        gObj.AddComponent();
                        Debug.Log("Asset name : " + obj.name + " Type : " + obj.GetType());
                    }                    
                }                
            }
        }
    }

    [MenuItem("Util/RemoveReApplyShaders")]
    public static void RemoveReApplyShaders()
    {
        Object[] selectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);

        foreach (Object obj in selectedAsset)
        {            
            GameObject gObj = obj as GameObject;
            if (gObj != null)
            {               
                PcAutoAttatch script = gObj.GetComponent();
                if (script != null)
                {
                    Debug.Log("Asset name : " + obj.name + " Type : " + obj.GetType());
                    DestroyImmediate(script, true);
                }
            }
        }
    }
	
}


에디터를 통해 자동화가 된다면 최대한 사용해야겠죠?


도움 되셨길 바랍니다.



+ Recent posts