공부/Unity

24.03.26

월러비 2024. 3. 26. 21:43

싱글톤

  • 디자인 패턴 중 하나로, 객체를 하나로만 관리하는 방법이다.
    • 즉, 객체의 인스턴스가 오직 1개만 생성되는 패턴이다.
    • 생성자를 통해서 여러 번 호출이 되더라도 인스턴스를 새로 생성하지 않고 최초 호출 시에 만들어두었던 인스턴스를 재활용하는 패턴이다.
  • 장점
    • 최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다.
    • 이미 생성된 인스턴스를 활용하니 속도 측면에서도 이점이 있다.
    • 싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용할 수 있다.
      • 즉, 다른 클래스 간에 데이터 공유가 쉽다.
  • 쓰면 편한데 남발하면 안된다.
    • 인스턴스는 ‘전역 변수’로 선언되기 때문에 오류가 난다면 코드를 이해하기가 어려워진다.
    • 할당 시점, 삭제 시점을 결정할 수 없다.
      • 보완점 : 게임에서 하나만 있을 것으로 예상되는것으로 지정한다.(타이머 관리, 사운드 관리 ⇒ 즉, 매니저 급에서만 사용하는것이 좋다.)

DontDestroyOnLoad

  • 유니티는 씬 단위로 게임이 플레이 될 공간이나 장소 등을 구현하며, 한 씬에서 다른 씬으로 넘어갈 떄는, 기존 씬이 언로드 되면서 기존 씬에 있던 게임 오브젝트는 모두 파괴된다.
  • DontDestroyOnLoad : 다른 씬으로 넘어갈 때 파괴되지 않도록 하는 함수다.
    • Destroy() 함수로 파괴될 수 있다.
  • 문제점
    • 씬을 왔다 갔다한다면, 해당 씬은 초기 상태로 불려오기 때문에 똑같은 오브젝트가 2개 생기고 파괴 되지않아 코드가 지속될수록 오브젝트 복제가 늘어나게 된다.
  • 해결방법
    • 단 하나만 존재하는 오브젝트를 만들기 위해 Awake() 함수에서 현재 씬에 같은 오브젝트가 몇개인지 확인하고 2개 이상이라면 생성된 오브젝트를 파괴한다.
    • 또는 파괴하지 않는 게임오브젝트를 생성하는 전용 씬을 만들고 그 씬에서 파괴하지 않는 게임 오브젝트를 생성한 뒤 따른 씬만 오가는 방식으로, 이 게임 내에서 단 하나만 존재하는 오브젝트를 만들고자 하는 경우에 유용한 방법이다.
//Time.timeScale //시간 전체가 느려진다.
DontDestroyOnLoad(gameObject); //로드될때(다른곳으로 바뀔때) 파괴하지 말라는 코드

 

Any State

  • 어떤 상황이든 특정 조건이 만족되면 실행되는 애니메이션 상태를 연결한다.
  • 보통 ‘트리거’로 조절한다.

LookAt

  • 바라봐야할 오브젝트의 ‘좌표’과 회전 방향을 인자로 받아 해당 오브젝트를 바라 볼 수 있게 하는 함수다.
transform.LookAt(attacker.transform, Vector3.up); //카메라가 바라보는 목표의 좌표, 회전 방향 / 데미지 받은 적이 공격한 사람을 쳐다보게 된다.

'공부 > Unity' 카테고리의 다른 글

24.03.28  (0) 2024.03.28
24.03.27  (1) 2024.03.27
24.03.25  (0) 2024.03.25
24.03.22  (1) 2024.03.22
24.03.21  (0) 2024.03.21