C#을 Unity 상에서 사용할 때 2가지의 차이점은 간단하다.
인스펙터 테이블에 나오냐 안나오냐이다.
하지만 2가지 차이점이 있다면 public 형태의 변수는 기본적으로 인스펙터 테이블에 나오게 된다.
하지만 특정 객체의 인스턴스는 기본적으로 나오지 않게 된다.
[System.NonSerialized]
기본적으로 Unity C#에서 public 형태의 기본형 변수(int, float, String 등)들은 인스펙터 테이블에 그대로 노출이 된다.
하지만 구조상 public이어야 하지만 노출 시키면 안되는 것들이 몇가지 있게 된다.
이럴 경우 System.NonSerialized를 사용하게 된다.
public float perpAmount = 0.0f;
public float steepPerpAmout = 0.5f;
[System.NonSerialized]
public bool jumping = false;
[System.NonSerialized]
public bool holdingJumpButton = false;
위와같은 코드가 있다고 친다면 다음과 같이 인스펙터 테이블에 노출되게 된다.
2가지 속성만 인스펙터 테이블에 보이게 되고 [System.NonSerialized] 가 된 속성들은 보이지 않게 된다.
[System.Serializable]
NonSerialized와 반대로 인스펙터 테이블에 노출 시키기 위함 이다.
커스텀 클래스의 경우 기본적으로 노출이 안되기 때문에 작성해 준다.
여기서 중요한 것이 Unity에서 C# 클래스를 기본적으로 만들게 되면 자동적으로 MonoBehaviour를 상속받게 되는데 이렇게 상속을 받게 된다면 인스펙터 테이블에 노출을 할 수 없게 된다.
아무것도 상속을 받지 않게되어야 (사실 UnityEngine.Object를 상속 받음) 인스펙터 테이블에 노출되게 된다.
위와 같이 class 앞에 선언해 준다.
이렇게 되면 해당 커스텀 클래스가 묶음으로 인스펙터 테이블에 노출되게 된다.
using System;
using UnityEngine;
public class Player : MonoBehaviour
{
//Create a custom struct and apply [Serializable] attribute to it
[Serializable]
public struct PlayerStats
{
public int movementSpeed;
public int hitPoints;
public bool hasHealthPotion;
}
//Make the private field of our PlayerStats struct visible in the Inspector
//by applying [SerializeField] attribute to it
[SerializeField]
private PlayerStats stats;
}
Serializeable 은 PlayerStats 구조체를 직렬화해주고, SerializeField 는 PlayerStats 의 필드(내부속성)를 직렬화 해준다.
'Unity' 카테고리의 다른 글
[Unity] UGUI - UI Image (0) | 2020.03.17 |
---|---|
[Unity] 게임개발을 위한 유니티 활용식 (0) | 2020.03.16 |
#키 입력 및 Dictionary 사용방법 (0) | 2020.02.14 |
#Unity 위치와 다른 회전값 가져오기 (0) | 2020.02.11 |
[Unity] 싱글톤 패턴 만드는 방법 (0) | 2019.11.19 |