1. 오늘의 알고리즘 코드카타 - 가장 가까운 글자
답안 :
public class Solution {
public int[] solution(string s) {
//s의 길이만큼 int 배열 생성
int[] answer = new int[s.Length];
//기본 인덱스 넘버
int index = -1;
for(int i = 0; i < s.Length; i++)
{
//인덱스 넘버 초기화
index = -1;
//이전에 i와 같은 문자가 있는지 체크하는 j
for(int j = i - 1; j >= 0; j--)
{
if(s[i] == s[j])
{
index = i - j;
break;
}
}
answer[i] = index;
}
return answer;
}
}
2. 작업물 설명
이번에는 솔직히 거의 공부하는 시간이었다.
https://youtu.be/dnNCVcVS6uw?si=N_LOmGJkAGlkUz-9
https://youtu.be/3sWTzMsmdx8?si=ek2T6qrXyxHoWgR5
위 두 영상을 집중적으로 보면서 기능 구현을 따라해보고자 했다. 그래플링까지는 되었으나, 아래 무브먼트는 리지드 바디와 콜라이더를 사용하지 않는 바람에 이를 어떻게 수정해서 이 둘을 사용하는 그래플링과 합칠까 하다가 시간이 다 소모되어 더미 데이터화 되었다.
부드러운 횡스크롤 움직임을 위해서는 참으로 생각해야 될 것이 많았다고 느껴진다.
아무튼 이번 과제에서 구현한 부분은 다음과 같다.
주요 주제 : 동적 생성 - 씬 전환, UI 생성 / 다른 강의따라서 기능 구현하는 시간
필수 요구
- 씬 변경
- UI 구성
- 시작버튼 추가
- 시작 버튼시 씬 전환 - 메인 게임으로 이동
- 캐릭터 이동
- 카메라 이동
- 방 만들기
- 1-1. 인트로 씬 구성
추가 요구
- Dictionary 활용
- Queue, Stack 활용
- raycast
- 오브젝트 폴링
- Instantiate 로 오브젝트 생성
주요 코드
Managers
- 싱글톤으로 구현된 모든 Manager를 관리할 클래스.
- 유일하게 Monobehavior를 상속받는 Manager.
- Managers를 통해 다른 Manager에 접근가능.
- *(SoundManager는 급조하느라 Manager에서 관리되지 않고 별개의 풀을 사용하고 있음)
- 하위 Manager
- UIManager - UI의 생성과 제거 - 스택
- ResourceManager - 리소스 폴더에 프리팹들을 생성 및 제거 (Instantiate)
- PoolManager - 오브젝트 생성 시 오브젝트 풀을 담당 - 큐 / 딕셔너리
- SceneManager - 씬의 로드에 사용 (유니티 SceneManager 네이밍과 겹쳐서 AdditionalSceneManager
- GameManager - 메인 씬의 게임 로직을 다루려고 했으나 현재 더미 데이터화
BaseScene
- 모든 씬 요소의 부모 클래스.
- 이벤트 시스템을 생성하고 씬 타입을 받는다.
- 이후 개별 씬 코드에서 해당 씬에서 필요한 것들을 리소스 매니저를 통해 생성 (씬 별 UI 포함)
UI_Base
- 모든 UI 요소의 부모 클래스.
- Bind를 이용해 Button, Text 등을 objects에 저장할 수 있다.
- 각 씬 별로 필요한 것들을 담은 UI 코드가 있어 씬에서 불러온다. (ex = Intro씬의 타이틀 이미지 모션)
- 그렇기에 상단의 사진에 과제 스타트 버튼은 인스펙터 창에서 아무 기능이 없지만 UI_Intro에서 MainScene으로 넘어가는 코드가 들어있어 작동한다.
- UI_EventHandler
- 마우스 포인터와 클릭 감지
Util
- 여러 곳에서 쓰일 수 있는 static 클래스
- 현재 Define과 Utilities가 존재
Player
- 카메라 = player = GameObject.Find("Player");를 Start()에 사용하여 생성된 플레이어를 자동으로 따라감
- 컨트롤러 = 플레이어 자식으로 있는 groundCheck가 isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.1f, groundLayer);를 통해 바닥에 닿고 있는지 체크 (점프 제한)
- 그래플링 = 유투브 강의를 통해 따라서 제작 해봄 - 라인 랜더러와 커브 / 스프링 조인트를 중심으로 구현 / 레이케스트를 통해 그래플 가능 여부 파악
3. 재미난 트러블슈팅 이야기
과제 제출을 하려던 중 과제용 폴더 이름과 개인 3D 프로젝트 폴더 명이 겹치면서 무언가 착오가 생겨 두 개의 프로젝트가 합쳐져 버리는 문제가 발생했다. 백업도 없는 대형사고가 발생하여 과제 제출 20분 전에 진짜 머리 속이 하얗게 변하였다.
하지만 이번 프로젝트는 동적 생성이 주제였고, 결국 잘 정리해둔 스크립트 파일들과 리소스 폴더만 빼내어 새로운 프로젝트를 만들고 그 안에 집어넣고 해당하는 명칭의 씬과 씬 스크립트만 넣어주니 바로 원래대로 작동하기 시작했다.
정말 동적 생성의 장점을 여실히 느끼게 해준 사건이 아닌가 한다.
'TIL' 카테고리의 다른 글
[TIL]2024-2-26 / 44일차 - 심화 팀플 시작 (0) | 2024.02.26 |
---|---|
[TIL]2024-2-23 / 43일차 - 디자인 패턴 (0) | 2024.02.23 |
[TIL]2024-2-21 / 41일차 - 심화 주차 3일차 (0) | 2024.02.22 |
[TIL]2024-2-20 / 40일차 - 심화 주차 2일차 (0) | 2024.02.20 |
[TIL]2024-2-19 / 39일차 - 심화 주차 시작 (0) | 2024.02.19 |