0. 개요
오늘은 과제 제출 전까지 최대한 작업을 하고.. 최종 제출을 마치고 깃 허브 특강을 들었다.
우선 과제는 어제 새벽까지 잠을 줄여서 하긴 했지만, 과제 내용을 다 충족하지 못했고, 다양하게 만들려던 계획을 다 이루지 못해서 아쉬움이 많이 남게 마무리 되었다.
주된 이유로는 내가 감기랑 여행 때문에가 매우 컸고, 작업상 이유로는 기존에 직접 물리 충돌 처리를 구현한 드론을 사용했기 때문에 AddImpluse나 Launch 등을 활용하지 못한 것, 프레임 드랍 처리를 해주어야 했는데 처음 해봤기 때문에 시간이 걸린 점.. 등등이 있었다.
때문에 다양한 함정들 배치를 이용한 난이도 상승 시스템, 메뉴 UI, 3D UI를 미처 다 만들지 못해서 아쉬웠다.
제출은 이렇게 아쉬운채로 내지만, 앞으로 추가적으로 조금씩 다듬고 추가해 완성해보려 한다.
적어도 저 3가지는 꼭 만들어서 다시 유튜브와 Git에 올려 마무리하고 싶다.
깃 허브 특강의 경우엔 앞으로 팀 프로젝트를 하면서 LFS를 어떻게 사용하고, 어떤 점들을 주의해야하는가에 대한 강의를 들었다.
처음 사용해보고, 처음 언리얼 팀프로젝트를 진행하는 것이라서 매우 유용하고 도움이 되는 특강이었던 것 같다.
3 ~ 4 시간 동안은 앞으로 팀 프로젝트를 어떻게 만들지에 대해 팀 회의를 진행했다.
어제는 컨셉에 대한 회의를 진행했고, 오늘은 좀 더 구체화된 것들에 대해 회의를 진행했는데,
구현 목록을 만들고, 우선 순위에 따라 정리한 뒤, 1주차 동안 완성한 프로토타입에 있어야 하는 기능들을 정리했다.
이후에는 에셋들을 함께 찾아보고, 도움이 될만한 자료들을 찾아 공유하는 시간을 가졌다.
내일은 오늘 정리한 목록을 기준으로 업무 분담을 하고, 코딩 컨벤션 정하기 팀 프로젝트 기간 동안 지켜야할 약속 정하기, LFS를 이용한 프로젝트 환경 설정까지 진행할 예정이다.
주말간은 다들 마지막으로 휴식을 취하자는 분위기가 되어서 휴식을 취할겸 간단한 레벨을 만들어볼까 한다.
(이전에 간단한 레벨 디자인 영상을 봤던게 있어서 해보고 싶기도 했어서 쉴겸 해볼까 한다.)
(사실... 이미 저번주에 여행을 다녀와서 쉬는게 필요할까 싶기도 하지만... ㅠ 다음주에 불태워야겠다..)
1. 과제
1. 레벨 완성 및 라이팅 하기
레벨이 너무 어두워 보여서 라이팅 작업을 할겸 레벨도 완성해주었다.
추가적으로 원통형 통로에 코인이 생성되도록 배치해 주었다.
2. 멀티 웨이브 구현하기
< Lap 시스템 만들기로 변경한 이유 >
원래 멀티 웨이브 시스템을 구현하는게 과제였는데, 지금 게임에 매우 어울리지 않는다 생각했다.
일단 지금 게임은 레이스 게임 처럼 시작점에서 다시 시작 지점까지 얼마나 많은 코인을 모으고, 얼마나 빨리 도착했느냐가 랭킹에 기록되도록 만들고 있다.
때문에 시간단위로 오는 멀티 웨이브 보다 플레이어가 돈 바퀴 수가 증가할 때 마다 맵에 장애물을 추가하는 등으로 구현하려 한다.
때문에 Lap 시스템을 구현하기로 했다.
⇒ 요는.. 어떻게 구현하느냐 차이이지 과제에서 제시한 본질적인 것은 바뀌지 않았다 생각했다.
< LapCheckPoint 만들기 >
음.. 우선 시작 지점과 끝 지점(사실 시작지점과 동일)을 만들어야 하는데, 그냥 특정 지역에 진입하면, Lap 카운트를 증가시키게 되면, 들어왔다 나갔다만해도 바로 스테이지가 증가할 것이다.
때문에 이를 방지하고자 LapCheckPoint를 만들어야겠다고 생각했다.
그림을 조금 잘 못 그렸는데, 요는 CheckPoint를 배치하고, 해당 CheckPoint의 숫자를 기준으로 플레이어가 진입했을 때, 마지막 통과한 CheckPoint가 본인의 이전이었는지 판단해 기록해줄 것이다.
이러면, 마지막에 다시 시작지점으로 갔을 때, 플레이어가 역주행을 한 것인지, 지나쳐야할 곳을 다 지나치치 않았는지 판단해 Lap을 증가시키지 않을 것이다.
잘 되는 것을 확인할 수 있었다~!
< 오브젝트 풀링 만들기 >
우선 지금 많은 액터를 동시에 삭제하고, 다시 생성해야하는 문제 때문에 프레임이 떨어지는 문제가 발생했다.
때문에 기존 스폰과 삭제 방식에서 다른 해결책이 필요했고..
그중 그나마 떠오르는 것이 오브젝트 풀링이었다.
우선 TMap을 이용해 어떤 클래스를 기반으로 몇 개를 생성해둘지 클래스 디폴트 설정에서만 변경할 수 있도록 해주었다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ActorPool.generated.h"
UCLASS()
class SPARTA_HOMEWORK_08_API AActorPool : public AActor
{
GENERATED_BODY()
protected:
UPROPERTY(EditDefaultsOnly,BlueprintReadOnly,Category="ActorPools")
TMap<TSubclassOf<AActor>,int32> ActorClasses;
TMap<TSubclassOf<AActor>, TArray<AActor*>> ActorPools;
public:
AActorPool();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
void InitializePool();
AActor* GetPoolActor(const TSubclassOf<AActor>& ActorClass);
void ReturnActorToPool(AActor* PoolActor);
};
이렇게 만들어주고, (cpp코드는 코드가 길어서 올리지 않겠다.)
이후 기존 Spawn 방식을 모두 ActorSpawn이 아니라 해당 ActorPool에게 이미 생성된 액터를 얻어오는식으로 수정해주었다.
새로 안 것
Tick을 껏다가 하려면…
Actor->PrimaryActorTick.bCanEverTick = true;
해당 값이 true여야 한다.
만약 저걸 false로 설정해 뒀다면,
Actor->SetActorTickEnabled(true);
Actor->SetActorTickEnabled(false);
가 먹히지 않는다… ;ㅅ; 한참을 해맸다… 망해따..
그 결과 프레임 드랍이 더 이상 발생하지 않았다…!!!
=> 사실 추후에 실험을 해보니 이것만으로는 충분히 해결되지 않았다... 여전히 프레임 드랍이 발생한다.
=> 때문에 생각한 방법은 한 프레임에 액터들을 오브젝트 풀링으로부터 활성화/ 비활성화 시켜주는게 아니라, 프레임을 몇개 나누어 비동기화(?)식으로 하는게 좋을 것 같아보였다.
3. 아이템 만들기
< 속도가 느려지는 아이템 만들기 >
최대 속도가 느려지는 아이템을 만들었다.
음.. 조금 보기 안좋은데, 디버프 아이템 유지 시간 UI, 속도계 색 변경 등을 해주면 시각적으로 디버프 상태라는 것을 잘 나타내줄 수 있을 것 같다.
+ 체력바 UI도 만들어 주었다.
4. 과제 제출 영상
아직 부족한 부분이 많고 완성도가 많이 떨어져서.. 시간이 날때마다 조금씩 추가해 완성을 해야할 것 같다.
기한 안에 이 정도까지 완성하지 못한게.. 처음이라 더욱 더 반성하게 되는 것 같다.
뭔가.. 더 다양하게 사용해보고, 다른 방법으로 만들고 싶어서 욕심을 냈어서 기한내에 완성하지 못하지 않았나 반성하게 되었다.
2. Git 심화 특강
깃 특강은.. GitLFS 사용법과 플러그인 적용방법, 사용시 주의해야할 사항 및 권고 사항등을 들었다.
아직 직접 사용해보지는 못해서 정리하기가 애매해서 정리는 못했지만,
언리얼의 경우 코드뿐 아니라 에셋을 서로 손대야할 경우가 발생해 함부러 수정했다가 양쪽에서 수정해서 충돌할 가능성이 있다고 한다.
이 경우, 충돌을 해결하는게 쉽지 않고, 우리가 사용하는 LFS 특성상 서버에 한번 올리면 다시 빼기도 쉽지가 않아서 주의를 요한다고 하신다.
대신 이를 방지하기 위해서 에셋 수정 잠금을 설정할 수 있어서 누군가 에셋을 수정하고 있다면 잠금처리를해 방지할 수 있다고 한다.
이 외에는 에셋 마이그레이션을 이용해 에셋중 필요한 것만 가져오는 방법, 월드 파티션 설명과 월드 파티션을 비활성하는게 유리한 이유 등에 대해서도 추가로 설명해주셨다.
이에 대한 내용은 직접 LFS 설정 및 사용하면서 추후에 추가적으로 작성해볼 예정이다.
3. 마무리
그래도 팀 프로젝트 회의가 순조롭게 진행되고 있고, 다들 의욕이 너무 넘치셔서 이번 팀프로젝트도 너무 기대된다.
조금 걱정인 부분은.. 이번에도 다양한 도전을 시도해볼 것 같은데.. 언리얼은 처음이라.. 자신이 없다.. ㅠ
그래도 최대한 많이.. 그리고 시간을 더 투자하고 최대한 열심히해서 이번에도 좋은 결과를 내야지..!
앞으로도 화이팅 해보자!! 아쟈뵤!
'프로그래밍 > Unreal 부트캠프' 카테고리의 다른 글
TIL 2025.02.17 기록 (0) | 2025.02.17 |
---|---|
TIL 2025.02.14 기록 (0) | 2025.02.14 |
TIL 2025.02.12 기록 (0) | 2025.02.12 |
TIL 2025.02.11 기록 (0) | 2025.02.11 |
TIL 2025.02.10 기록 (0) | 2025.02.10 |