공부일지

MonoBehaviour 추가 강의[09.21] (1) 본문

코딩/Unity

MonoBehaviour 추가 강의[09.21] (1)

이하택 2023. 9. 21. 15:52

static

  • static 어디에 사용할 까?
    1. Singleton
    1. GameObject.Find()
      • GameObject : 변수 아님. 클래스임. 쓰기 편함.
        • 혹은 Debug.~~~, Console.~~~ 이런게 static 함수이다.
      • gameObject : 변수. 스크립트를 가지고 있는 오브젝트.

gameObject와 GameObject

  • static과 아닌 것의 차이는?
    1. 일반적으로 static이 아니라면, 변수를 만들고 하이러키창에서 탐색하거나 인스펙터에서 오브젝트를 달아주는 방식.

  1. 이름 만으로 바로 접근이 가능함.

  • static 문제점
    1. 성능문제

    1. 다음과 같이 해당 오브젝트 수가 많다면, 각각의 개별 속성이 아닌 전체의 속성으로 바뀌게 되는데…

↪위와 같이 큐브의 각각의 체력이 아닌 하나의 체력을 가지게 됨.

결론. 게임 프로그램의 전체에 한하여 단 하나만 존재할 법한 친구들을 static으로 선언하는 것.

씬 전환에서 데이터 유지

ex) playerHP : static(X), 플레이어 클래스 + 플레이어 매니저(: 싱글톤 : static)

ex2) Scene1, Scene2, counter, button

  • 버튼을 누를 때 마다, 카운터에 접근해서 카운트를 하나씩 늘린다고하자
  • 이때 추가기능으로 씬 체인지 기능을 만든다면
  • 씬이 바뀔 때 마다 count가 초기화 됨.

  • 씬에 존재하는 모든 것들이 씬이 전환될 때 모두 폐기되기 때문.
  • 이때 씬이 전환이 되어도 유지가 되길 원한다면????
    1. 변수 Count를 static처리
    1. DontDestroyOnLoad로 씬 전환되어도 같이 넘어가도록
      1. 보통 CounterManager나 DataManager 등을 선언하여 이것에 처리함.
      1. 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