본문 바로가기

언리얼게임프로젝트/슈팅게임 C++

(9)          글쓰기    
UI제작하기 언리얼슈팅게임 C++ 점수와 게임종료에 대한 UI를 제작해보겠습니다.이러한 게임 전반에 관한 관리를 게임모드에서 하는게 좋습니다.Widget는 점수를 표시하는 MainWidget와 게임 종료시 선택할수 있게 하는 MenuWidget 2개를 작성합니다. 부모는 UserWidget으로 합니다.VisualStudio로 위젯을 사용하기 위해 ShootingCPP.Build.cs에 UMG모듈을 추가해줍니다. 그래야 UMG의 기능에 접근할수 있습니다.MainWidget.h를 열고 scoreData 변수를 만들어 줍니다. #pragma once#include "CoreMinimal.h"#include "Blueprint/UserWidget.h"#include "MainWidget.generated.h"/** * */UCLASS()cla..
킬존 Kill Zone 제작하기 C++ 화면 밖으로 나간 총알과 에너미를 제거하기 위해 킬존액터를 만들어 보겠습니다. 플레이어가 바닥으로 내려가지 못하게도 해보겠습니다.먼저 프로젝트 세팅에서 Collision Category에서 프리셋을 KillZone으로 만듭니다.  채널은 만들지 않고 ObjectType을 WorldStatic으로 합니다. Enemy와 Bullet은 Overlap 으로 충돌을 감지하고 Player는 Block으로 충돌시 못움직이게 합니다.Enemy와  Bullet 프리셋도 열어 WorldStatic와 overlap되게 체크해 줍니다.KillZone C++ Class를 언리얼에디터에서 만들고 visual studio로 가서HEAD에 충돌을 감지할 박스컴포넌트 변수를 만들고 UPROPERTY(EditAnywhere) class..
충돌이벤트와 델리게이트 Delegate 키보드가 눌리면 InputAction과 Binding된 함수가 실행되게 했죠. 이런걸 Deligate라고 합니다.이때는 binding될 함수만 만들어 사용하면 되었지만 나중에 처음부터 만들경우 Deligate 매크로를 사용해  Deligate화 하고 바인딩후 실행해야 합니다. (키보드 처리 로직이 선언, Deleifate화, 실행을 해서 안보일뿐이지만) 델리게이트 장점  예를 들어 설명하자면, 애님인스턴스 클래스에서 캐릭터의 콤보 카운트를 전달받아 해당 몽타주 섹션을 재생하고, NextAttackCheck 노티파이가 발생할 때마다 캐릭터에 이를 전달할 델리게이트를 선언하였다고 가정하자. 노티파이 함수에서 이 델리게이트를 호출해주면 애님 인스턴스는 자신의 델리게이트를 사용하는 객체(캐릭터)가 어떤 것인지 ..
Ureal C++ Collision처리 블루프린트 슈팅개발시 했던것처럼 프로젝트세팅 콜리젼에 Player, Enemy, Bullet New Object 채널을 생성합니다. 기본 응답은 Ignore로 합니다.2025.03.10 - [게임프로젝트/슈팅게임 블루프린트] - 충돌처리 Collision 충돌처리 Collision액터들의 충돌처리를 해줍니다.BP_Bullet을 열고 Box Collision을 추가하고 root로 해줍니다. Shape Extent를 조정해 박스를 싸줍니다. BP_Enemy를 열고 역시 BoxCollisoin을 추가하고 루트로 만들고 사이즈롤 설unreal6.tistory.com오브젝트 채널을 블루프린트에서 지정하지 않고 코드에서 구현해보겠습니다.프로젝트 Config폴더안 DefaultEngine.ini을 ECC_로 검색해보..
EnemyActor Factory 생성하기 Spawn EnemyActor Class를 만들어 속성을 정의했지만 누군가 만들어 줘야 합니다.EnemyFactory라는 Class를 만들어 관리하게 하겠습니다.Unreal Editor에서 EnemyFactory Class를 Actor를 부모로 만듭니다.EnemyActor를 생성할 타이머를 만들기 위해 변수2개를 헤더에 만듭니다. UPROPERTY(EditAnywhere) float delayTime = 2.0f;private: float currentTime = 0.0f;EnemyFactory.cpp Tick()에서 타이머를 구현해줍니다.void AEnemyFactory::Tick(float DeltaTime){ Super::Tick(DeltaTime); if (currentTime > delayTime) { ..
Unreal Shooting Game C++ EnemyActor Actor 를 부모로 C++ 클래스를 Public으로 만들자header public:부분에 콜라이더와 스태틱매시 컴포넌트 변수 선언public: UPROPERTY(EditAnywhere) class UBoxComponent* boxComp; UPROPERTY(EditAnywhere) class UStaticMeshComponent* meshComp;EnemyActor.cpp에서 헤드파일을 추가하고 생성자에서 박스컴포넌트와, 스태틱메시컴포넌트 오브젝트를 만들어 연결해줍니다.#include "Components/BoxComponent.h"AEnemyActor::AEnemyActor(){ // Set this actor to call Tick() every frame. You can turn this of..
Unreal Shooting Game bullet 총알제작 USoundBase 총알은 입력을 받을 필요가 없으므로 Pawn이 아닌 Actor를 부모로 제작합니다. 이름은 Bullet으로 정합니다.헤더에서 public:밑에 변수를 추가컴포넌트를 생성 연결해줍니다.ABullet::ABullet(){ // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; boxComp = CreateDefaultSubobject(TEXT("BoxCollider")); SetRootComponent(boxComp); meshComp = CreateDefaultSubobject(TEXT("S..
Unreal C++ 플레이어 제작하기 플레이어 클래스 제작Pawn으로 C++클래스를 만듭니다. public을 선택하고 이름은 PlayerPawn으로 합니다.C++폴더가 있으니 우클릭을 하고 만들어 봅니다.Visual Studio로 이동합니다. 모두 다시 수정을 누릅니다.플레이어에 충돌체  컴포넌트를 추가해 보겠습니다. PlayerPawn.h로 이동하고 Class 맨아래 public:안에 다음 코드를 추가boxComp는 단순히 UBoxComponent의 인스턴스의 주소를 담을 변수입니다.  UPROPERTY(EditAnywhere) class UBoxComponent* boxComp; PlayerPawn.cpp로 이동해서 UBoxComponent의 인스턴스를 만들어 연결해 줍니다.헤더도 인클루드 해줍니다. 오타가 없다면 코드의 UBoxComp..
Unreal Shooting C++ 프로젝트, 게임모드, Orthographic 인생언리얼 1권에 있는 슈팅게임 제작을 따라해 보왔다.  일단 블랜크 템플렛을 선택 C++을 선택 ShootingCPP로 이름 지었다. 사실 C++을 선택 안해도 상관없다 하지만 교재를 따라하기 위해서는 ProjectName이 똑같은게 좋다.인생언리얼에 C++을 사용할경우 빌드방법이나 간단한 설명이 잘되어 있다 꼭 읽어보시길 바란다.레벨을 Empty로  만들고 바로 저장하자 Maps 폴더를 만들고 저장하자 교재는 ShootingMap이라는데 난 LV_Shooting이라고 했다.프로젝트세팅을 열고  기본 맵으로 등록하자GameModeBase클래스 만들기 교재는 C++폴더로 들어가 클래스를 만들라고 했는데 안보여서 위쪽 Tools 툴바를 클릭해 만들었다 게임모드베이스를 선택하고꼭  Public을 선택후 이름..