Obsolete 어트리뷰트
협업하여 스크립트를 작성해야하는 경우라면 알아둘 만한 기능이다.
더 이상 사용하지 않거나 그럴 예정인 클래스나 함수, 변수의 앞에 [Obsolete] 어트리뷰트를 붙여주면 된다.
어트리뷰트가 붙은 함수를 호출할 때 밑줄과 함께 더 이상 사용되지 않는다라는 경고 메세지가 나온다.
사용하기 위해서는 using System; 이라고 네임스페이스를 선언해주어야 한다.
세 가지 오버로딩 예제
[Obsolete]
public void Function1()
{
}
// 메서드를 입력하면 초록색 밑줄이 나오며 더 이상 사용되지 않는다는 경고만 뜬다.
[Obsolete("사용 안함")]
public void Function2()
{
}
// 메서드를 입력하면 더 이상 사용되지 않는다는 경고에, 추가적인 메세지를 남길 수 있다.
[Obsolete("Not use anymore.", true)]
public void Function3()
{
}
// 두번째 인자로, true를 넣어주면 컴파일 에러(빨간줄 에러)가 발생한다.
FormerlySerializedAs 어트리뷰트
직렬화된 필드(SerializedField 어트리뷰트가 사용된)의 이름이 변경될 때,
기존 다른 장면이나 스크립트 등에서 해당 필드를 유연하게 처리하기 위해 사용된다.
여러 번 중복해서 사용할 수 있다.
변경 히스토리에 따라 FormerlySerializedAs 어트리뷰트를 붙여준다면, 데이터 손실이 일어나지 않는다.
사용하기 위해서는 using UnityEngine.Serialization; 이라고 네임스페이스를 선언해주어야 한다.
예제 코드
: 이 경우, 이전 "health" 필드를 직렬화한 저장된 장면이나 에셋 파일이 있는 경우
장면이나 에셋을 로드할 때 Unity는 해당 데이터를 새 "currentHealth" 필드에 자동으로 매핑한다.
public class PlayerData : MonoBehaviour
{
// The health field will be serialized as "health" in the scene or asset file
[SerializeField]
private int health;
// [FormerlySerializedAs] is used when the name of the serialized field changes
// In this example, the serialized field used to be named "health", but now it's named "currentHealth"
[FormerlySerializedAs("health")]
[SerializeField]
private int currentHealth;
}