카테고리 보관물: 게임개발

게임개발

검사기에서 필드를 표시 (연결 가능)하지만 코드 (비공개)를 통해 액세스 할 수 없도록 만드는 방법은 무엇입니까? 할 수 있기를 원합니다

물론 buttontype 이라는 이름 의 변수가 있다고 가정 해 봅시다 .ButtonSystem.Serializable

그 변수를 인스펙터를 통해 할당 할 수 있기를 원합니다 public.

public class SomeScript : MonoBehaviour{
    public Button button;
}

그것은 나에게 그것을 준다 :

이제 코드를 깨끗하고 안전하게 유지하고 싶습니다. 캡슐화를 유지 해야하는 이유가 있습니다.

런타임에서 구성 요소를 검색하는 여러 가지 방법이 있다는 것을 알고 transform.Find("Some/Genius/TypeUnsafe/Path")있거나 GameObject.Find("3 seconds scene iteration").GetComponent(...).피하고 싶습니다.

인스펙터에 있는 변수 private access와 변수 를 어떻게 혼합 public access합니까?



답변

당신은 SerializeField 속성을 찾고 있습니다

문서에서 :

Unity가 프라이빗 필드를 직렬화하도록합니다.

거의 필요하지 않을 것입니다. Unity가 스크립트를 직렬화하면 공용 필드 만 직렬화됩니다. 그 외에도 Unity가 개인 필드 중 하나를 직렬화하도록하려면 SerializeField 속성을 필드에 추가 할 수 있습니다.

그러면 코드는 다음과 같습니다.

public class SomeScript : MonoBehaviour{
    [SerializeField]
    private Button button;
}

답변

변수 앞에 SerializeField 속성 을 추가하여 개인 변수를 표시 할 수 있습니다 . 이 같은

[SerializeField]
private Button button;

위 변수는 관리자에게 표시되지만 다른 클래스는이를 가져올 수 없습니다. 반대로 HideInInspector 속성을 통해 관리자에게 공개 된 공개를 숨길 수도 있습니다 . 이 같은

[HideInInspector]
public Button button;

위의 변수는 다른 스크립트에서 액세스 할 수 있지만 검사자에게는 표시되지 않습니다.


답변