728x90
반응형
#if UNITY_EDITOR
using UnityEditor;
#endif
using System;
using UnityEngine;
public class Initialize : MonoBehaviour
{
/// <summary>
/// 초기화 해야하는 스크립트들의 이름을 그대로 선언
/// -> 먼저 적은 순으로 초기화 진행
/// </summary>
enum Scripts
{
}
[Tooltip("초기화 해야 할 스크립트를 지닌 게임오브젝트")]
[SerializeField] GameObject[] _go_initialze = null;
private void Awake()
{
foreach (Scripts script in Enum.GetValues(typeof(Scripts)))
{
foreach (GameObject item in _go_initialze)
{
if (item.GetComponent(script.ToString()) != null)
{
// 실행해야 할 메서드
item.GetComponent(script.ToString()).SendMessage("");
break;
}
}
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(Initialize))]
public class customEditor : Editor
{
public override void OnInspectorGUI()
{
EditorGUILayout.HelpBox("초기화 순서를 지정할 경우 사용", MessageType.Info);
base.OnInspectorGUI();
}
}
#endif
}
만들고 있는 게임의 볼륨이 커지면 커질수록 아무래도 초기화 순서가 중요시되는 경우가 종종 생기기 마련
당연히 위 코드 외에도 많은 방식이 있지만 지금은 이런 식으로 사용하고 있다 :')
열거형으로 실행해야 하는 메서드가 있는 스크립트의 이름을 그대로 나열하고 그 스크립트를 지닌 게임 오브젝트를 미리 들고 있게 한 뒤 반복문을 통해 오브젝트가 스크립트를 들고 있다면 SendMessage로 원하는 메서드를 실행! 아무래도 SendMessage이기 때문에 실행하고자 하는 메서드가 private여도 상관은 없는..
* 주의할 점은 SendMessage를 사용하기 때문에 item.GetComponent(script.ToString()).SendMessage(""); 이 코드는 item의 GetComponent를 한 Script에만 SendMessage를 보내는 게 아니라 item에 포함된 모든 스크립트에 SendMessage를 보내게 됨 (SendMeesage의 경우 오브젝트가 포함하는 모든 스크립트에 보내기 때문)
* UnityEditor의 경우 빌드시 오류를 방지하고자 전처리기 지시문 사용
반응형
'Unity > Tips' 카테고리의 다른 글
Unity PackageCache 등의 package 오류 (특히 Unity버전 변경 시) (0) | 2021.12.07 |
---|---|
Unity Script 한글 깨짐 현상 (0) | 2021.12.06 |
Unity Coroutine 간단 사용 예시 (0) | 2021.11.25 |
Unity Canvas(UGUI) refresh (0) | 2021.11.23 |
Unity Assets폴더에 있는 스크립트 혹은 오브젝트가 Scene의 어디에서 사용되고 있는지 보고 싶은 느낌 (0) | 2021.11.08 |