Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HW1: 자동차 모듈 구성 #1

Open
sein519 opened this issue Jun 14, 2020 · 0 comments
Open

HW1: 자동차 모듈 구성 #1

sein519 opened this issue Jun 14, 2020 · 0 comments
Assignees
Labels
good first issue Good for newcomers

Comments

@sein519
Copy link
Member

sein519 commented Jun 14, 2020

C++ 클래스 및 블루프린트 클래스를 활용하여,
부품 교체가 가능한 자동차 모듈 코드를 다음의 명세에 맞추어 구현하여라.

  1. Car 클래스(C++ 클래스)를 생성한다.
  2. CarEngine, CarFrame, CarWheel 클래스 (C++ 클래스)도 생성한다.
  3. 모든 C++ 클래스는 Blueprintable 옵션을 활성화한다.
  4. Car 클래스에서 사용할 engine, frame, wheel을 자유롭게 입력받을 수 있도록 TSubclassOf 멤버변수들을 추가한다. 이들은 모두 UPROPERTY화 한다.
  • 모든 UPROPERTY 변수는 EditAnywhere, BlueprintReadWrite 옵션을 부여하고, Category는 Component로 한다.
  1. CarEngine 클래스에 float 타입의 cc와 hp 변수를 추가하여라.
  • 이들은 각각 엔진의 용량과 마력 수치를 나타낸다.
  • 이들을 UPROPERTY화 하고, EditAnywhere, BlueprintReadWrite 옵션을 부여한다. Category는 Spec으로 한다.
  1. UFrame 클래스에는 FCarMaterial USTRUCTURE를 멤버변수로 추가하여라. Category는 Material로 설정한다.
  • FCarMaterial은 USTRUCTURE 구조체이다.
  • FCarMaterial은 color와 frameMaterialType을 멤버로 가지고 있는 구조체이다. 이들은 모두 UPROPERTY화 하여야 한다.
  • color는 FLinearColor 타입의 변수이다. 이는 블루프린트 상에서 GUI로 색상을 선택할 수 있는 기능을 제공한다.
  • frameMaterialType은 CarFrameMaterialType UENUM이다. 직접 생성하여야 한다.
  • CarFrameMaterialType은 CHROME(Chrome), STEEL(Steel), TITANIUM(Titanium) 3개의 타입을 가진다.
  1. CarWheel 클래스는 float 타입의 radius 멤버 변수를 추가한다. 이또한 UPROPERTY화 한다.
  2. 위에서 만든 클래스를 기반으로 블루프린트 클래스를 만든다. 다음의 명세에 따라 블루프린트 클래스를 만들어라.
  • BP_Engine500cc: Engine 클래스를 상속한 블루프린트 클래스. cc를 500으로, hp를 20으로 설정하여라.
  • BP_Engine3000cc: cc를 3000으로, hp를 100으로 설정하여라.
  • BP_RedFrame: Frame 클래스를 상속한 블루프린트 클래스. 색상은 적당한 붉은색 계열로, frame material은 steel로 설정한다.
  • BP_BlueFrame: 색상은 적당한 파란색 계열로, frame material은 chrome으로 설정한다.
  • BP_BigWheel: Wheel 클래스를 상속한 블루프린트 클래스. radius를 800으로 한다.
  • BP_SmallWheel: radius를 400으로 한다.
  • BP_ExpensiveCar: Car를 상속한 블루프린트 클래스. BP_Engine3000cc, BP_BlueFrame, BP_BigWheel을 장착한다.
  • BP_CheapCar: BP_Engine500cc, BP_RedFrame, BP_SmallWheel을 장착한다.
  1. UCar에 printComponentInfo() const 함수를 추가한다. 이 함수는 현재 설정된 TSubclassOf 멤버변수들로부터 UClass 정보를 읽어 인스턴스를 생성하고 각 인스턴스들의 정보를 log로 출력하는 역할을 수행한다. 아래의 사진을 참고하여라. (출력 수치는 무시할 것.)
    image
  2. 프로젝트 게임모드 모듈(C++ 클래스)에 TSubclassOf를 추가하여 Car 클래스를 자유롭게 입력받을 수 있도록 하여라. UPROPERTY화 하고, Category는 Car로 하여라.
  3. 게임 모드의 BeginPlay() 함수를 오버라이딩하고, 다음과 같이 구현하여라.
AGameModeBase::BeginPlay();

const UClass* const pCarClassRef = *car;
if (pCarClassRef)
{
    UCar *const pCar = NewObject<UCar>(GetTransientPackage(), pCarClassRef);
    pCar->printComponentInfo();
    pCar->ConditionalBeginDestroy();
}
  1. 게임모드의 블루프린트 클래스를 만들고, Car에 BP_ExpensiveCar와 BP_CheapCar를 번걸아가며 입력하고 레벨을 플레이해본다.
    image
  2. 결과를 확인한다.
    image
    image
@sein519 sein519 added the good first issue Good for newcomers label Jun 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants