C++ 4번 과제
AlchemyWorkshop 클래스 안에 recipeManager, stockManager 클래스 이렇게 가지고 있을 경우 -> 각 객체들 함수들 접근하기 위해 AlchemyWorkshop 자체에도 동일한 이름의 함수 필요.
void addRecipe(const std::string& name, const std::vector<std::string>& ingredients)
{
recipeManager.addRecipe(name, ingredients);
stockManager.initializeStock(name);
}
- 이런 식으로.
한 동작에 여러 가지 함수 불러올 수 있다는 건 좋긴 함.
map 선언: std::map<std::string, int> potionStock;
range-for 문 활용 하면 사이즈에 대해 확신할 수 없는 컨테이너들 프린트하기 편함
for (const PotionRecipe& recipe : ingredientSearchRecipes)
std::cin.ignore(10000, '\n'); 이렇게 입력값을 지우는 건
std::getline(std::cin, name); 처럼 getline 쓸 때, string 값 받을 때 필요하지 int 값 받을 땐 굳이 필요없다. 그 대신 if(std::cin() = fail()) 후 std::cin.ignore(10000, '\n'); 쓰면 됨
- 평소에
void 로 쓰던 함수들 성공/실패 여부를 함수 밖에서 판별해서 사용할 때 bool retrievePotion() 마냥 써도 된다.
if 문에 넣든 return 값에 넣든 기본적으로 함수 호출되는 순간 내부 작동(변수 수정 등등) 다 작동하니까 void 함수랑 거의 동일하게 사용해도 됨.
C++/Unreal 5번 과제
- 드디어 Unreal C++ 시작. 외워야 할 문법이 너무 많다.
기억해야 할 문법
#include "Engine/Engine.h" cpp쪽에 넣기
GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Red, TEXT("내용"));
블루프린트에서 했었던 print string 하는 거. -1 부터 순서대로 메시지 키, 메시지 지속시간(float), 메시지 색, 내용
- GEngine은 포인터라 원래
nullptr 인지 제대로 불러와져 있는지 확인하고 써야 함. 본문에선 if(GEngine){} 안에 넣는 식으로 해결. 자주 쓰려면 따로 함수 만들어서 포인터 확인 제대로 해주는 게 필요.
-1 부분은 메시지 키. 1, 2, 3... 순서 등록된 건 같은 메시지 키를 가진 화면에 표시되는 메시지를 매번 갱신하면서 띄워준다. -1은 매번 새로운 메시지를 등록하는 것.
UE_Log(LogTemp,Warning, TEXT("내용")); 이건 output에 나오는 로그.
- 온스크린이든 로그든, 변수 출력은 C때랑 비슷하게
TEXT("") 에서 "" 안에는 %f, %d, %s 식으로 해두고 ") 뒤에 변수명들 입력하는 식으로 가능.
OnScreenDebugMessage는 TEXT 대신 FString::Printf(TEXT("")) 씀
FVector는 고대로 자료형처럼 써도 된다. FVector ActorLocation = GetActorLocation();
FVector(myX,myY,myZ);
GetActorLocation()+myFVector 식으로도 가능
FVector::Dist(A,b): 거리계산
FRotator() -> 이거 Rotation 계산할 때.
- 랜덤:
FMath::RandRange(시작값,끝값); OR 'FMath::FRand();
GetActorLocation(), GetActorRotation(), SetActorLocation() 등등은 블루프린트때랑 비슷하게 쓴다.