Unreal Engine/2. Twin Stick Shooter
2. 캐릭터 클래스 빌드
ljw4104
2021. 9. 17. 16:11
1. C++을 이용한 클래스 생성
헤더 파일 : 모든 기능들을 선언
CPP 파일 : 헤더 파일에서 선언된 기능들을 구현
BaseCharacter.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "BaseCharacter.generated.h"
UCLASS(Blueprintable)
class TWINSTICKSHOOTER_API ABaseCharacter : public ACharacter
{
GENERATED_BODY()
public:
//make health property
//Blueprint가 여기서 읽고 쓸수 있음, 다른 클래스에서 접근 가능, 카테고리 분류
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "BaseCharacter")
float Health = 100;
//isDead property
//Blueprint가 읽을 수만 있음, 어디서든 볼 수 있음
UPROPERTY(BluprintReadOnly, VisibleAnywhere, Category = "BaseCharacter")
bool isDead = false;
//Calclulate death function (helper)
virtual void CalculateDead();
//Calculate health function
//이 함수를 Blueprint Node로 바꿔줌
UFUNCTION(BlueprintCallable, Category = "BaseCharacter")
virtual void CalculateHealth(float Delta);
#if WITH_EDITOR //에디터에서만 적용
//Editor-centric code for changing properties
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
override;
#endif
public:
// Sets default values for this character's properties
ABaseCharacter();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
BaseCharacter.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "BaseCharacter.h"
// Sets default values
ABaseCharacter::ABaseCharacter()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void ABaseCharacter::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ABaseCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// Called to bind functionality to input
void ABaseCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}
//Implement CalculateHealth
void ABaseCharacter::CalculateHealth(float Delta) {
Health += Delta;
CalculateDead();
}
//Implement CalculateDeath
void ABaseCharacter::CalculateDead() {
if (Health <= 0)
isDead = true;
else
isDead = false;
}
//Implement PostEditChangeProperty
#if WITH_EDITOR
void ABaseCharacter::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) {
isDead = false;
Health = 100;
Super::PostEditChangeProperty(PropertyChangedEvent);
CalculateDead();
}
#endif
프로젝트 리로드 후 콘텐츠 브라우저 확인
에러가 발생했다... 빌드 오류인거 같은데 해결이 힘들다
* 해결법
VS에서 컴파일하려고 하지말고 나와서 언리얼에서 상단에 있는 컴파일 버튼을 누르면 잘만된다....
2. Blueprints
1. Blueprints 폴더 생성
2. 캐릭터 클래스 기반 블루프린트 생성
3. 캐릭터 추가하기
- Skeletal Mesh 추가
- 메시를 Capsule Collider에 맞게 조정하기
- 캐릭터를 화살표에 맞게 회전시키기
4. 카메라 설치
Spring Arm Component : 자손 Actor와의 일정한 거리를 유지하도록 해준다.
Spring Arm이 캐릭터의 회전을 따라 회전하지 않도록 체크박스를 모두 해제
카메라는 충돌이 없도록 하게 하기.
=> 셀카봉과 비슷
- Camera Component 추가
- Spring Arm의 자식으로 추가
- 카메라를 캐릭터의 위에서 비추도록 각도 조절
- 거리 조절
- 컴파일 후 저장