Unity의 MonoBehaviour에서 Inspector에 값을 제시하지 않는 방법

4872 단어 UnityC#

개막사


Unity에서 Inspector에서 설정 값을 변경하려면 public에서 값을 선언해야 합니다.
public MyScript : MonoBehaviour {
    public string Value = "";
}

인스펙터에 표시하고 싶지 않지만, 다른 반에서 접근하고 싶은 변수를 설정하고 싶을 때가 있습니다.
그 수단에 관한 필기.

수완


모드 1: HideInspector

public class MyScript : MonoBehaviour
{
    [HideInInspector] public string Value = "";
}
장점
- 초기값 설정 가능
결점
- Serialize의 값 유지 문제(※ 1)
- 공개 권한을 가지고 놀지 않습니다(get 등 불가).
-get/set에서 설명을 처리할 수 없습니다.(잠깐 전환 같은 거)
※1
- Prefab화 이후에 초대장을 추가할 때 값을 계속 유지하는 의외의 행동을 합니다
- HideInspector는 inspector를 자주 표시하지 않으며 Serialize object의 값은 저장하면 됩니다.
- Value에 abc를 넣은 상태에서 Prefab화된 Object에서 HideInSpector를 추가할 때의 Prefab 값의 상태
-object의 값이 저장되어 있기 때문에 & 그 필드는 Serializable입니다. 의외로 inspector의 값이 복원되었습니다
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
...(中略)...
--- !u!114 &114625309749185936
MonoBehaviour:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1202429588961352}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 4dbbba54007a4473fb3737c795b998a3, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  Value: abc

모드 2: NonSerialized

public class MyScript : MonoBehaviour
{
    [NonSerialized] public string Value = "";
}
장점
- 초기값 설정 가능
- Serialize에 값 유지 문제가 없습니다.
결점
- 공개 권한을 가지고 놀지 않습니다(get 등 불가).
-get/set에서 설명을 처리할 수 없습니다.(잠깐 전환 같은 거)

모드3: Getter, setter 속성

public class MyScript : MonoBehaviour
{
    public string Value { get; set; }

    void Awake()
    {
        this.Value = "";
    }
}
장점
-get, set에서 공개 범위와 권한을 자유롭게 제한합니다
-getter에서 쓰기 처리를 할 수도 있고 set의privvate만 할 수도 있다private set;- Serialize에 값 유지 문제가 없습니다.
결점
- 선언에 초기 값이 포함되지 않습니다.Awake에서 초기화해야 합니다.
나는 개인적으로 이런 모델을 좋아한다.
Getter,setter를 통해 다른 반을 방문하는 것도 자연스러운 기술이다.

총결산


HideInInInInspector의 의도치 않은 행동은 원칙적으로 그만두자.
NonSerialized 또는 property 사용

좋은 웹페이지 즐겨찾기