반응형
아래 녀석은 런타임에
하이어래키 root 부터 모든 자식 게임오브젝트들의 컴포넌트를 검사합니당
개발중에는 주기적이나 상시 돌리면서 missing script를 관리할 때 유용하게 사용했습니다.
728x90
using UnityEngine;
using System.Collections;
public static class MissingFinder
{
#if UNITY_EDITOR
private const bool useCheckMissingScript = true;
#else
private const bool useCheckMissingScript = false;
#endif
public static void FindAll_InHierarchy()
{
if (!useCheckMissingScript)
return;
Object[] objs = Object.FindObjectsOfType(typeof (GameObject));
if (null == objs)
return;
int count = objs.Length;
for (int i = 0; i < count; ++i)
{
Find((GameObject)objs[i]);
}
}
public static void Find(GameObject _go)
{
if (!useCheckMissingScript)
return;
if (null == _go)
return;
CheckComponent(_go.transform);
}
private static void CheckComponent(Transform _tr)
{
if (null == _tr)
return;
int childCount = _tr.childCount;
for (int i=0; i<childCount; ++i)
{
CheckComponent(_tr.GetChild(i));
}
if (childCount <= 0)
{
Component[] _conponents = _tr.GetComponentsInChildren(typeof(Component), true);
int count = _conponents.Length;
for (int i = 0; i < count; ++i)
{
if (null == _conponents[i])
{
string name = MakePath(_tr.transform);
Debug.LogErrorFormat("[Have a missing script] => {0}", name);
}
}
}
}
private static string MakePath(Transform _tr)
{
string name = "";
if (null != _tr)
{
string parentName = MakePath(_tr.parent);
if (string.IsNullOrEmpty(parentName))
{
name = _tr.gameObject.name;
}
else
{
name = parentName + "::" + _tr.gameObject.name;
}
}
return name;
}
}
반응형
반응형
LIST
'IT > Unity3D' 카테고리의 다른 글
OSX용 앱 빌드 시 외부 프로그램 포함하기 (0) | 2023.04.25 |
---|---|
텍스쳐 용량 계산 (0) | 2023.04.21 |
Windows Standalone 실행 경로 확인 (1) | 2023.04.18 |
Android에서 유니티 실행하기 (0) | 2023.04.18 |
Ubuntu 18.04-LTS 에 Unity 설치 (0) | 2023.04.18 |