static
- static 어디에 사용할 까?
- Singleton
- GameObject.Find()
- GameObject : 변수 아님. 클래스임. 쓰기 편함.
- 혹은 Debug.~~~, Console.~~~ 이런게 static 함수이다.
- gameObject : 변수. 스크립트를 가지고 있는 오브젝트.
- GameObject : 변수 아님. 클래스임. 쓰기 편함.
gameObject와 GameObject
- static과 아닌 것의 차이는?
- 일반적으로 static이 아니라면, 변수를 만들고 하이러키창에서 탐색하거나 인스펙터에서 오브젝트를 달아주는 방식.
- 이름 만으로 바로 접근이 가능함.
- static 문제점
- 성능문제
- 다음과 같이 해당 오브젝트 수가 많다면, 각각의 개별 속성이 아닌 전체의 속성으로 바뀌게 되는데…
↪위와 같이 큐브의 각각의 체력이 아닌 하나의 체력을 가지게 됨.
결론. 게임 프로그램의 전체에 한하여 단 하나만 존재할 법한 친구들을 static으로 선언하는 것.
씬 전환에서 데이터 유지
ex) playerHP : static(X), 플레이어 클래스 + 플레이어 매니저(: 싱글톤 : static)
ex2) Scene1, Scene2, counter, button
- 버튼을 누를 때 마다, 카운터에 접근해서 카운트를 하나씩 늘린다고하자
- 이때 추가기능으로 씬 체인지 기능을 만든다면
- 씬이 바뀔 때 마다 count가 초기화 됨.
- 씬에 존재하는 모든 것들이 씬이 전환될 때 모두 폐기되기 때문.
- 이때 씬이 전환이 되어도 유지가 되길 원한다면????
- 변수 Count를 static처리
- DontDestroyOnLoad로 씬 전환되어도 같이 넘어가도록
- 보통 CounterManager나 DataManager 등을 선언하여 이것에 처리함.
- Manager가 쌓이는 문제는 null 체크 후 오브젝트 생성.
Coroutine, Invoke
문제상황 ex) 누르면 색상이 바뀌는 버튼
- 누를 때마다 초를 재는데, 연달아 클릭하면, 마지막 클릭 끝나고 초를 재서 다시 나타남.
- 실제로 사라지고 나타나고 사라지고 나타나고 함
- 기존 예약을 취소하고 예약을 다시 걸어둠
- CancelInvoke(); : 모든 Invoke 예약 취소
- CancleInvoke(”인보크 이름”) : 특정 Invoke의 이전 동작(예약) 취소
- StopAllCoroutines() : 모두 취소
- StopCoroutine(”루틴이름”)
- StartCoroutine(”루틴이름”)
문자열 지양
++ 문자열 쓰지 말랬잖슴
- CancelInvoke(nameof(Move)); 등
- nameof 짱짱맨. 메서드, 클래스, 타입 등. 앵간한건 다 됨.
- 이미 쓰고 있는 것에 대해 필요하다면 이거
- PlayerPref는 되기는 하는데, 함수나 클래스 이름 등 고정된 것에 좋음.
- Const는 작성해도 함수 명이 바뀌면 가시적으로 확인하기 어렵고 직접 가서 고쳐줘야 하는데, nameof는 에러 띄워줘서 가서 고치면 됨 개꿀ㅇㅇ.
Q.스태틱게임매니저 안의함수를 A,B라는 클래스에서 인보크를 각각 하는데 한쪽에서 캔슬 인보크 하면 양쪽 다 취소되나요?
A.
- 각각의 함수에서 인보크하는게 아니라 게임매니저 안에 인보크하는 함수를 만들어서 호출하도록 만들어주셈.
Uploaded by N2T