목차
팀 프로젝트 3일차, 챌린지 분반 수업 3회차
팀 프로젝트 3일째! 벌써 목요일이다.
팀 목표는 주말 출근 안하기이므로 금요일, 월요일 후 화요일 발표인 것이다.
오늘부터는 내 담당인 합치기가 진행될 예정이므로 정신 바짝 차리고 임해야겠다.
수영 다녀오고 시간이 남아서 유니티 강의 하나 듣고, 팀 프로젝트 진행한 뒤에 챌린지 반 수업을 들어야한다.
이후 팀 프로젝트를 하다가 자기 전까지 시간이 남으면 강의를 더 듣고 TIL을 쓰려고 한다.
CustomEditor
9시 되기 전에
Scripts - Player - Editor 폴더를 만들어준다.
PlayerStatsEditor라는 스크립트를 다음과 같이 만들었다.
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(PlayerStats))]
public class PlayerStatsEditor : Editor
{
private PlayerStats StatsTarget => target as PlayerStats;
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Reset Player"))
{
StatsTarget.ResetPlayer();
}
}
}

리셋 버튼이 생긴 모습.
해당 강의는 커스텀 에디터를 가르치는 과정이 없기 때문에 일단은 당장 필요한 기능만 따라서 구현하라고 하셨기 때문에,
이번에는 이런게 있구나~ 정도로만 넘어가고, 자세한 건 챌린지 반 수업 때 들으면 될 것 같다!
챌린지 반 특강 수업 3회차
저번에 1회차인 줄 알았는데, 오티 포함해서 계산되는 것 같길래 이번에 3회차고, 저번은 2회차였다. (수정은 귀찮아서 안할거임)
일단 수업 중 필기는 접은글로!
클래스, 제네릭, 확장메서드
## 제네릭
Cup of T
컵에 들어가는 Tea(T)가 무엇인지에 따라 오렌지 주스 컵, 커피 컵, 사이다 컵 등이 결정된다.
제네릭 클래스는 자료형을 일반화된 타입인 <T>로 표시한 클래스
## 컬렉션
데이터를 효율적으로 저장, 검색, 조작할 수 있는 다양한 기능을 제공한다.
주요 컬렉션 클래스들은 닷넷 프레임워크의 일부로 제공된다.
System.Collections 및 System.Collections.Generics
면접 질문 단골
Dictionary와 HashTable 차이?
List<T>와 Array, ArrayList의 차이?
System.Linq (Language Integrated Query) 쿼리문을 사용해 데이터를 조작할 수 있다.
확장 메서드 형태로 제공됨.
Dictionary<int, int>를 new Dictionary<int, int>()가 아닌, new()로 선언하고 초기화할 수 있다.
FindAll 이랑 Where이랑 기능은 동일한데 API가 다르고 리턴값도 조금 다름. (FindAll은 LINQ아님)
Sort() 오름차순 정렬, Reverse() 리스트 순서를 반대로.
## 확장메서드
C#의 확장메서드는 모든 클래스의 기능을 확장할 수 있는 메서드이다.
기본적으로 클래스에 extra public method를 추가할 수 있다.
이를 생성하려면 정적 클래스가 필요하고 다음과 같은 정적 메서드를 추가하기만 하면 된다.
예시1
public static Vector2 SetX(this Vector2 vector, float x)
{
return new Vector2(x, vector.y);
}
예시2
public static T GetORAddComponent<T>(this GameObject gameObject) where T : MonoBehaviour //이와 같이 특정 클래스를 상속 받은 클래스로 제한도 가능
{
var component = gameObject.GetComponent<T>();
if(component == null) gameObject.AddComponent<T>();
return component;
}
예시3
public static void Shuffle<T>(this IList<T> list)
{
//셔플시키기
}
Utility 클래스 같은 데다가 자주 쓰는 확장메서드들을 두고 쓸 수 있다.
실무에서 진짜 많이 쓴다.
실무에서 배우기 전에는 잘 모르는 경우가 많다.
수강생: 형제 오브젝트 컴포넌트 찾을 때 구현해 놓으면 쏠쏠하다.
수강생: LogError, LogWarning 의 글 색이랑 글 스타일도 바꿀 수 있다.
늘 something.gameObject.SetActive(true) 이것도 쓸만할듯.
확장메서드 이녀석 진짜진짜 유용한 듯.
Q. 비트연산자 많이 쓰이나요?
A. 비트연산자는 잘 안쓴다..
보니까 상수도 Constant로 따로 묶어두셨음.
Q. 개발하다가 값이 갑자기 추가되거나 하면, 필요한 사람이 추가한 다음에 다른 사람들에게 알려주는 식인가요?
A. 보통은 이런 유틸리티가 있나요? 하고 물어보고 답변 받는 식. 근데 내가 만들고 나면 정말 뿌듯하다? 자랑할 순 있음.
Q. 시간 있을 때는 (있다면) 저런 유틸 함수 들여다 보는 것도 좋겠네요.
A. 시간이 있다면 그럴 수 있다. 프로젝트 하다가 결합도가 낮은 메소드들은 미리 정리해두면 최종 때 시간 절약이 될 수도 있을 것 같다.
확장 메서드 사용 예시들을 보여주셨는데 굉장히 유용해보였다.
범용적으로 사용될 수 있는 메서드들은 Utility로 따로 모아두는 것도 좋을 것 같다.
확장메서드를 키워드 삼아 정리하면 좋은데 오늘은 정리할 시간이 부족할 것 같아서 일단 패스하고 나중에 따로 정리해야겠다.
TextMesh Pro 폰트 만들기
무료 폰트를 사용해보려고 했는데 바로 적용할 수 없었다.
TextMeshPro를 사용하고 있기 때문이었다.
이를 해결하기 위해 TextMeshPro를 위해 폰트를 만들어줘야했다.


다운로드한 폰트를 프로젝트 내에 import 먼저 해준다.
Window - TextMeshPro - Font Asset Creator 에서 원하는 폰트 선택한 뒤 Save As를 눌러 TextMeshPro용 폰트로 저장한다.
느낀점
오늘 합치고, 필수 구현 과제는 거의 완성한 채로, 도전 과제는 따로 브랜치를 파서 진행하기로 했다.
따라서, develop 브랜치가 업데이트 되었을 때, develop_challange도 반드시 업데이트 되어야하는 상황이다.
리소스 관리가 중요해진 시점이 된 것 같다.
내일 학습 할 것은 무엇인지
내일은 도전 과제 중 하나인 커스텀을 시도해볼까 생각중이다.
상점 씬을 아예 따로 만들어야한다.. 내일내로 끝낼 수 있을까?
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025AUG04] 팀 프로젝트 5일차, 발표 준비 (0) | 2025.08.04 |
|---|---|
| [내일배움캠프_2025AUG1]팀 프로젝트 4일차, 커스터마이징 (0) | 2025.08.01 |
| [내일배움캠프_2025JUL30] Input System 키 바인딩 변경 Setting (0) | 2025.07.30 |
| [내일배움캠프_2025JUL29] 유니티 2D 팀 프로젝트 시작! (0) | 2025.07.29 |
| [내일배움캠프_2025JUL28] 과제 제출 및 유니티 추가 개인 학습 (0) | 2025.07.28 |