단위 편집기 확장에서 레이어 MaskField 표시
9364 단어 유닛 확장UnityEditorUnityC#
거치다
Unity의 기본 Editor GUIlayout에는 Mask 편집 API(레이어 자체 설정 API)가 없는 이유를 알 수 없으므로 자체 제작이 필요합니다.
참조 페이지
샘플 스크립트
다음 스크립트를 Unity 프로젝트의 Editor 폴더 아래에 배치하면 사용할 수 있습니다.
편집기 폴더에 설정하면 게임 논리 측면에서 사용하는 스크립트 내부
#if UNITY_EDITOR
에 포함된 부분의 편집기 확장 부분을 호출할 수 없습니다. (편집기 폴더 안에서만 편집기 확장부의 구조를 만들면 문제없을 것입니다.)아래 스크립트에서도 사용할 수 있습니다.
그러나 이렇게 하면 일반적인 게임 논리에서도 호출할 수 있기 때문에 파일 출력을 실행할 때 구축 오류가 발생할 수 있습니다...좋은 방법 없어요?
#if UNITY_EDITOR
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public static class MyEditorGUILayout
{
// LayerMaskFieldはデフォルトでは無いので自作.
public static LayerMask LayerMaskField(
string label,
LayerMask layerMask)
{
List<string> layers = new List<string>();
List<int> layerNumbers = new List<int>();
for (var i = 0; i < 32; ++i)
{
string layerName = LayerMask.LayerToName(i);
if (!string.IsNullOrEmpty(layerName))
{
layers.Add(layerName);
layerNumbers.Add(i);
}
}
int maskWithoutEmpty = 0;
for (var i = 0; i < layerNumbers.Count; ++i)
{
if (0 < ((1 << layerNumbers[i]) & layerMask.value))
maskWithoutEmpty |= 1 << i;
}
maskWithoutEmpty = EditorGUILayout.MaskField(label, maskWithoutEmpty, layers.ToArray());
int mask = 0;
for (var i = 0; i < layerNumbers.Count; ++i)
{
if (0 < (maskWithoutEmpty & (1 << i)))
mask |= 1 << layerNumbers[i];
}
layerMask.value = mask;
return layerMask;
}
}
#endif
사용 방법
using UnityEngine;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace sample
{
public class Sample : MonoBehaviour
{
[SerializeField] LayerMask mask;
#if UNITY_EDITOR
// エディタ拡張部分.
[CustomEditor(typeof(Sample))]
public class SampleEditor : Editor
{
public override void OnInspectorGUI()
{
var component = target as Sample;
component.mask = MyEditorGUILayout.LayerMaskField("Layer Mask", component.mask);
}
}
#endif
}
}
실행 화면
상술한 견본 스크립트를 설치하면 다음과 같다.
언젠가 저를 묵인하게 지지해주셨으면 좋겠어요.
Reference
이 문제에 관하여(단위 편집기 확장에서 레이어 MaskField 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsumotokaka11/items/b5ab3d57375a2180b9f4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)