인스펙터 조건 DrawUnity/Tips2021. 5. 21. 10:32
Table of Contents
한 스크립트를 여러 게임오브젝트가 사용하여야 할 경우
오브젝트A에겐 필요하지만 오브젝트B에게는 필요없는 변수가 있을 수 있다.
물론 그런상황이 안오게 만드는게 베스트지만 어쩔수 없는 경우가 있을것이다.
그럴때 필요없는변수가 인스펙터에 노출되어 있다면 코드를 직접 짠사람이 코멘트를 남겨놨다해도 누군가 모르고 건드릴수 있는일이다.
그럴때 사용하기좋은 스크립트이다.
using UnityEngine;
[CreateAssetMenu(fileName = "Weapon Data", menuName = "Armor Data / Weapon Data", order = int.MaxValue)]
public class WeaponData : ScriptableObject
{
public string modelName;
public float durability;
public float weight;
public Vars.WeaponKinds weaponKind;
[Header("공격력")]
public Vars.AttackType attackType;
public int damage;
[Header("GunOnly")]
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public Vars.FireType fireType;
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public Vars.GunKinds gunKind;
[Header("특성")]
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public int fireRatePerSecond;
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public float range;
[Tooltip("1탄창 탄약수량")]
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public int magazineSize;
[Tooltip("최대탄약수량?")]
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public int maximumMagazine;
[DrawIf("weaponKind", Vars.WeaponKinds.Gun, ComparisonType.Equals, DisablingType.ReadOnly)]
public GameObject gunPrefab;
}
내 경우에는 이런식으로 사용했고 웨폰종류가 Gun일때만 아래 변수들을 인스펙터에서 수정가능하게 보여준다.
그외에 무기일때는 DisablinType을 ReadOnly로했는데 Don'tDraw로해서 아예 안그릴수도 있다.
사용예시
단점은 코드의 변수선언부가 조금 지저분해질수 있다는것
그러니 꼭 필요할때 쓰는게 좋다 남발하면 코드읽기가 불편해질수도..
!참고!
스크립트를 받으면 에디터 스크립트인 DrawIfPropertyDrawer에 문제가 있다.
그냥 사용하면 DrawIf기능을 썻을때 변수명이 인스펙터에 나타나지 않는다.
여기 이부분에 EditorGUI.PropertyField(position, property, label); 이 함수를 호출할때
세번째 파라미터 label이 빠져있는데 label을 넣어주면 변수명이 나타난다.
'Unity > Tips' 카테고리의 다른 글
[Unity] Adressable에셋 코드로 링크(인스펙터 등록)하기 (0) | 2023.06.24 |
---|---|
[Unity] Scene뷰에서 축 아이콘 없이 스크린샷 찍기 (0) | 2022.11.01 |
[Unity] URP/HDRP에서 OnPostRender() 사용하기 (0) | 2022.08.09 |
[Unity] 루트모션 부모에 적용하기 (0) | 2022.03.31 |
[Animator] 블렌드 트리에서 int파라미터로 자연스럽게 Transition하기 (0) | 2021.05.08 |