VOD 숙제
자동문 만들기
문 블루프린트에 Box Collision 컴포넌트로 캐릭터가 문 앞에 다가왔을때 트리거될 영역을 만들어준다.
시작시에 현재 위치 값을 담을 StartLocation 과 얼만큼 이동할지에 대한 TargetLocation 을 설정해준다.
문 블루프린트에 Box Collision 컴포넌트로 캐릭터가 문 앞에 다가왔을때 트리거될 영역을 만들어준다.
시작시에 현재 위치 값을 담을 StartLocation 과 얼만큼 이동할지에 대한 TargetLocation 을 설정해준다.
요구사항
Fab 사이트는 언리얼 엔진에서 사용할 수 있는 3D 모델, Materials, 애니메이션, 사운드, 블루프린트 등의 애셋들을 다양한 콘텐츠를 구매하거나 무료로 다운받아 프로젝트에 사용할 수 있다.
호환(지원)되는 버전을 잘 보고 다운로드를 해야한다.
2주에 한번 혹은 한달에 한번 유료 애셋을 무료로 기한 한정으로 배포하니 자주 확인하자
이번 첫 팀 프로젝트에서 발표를 맡게되었는데, 발표를 하기 전부터 엄청난 긴장감을 가진 상태로 발표를 했다. 팀원분들께서는 발표 잘했다고 칭찬과 격려를 많이 해주셔서 너무나도 감사했다.
발표 이후 손튜터님께서 피드백(질문)을 해주셨는데 긴장을 너무 한 탓에 내가 뭐라고 답변했는지 기억이 잘 안난다.. ㅎㅎ
다음과 같이 튜터님께서 질문을 여러가지 해주셨는데 긴장이 풀린 지금 다시 한 번 튜터님의 질문에 대한 답을 드리고자 정리하려한다.
오늘의 TIL은 첫 팀 프로젝트를 발표 준비를 해야하여.. 바빠서 TIL 작성을.... 미루기로했다...
TRPG 팀프로젝트에 사운드 기능을 추가하려 했다.
#include <windows.h>
PlaySound(TEXT("sound.wav"), NULL, SND_FILENAME | SND_ASYNC);
상점(구매/판매) 기능을 구현했다.
구매는 "구매 가능한 아이템 리스트 출력 → 보유 골드 출력 → 아이템 선택 → 골드가 충분하면 차감 후 인벤토리에 추가"
판매는 "내 인벤토리 리스트 출력 → 판매할 아이템/개수 선택 → 아이템 가격의 60%만큼 골드 획득, 인벤토리에서 차감"
// ShopManager.h
#pragma once
#include <vector>
#include "Inventory.h"
#include "RpgLogger.h"
extern Inventory* inventory;
extern RpgLogger rpgLogger;
class ShopManager
{
public:
// 유저에게 아이템 구매 할건지 판매 할건지
// 구매 -> 구매 가능한 리스트 출력 -> 내가 보유중인 골드 출력
// -> 어떤 아이템을 구매할지 선택 -> 충분한 골드가 있다면 골드 차감 후 인벤토리에 추가
// 판매 -> 내 인벤토리 리스트 출력 -> 어떤 것을 판매할 것 인지 선택 -> 몇 개 판매할 것인지 선택
// 아이템 가격의 60%만큼 플레이어 골드 추가, 인벤토리에서 차감
// 구매 가능한 리스트 출력
void ShowBuyableList() const;
// 구매 가능한 아이템 ID 목록 (ShowBuyableList와 동일한 순서)
std::vector<EItemID> GetBuyableItemIDs() const;
// 아이템 구매
void BuyItem(const ItemData& item, int count) const;
// 판매 가능한 리스트 출력
void ShowSellableList() const;
// 판매 가능한 아이템 ID 목록 (ShowSellableList와 동일한 순서)
std::vector<EItemID> GetSellableItemIDs() const;
// 아이템 판매
void SellItem(const ItemData& item, int count) const;
private:
};
오늘은 어제 만들었던 RpgLogger의 임시 코드를 제거하고 실제 Monster의 EMontserID를 연결해주었다. 단순 연결이라 달리 할 건 없었다.
이후 회의를 하여 전체적인 흐름도를 만들었다.
나는 도전 기능인 상점을 추가로 담당하기로 했다. 자세한 설계, 구현은 내일!
긴 시간 동안 팀 회의로 컨벤션 및 클래스 설계를 진행했다.
내가 맡기로한 레벨업 기능이 플레이어로 합쳐져서 붕 떠버렸기 때문에 남는 단순한 기능인 로그 출력 기능을 맡았다.
// RpgLogger.h
#pragma once
#include <map>
#include <queue>
#include <string>
// 임시로 작성, 추후에 다른 파일에서 가져오기
namespace Test
{
enum class EMonsterID;
extern std::map<EMonsterID, std::string> convertMonsterString;
} // namespace Test
class RpgLogger
{
public:
// Queue에 쌓인 전체 로그 출력
void ShowLogs() const;
// 킬 로그 출력
void ShowKillLogs() const;
// Queue에 로그 추가(10개 까지), 해당 로그 바로 출력
void AddLog(std::string log);
// 몬스터를 처치했을 때 호출, 킬카운트 증가
void OnMonsterKilled(Test::EMonsterID id);
private:
static constexpr size_t MAX_SIZE = 10;
std::queue<std::string> logs;
std::map<Test::EMonsterID, int> killCounts;
};
void TestRpgLogger();