Unity의 시리얼라이저는 런타임 시 효율적으로 작동하도록 특별히 고안되었습니다.
이로 인해 Unity의 직렬화는 다른 프로그래밍 환경에서의 직렬화와 다르게 동작합니다.
(참고: 유니티 매뉴얼)
private 필드의 직렬화를 원할 때
앞서 언급했듯이, 유니티에서는 기본적으로 스크립트의 public 필드만 직렬화할 수 있습니다.
하지만 [SerializeField] 를 사용하여 private 필드를 직렬화할 수도 있습니다.
즉, 다른 스크립트에서 해당 필드를 여전히 private 으로 감추면서도 직렬화를 통해
유니티 에디터의 인스펙터를 통한 값의 입력이 가능해지는 것입니다.
직렬화 : 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것
결론: c# 에서는 private, public 상관없이 값형식데이터(int float 등등)면 스택에 메모리가 쌓이고 디스크에 저장하거나 통신할 수 있지만
유니티에서는 되지 않으므로 serializefield를 사용해서 private변수들을 직렬화 해주어야만 프로그램이 종료되거나 pc가 꺼지
더라도 저장되어있는다
인스펙터 창의 onclick 에서 버튼에 함수 직접넣는건 유지보수와 확장성 차원에서 좋지않아서
스크립트를 이용해서(델리게이트 사용) 버튼에 함수를 넣어주는 것이 좋다.
var data = Enumerable.Range(1,20).ToArray();
sum = Where( x => x%2==0).Sum();
유니티에서는 쿼리보다 for문이 더 빠른 경우가 많다 .net7.0 아래여서(??)
int count = 0;
var data = Enumberable.Range(1,1000).ToArray();
for(int i = 0; i < data.Length; i++)
{
if(data[i]%13 ==0)
count++;
}
sum = Where(x => x%13 == 0)
Open/Close -> 변화는 안되게, 확장은 되게
값형식말고 참조형식의 기본값은 null이다
델리게이트는 같은 틀안에서 적은 부분만 다를때 많이 쓰인다
한번 사용할 것들을 매번 만들면 코드가 길어지고 보기 안좋아지기때문에 나온것이 람다로 처리!!!
무명메서드의 일종으로 람다 사용가능 (어차피 한번 쓰고 버릴 메서드라면 이름이 필요없지 않을까? 라는 질문에서 나옴)