2026. 1. 16. 20:59ㆍ언리얼 7기 본캠프
오늘부터 공부를 하면서 포모도로 카운터를 도입하기로 했음. 사실 이전부터 특정 프로그램에 관심이 있었는데 지원금 들어온 김에 결제해서 써보는데, 오늘 하루만 했는데도 포모도로 효과가 생각보다 괜찮은듯 함. 단, 휴식과 공부를 확실히 분리하는것은 필요해보임(휴식중에 계속 검색을 해본다거나 하는 등...은 지양해야 할 듯)
사용중인 프로그램 : 스팀에 판매 중! 귀여운 파트너가 생김 :D
https://store.steampowered.com/app/3548580/Chill_with_You__LoFi_Story/
Chill with You : Lo-Fi Story on Steam
"Chill with You : Lo-Fi Story" is a sound novel game where you work alongside Satone, a girl who loves writing stories. Customize lo-fi music, ambient sounds, and landscapes to create a focused environment. As you deepen your bond with Satone, you may disc
store.steampowered.com
금일 코드카타는 이 타이머에 맞춰 25분당 1문제 페이스로 풀었음(난이도도 딱 그정도 시간 투자해야 풀 정도였고...) 사고방식이 아직 유연하지 못해서 몇번 헤메긴 했지만 그래도 잘 풀었음
배열에서 find로 it를 찾은다음에 *it을 하면 바로 그 값이 나온다는걸 분명 배웠는데 왜 자꾸 까먹는지...^^;
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> ingredient) {
int answer = 0;
int target = 1;
auto it = ingredient.begin();
while(true){
it = find(it, ingredient.end(), 1);
if (ingredient.end() - it <=3) break;
if (it != ingredient.end()){
if (*it == 1 &&
*(it+1) == 2 &&
*(it+2) == 3 &&
*(it+3) == 1){
answer++;
it = ingredient.erase(it, it+4);
if(it - 3 < ingredient.begin()) it = ingredient.begin();
// 지웠을 때 앞에 남은게 1, 2, 3 이어서 다음에 1이 와서 햄버거가 바로 완성될 가능성을 체크를 못해서
// 계속 1만 빼는 바람에 테스트케이스 몇개가 계속 틀렸다고 나와서 한참 고민했음
else it -= 3;
}
else it += 1;
}
}
return answer;
}
이후 과제를 만들다가 점심때 애니메이션 리타게팅에 대한 특강을 들었는데, 이전에 VRM을 FBX로 전환하고 애니메이션을 입히는 작업을 해봤던 경험상 이번 강의는 생각보다 큰 충격으로 다가왔음
몇번의 클릭만으로도 리타게팅이 되기 때문에 굉장히 신기하다는 생각이 들었음
자세한 원리는 아직 모르겠지만 그래도 딸깍으로 무언가 된다는게 편하긴 하기때문에 나중에 필요하다면 써볼일이 있을듯?
(그래서 가지고있던 FBX를 언리얼로 임포트해볼려고 했는데 실패함... 머터리얼이랑 텍스쳐가 뭔가 호환이 안되는 구조인것같은데 이쪽은 문외한이라 원...)
이후 6번과제를 마무리하고 제출했다. 과제 내용과 비교해 체크리스트를 작성해보자면
- 서로 다른 C++ Actor 클래스로 구현되었는가? 예
넣어놓은 모든 액터들(8개)을 모두 각각의 클래스로 구현하였음
- Tick 함수에서 DeltaTime을 이용해서 회전, 이동이 구현되었는가? 예
액터에 따라 회전, 이동값을 Tick함수 내부에 넣어 DeltaTime을 이용해 회전 및 이동을 구현하였음
- Details 패널에서 값 수정 시 게임 내 동작이 즉시 반영되는가? 예
변수를 UPROPERTY로 지정하여 에디터상에서 수정가능하게 하였고, 에디터상에서 수정하면 게임 실행시 즉시 반영됨
- Tick 함수가 매 프레임마다 호출되며, DeltaTime이 프레임 간 경과 시간을 나타낸다는 점을 정확히 이해하였나? 예
유저마다 PC의 구동 환경이 다를 수 있기 때문에 실행되는 프레임이 다를 수 있으며, Tick은 프레임마다 호출되므로 다양한 프레임 상황들을 보간해주려면 DeltaTime(프레임 간 시간)을 곱해주어 어떤 프레임 환경에서도 일정한 구동을 하도록 만들어주는것이 좋음
- 언리얼 엔진의 리플렉션(UPROPERTY, UFUNCTION 등)의 목적과 사용법을 이해하였나? 예
리플렉션은 C++ 클래스에서 작성한 변수 및 함수 정보등을 에디터상에서 다룰 수 있게 하여, 직관적으로 조정이 가능하게 해 더 빠른 플레이 테스트 및 타 직군(아티스트 등)이 조정하게 편하게 함
본 과제에서는 UPROPERTY만 사용하며, 블루프린트는 일절 사용하지 않았기에 UFUNCTION은 사용하지 않음
- 타이머 시스템(GetTimerManager().SetTimer(...))을 활용한 시간 기반 로직을 구현했는가? 예
PatrolSpaceship 클래스는 지정된 두 위치를 왕복하되 도착하면 일정시간 대기를 했다가 움직이는 로직으로 구현을 했는데, 여기에서 GetTimerManager등을 이용해서 구현함
결과적으로 일정시간 대기하는 로직을 완벽하게 구현할 수 있었음
- 랜덤 스폰을 통해 매번 다른 위치/각도로 퍼즐을 생성하는 로직을 구현했는가? 예
사실 완전히 랜덤으로 지형을 만들면 '클리어 불가능한 구조'가 나올수도 있겠다는 생각에, 맵 자체에는 일정 프리셋을 두고 그 프리셋 안에서 랜덤으로 생성하는 구조로 로직을 만듬(위 또는 아래에 스폰 및 스폰위치에 따라 회전 방향이 바뀜, 4개의 프리셋을 두고 생성되며 생성프리셋에 따라 생성되는 위치와 이동 로직이 바뀜 등)
대신 완전히 다른 위치/각도/속도/스케일로 생성되는 운석을 배경에 배치하였으며, 특정 범위를 벗어나면 범위 내의 무작위 지점으로 이동하며 그 즉시 위치/각도/속도/스케일 값을 새로 지정해줌
모든 생성로직은 SpawnActor대신 SpawnActorDeferred를 사용했으며, 이는 소환하기 전에 미리 액터에 일부 인자를 전달해주기 위함임(소환한 액터의 BeginPlay가 실행되기 전에 인자를 전달해야하며 이 경우에는 SpawnActorDeferred를 사용해야 함)
같이 제출한 시연영상 및 리포지토리 링크 첨부함
https://github.com/Nichipe-JCM/CPP_Assignment_6_JCM/
GitHub - Nichipe-JCM/CPP_Assignment_6_JCM
Contribute to Nichipe-JCM/CPP_Assignment_6_JCM development by creating an account on GitHub.
github.com
이걸로 6번 과제는 끝났는데 문제는 7번 과제는 아직 과제 진도조차 나가지 못했다는것 -_-;;; 주말에 과제 진도 좀 빼두고 남은기간동안 7번과제에 전념해야 할 것 같음
6번과제에 너무 욕심을 많이 부려서 7번 과제는 최대한 간단하게 만들어볼 예정...
'언리얼 7기 본캠프' 카테고리의 다른 글
| 260120 TIL - Unreal C++ 9일차 (1) | 2026.01.20 |
|---|---|
| 260119 TIL - Unreal C++ 8일차 (0) | 2026.01.19 |
| 260115 TIL - Unreal C++ 6일차 (1) | 2026.01.15 |
| 260114 TIL - Unreal C++ 5일차 (0) | 2026.01.14 |
| 260113 - Unreal C++ 4일차 + 개인 프로젝트 (0) | 2026.01.13 |