.
목 차
일정 간격으로 UI 업데이트
fixedUpdate는 실제 시간을 기준으로 반복실행되기 때문에 Hunger 등의 UI를 줄일때도 이걸 이용하면 시간에 따라 줄어들지 않을까 하는 의문이 생겼다. 하지만, 그렇게 하면 UI가 부자연스럽게 줄어들 수 있다는 문제가 있다는 것을 알게 되었다. 다. 따라서 우선 Update문에 해당 실행을 하고, Time.deltaTime을 곱해줌으로써 기기의 성능에 관계없이 줄어들게 하는 것이 낫다.
제네릭 싱글톤
2주차 스탠다드 꾸준과제, 챌린지 꾸준과제를 거쳐 싱글톤을 좀 더 탐구하고 내가 앞으로 계속 사용할 싱글톤을 만들어냈다.
나는 모든 Manager 스크립트를 하나의 오브젝트에 컴포넌트로 추가해 관리를 하고 싶었다. 그래서 다음과 같은 제네릭 싱글톤을 만들었다.
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
string parentName = "Managers";
// T를 가진 오브젝트를 찾아 instance로 하기
instance = FindObjectOfType<T>();
if (instance != null)
{
return instance;
}
// T를 가진 오브젝트가 존재하지 않는다면 Managers 오브젝트에 T 컴포넌트 추가하기
GameObject parentObj = GameObject.Find(parentName) ?? new GameObject(parentName);
instance = parentObj.GetComponent<T>();
return instance;
}
}
protected virtual void Awake()
{
if (instance == null)
{
instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
Destroy(gameObject);
}
}
처음에는 챌린지 수업 기반으로 제네릭싱글톤을 만든 후, 내 입맛대로 조금 변경한 코드이다. 우선 내가 원하는대로 Parent오브젝트를 반드시 Managers로 하도록 한 후에 GPT4o에게 리팩토링을 부탁하니 다음과 같이 ?? 연산자를 사용하는 것을 발견했다.
이 연산자는 내가 아직 사용해본 적이 없어서 어떤 역할을 하는지 찾아보게 되었다.
널 병합 연산자
만약 왼쪽 연산자가 null이라면 뒤의 것을 parentObj에 할당하고, null이 아니라면 앞의 것을 할당하도록 해준다.
위의 코드 중 parentObj 를 만드는 부분에서 나온다.
또한, 이승환 튜터님께 내가 만든 제네릭 싱글톤을 검사받은 결과 매니저 스크립트는 각기 다른 게임오브젝트에 저장하는 것이 더 안전하다고 배워서 최종적으로 한번 더 수정한 결과는 다음과 같다.
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
// 이미 씬에 존재하는 T 타입의 오브젝트를 찾기
_instance = FindObjectOfType<T>();
if (_instance == null)
{
//Managers 오브젝트에 T 컴포넌트 추가하기
GameObject gameObject = new GameObject(typeof(T).Name);
_instance = gameObject.AddComponent<T>();
}
}
return _instance;
}
}
protected virtual void Awake()
{
if (_instance == null)
{
_instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
Destroy(gameObject);
}
}
앞으로 더 이상의 새로운 싱글톤 패턴 없이 이것 하나만 상속시키면 새로운 매니저들은 계속 싱글톤 패턴을 유지할 수 있다.
RenderMode
GPT를 활용했다. 이해한 내용을 직접 새로 정리하기에는 시간이 조금 아까워졌다.
ScreenSpace - Overlay

또한, 공식문서의 이미지 예는 다음과 같다:

ScreenSpace - Camera

또한, 공식문서의 이미지 예는 다음과 같다:

WorldSpace

또한, 공식문서의 이미지 예는 다음과 같다:

ㅇ
대제목 설명
마무리
마무리
'내일배움캠프 > [P6-Solo.] GettingOverSparta' 카테고리의 다른 글
[TIL 24.05.31] LOD, Occlusion Culling, ClippingPlane (0) | 2024.05.31 |
---|---|
[TIL 24.05.30] NavMesh (0) | 2024.05.30 |
[TIL 24.05.29] 레이캐스트 (0) | 2024.05.29 |
[TIL 24.05.28] Rigidbody Addforce (0) | 2024.05.28 |