Unreal - 플레이어 리스폰
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
플레이어의 리스폰을 만들어보겠습니다먼저 리스폰하는 함수가 존재하는 위치는 플레이어가 사용하고있는 플레이어컨트롤러입니다Revive함수와 스폰시킬 캐릭터참조할 TSubClassOf를 선언UFUNCTION()void RevivePlayer(ASwordCharacter* dyingCharacter);UPROPERTY(EditAnywhere, Category = "Respawn")TSubclassOf respawnCharacterClass; 죽을 캐릭터를 매개변수로 받아 위치를 구하고 빙의해제 (Unpossess) -> Destroy -> 새로운캐릭터 Spawn -> Possess 순서로 진행합니다플레이어가 죽은 위치에서 스폰하게되면 콜리전에 겹치게되면 스폰하지않을경우가 있는데SpawnCollisionHandle..
상수에 줄 바꿈 문자가 있습니다 (한글깨짐) 오류 해결하기
·
Unreal 디버깅
해당 함수처럼 한글 을 사용하게되면 상수에 줄 바꿈 문자가 있습니다 라는 에러가뜹니다 VisualStudio에서 한글을 사용하고있는 cpp파일에서 다른이름으로 저장을 합니다 ->인코딩하여 저장 유니코드(서명 있는 UTF-8)로 변경합니다 해당 설정을 모든 코드에 일괄 적용하겠습니다 솔루션파일 자체를 우클릭합니다새 EditConfig(intelliCode)를 누르고 저장합니다 해당위치로 폴더를 엽니다.editorconfig 파일을 메모장으로 열어줍니다 해당코드를 추가해줍니다[*]charset = utf-8-bom VisualStudio를 종료후 재실행하면 더이상 한글이 깨지거나 해당 에러가 나오지않습니다 --수정완료!!--
Unreal - 던전진행도 위젯 만들기 (스칼라 파라미터 조절하기)
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
던전이 진행하면서 던전의 현 진행도를 나타내는 위젯을 만들어보겠습니다던전의 진행도는 AI가 잡은 마리수에 비례하여 0 부터 100% 비율을 나타냅니다둥근 메테리얼을 만들고 메테리얼 인스턴스를 만듭니다 Percentage라는 ScalarParameter값을 코드에서 수정해보겠습니다 c++에서 scalarParameter값을 수정하기위해서는 build.cs의 파일의 수정이 필요합니다Build.cs파일에 해당 모듈을 추가해줍니다"Slate", "SlateCore" 먼저 위젯을 띄우겠습니다UPROPERTY(EditAnywhere, Category = "Percent")TSubclassOf percentWidgetAsset;class UDungeonClearPercentWidget* percentWidget;UF..
Unreal - 자동 흡수되는 확률형 드롭 아이템 만들기
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
적을 죽이면 스폰되는 아이템을 만들고싶습니다드랍되는 종류는 총 3가지1. 재화 ( 100 % )2. 장비 ( 25% )3. 포션 ( 50% ) 아이템의 부모가 될 C++클래스를 생성후 콜리전 그리고 메시를 할당해줍니다ADropActor::ADropActor(){ PrimaryActorTick.bCanEverTick = true; sceneComp = CreateDefaultSubobject(TEXT("SceneComp")); RootComponent = sceneComp; sphereComp = CreateDefaultSubobject(TEXT("SphereComp")); sphereComp->SetupAttachment(RootComponent); meshComp = CreateDefaultSubobj..
Unrela - 시퀀스 만들기 (AI편)
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
3번째 던전에서 일정이상 AI를 잡게되면 카운팅을 누적해서 마지막 강한 몬스터가 나오기전에벽이 부숴지는 연출이 나오고 그 안에서 AI가 걸어나오는 연출을 해보도록 하겠습니다 우선 벽이 쉽게 부숴지지않게 Damage Threshold(데미지한계치) 를 올려놓은 상태입니다 기본으로 벽의 콜리전 세팅을 해줍니다 Pawn과 WorldDynamic에 블록 판정을 하여 플레이어가 벽이 부숴지기전에 지나갈수 없도록 합니다 사용할 벽 블루프린트를 만듭니다 사용할 마스터필드 블루프린트를 만듭니다 Chaos Distruction으로 만든 벽 블루프린트를 설치하고 앵커필드를 설치해줍니다 설치한 벽면에 앵커필드를 할당해줍니다 마스터필드액터를 스폰하는 함수입니다AdjustIfPossibleButAlwaysSpawn으로 스폰할..
BehaviorTree 단순 좌표 이동
·
Unreal 팁
ㅇBehaviorTree에서 AI의 단순한 좌표이동을 만들어보겠습니다특정 위치로 이동하면서 Offset을 주어 해당 좌표의 랜덤위치를 살짝 더해서 좌표를 구해보겠습니다오프셋이 더해진 특정 Vector로 이동을 하고 그 위치로 이동을 하면 다른행동을 하도록 해보겠습니다좌측에서 위치로 이동한뒤우측으로 신호를 보내보겠습니다 사용할 Bool Key 그리고 Vector Key를 사용하고있는 BlackBoard에서 만들어주겠습니다 BT_Task를 만들어줍니다UCLASS()class BLASTERDREAM_API UTask_BossAISetPosition : public UBTTask_BlackboardBase{ GENERATED_BODY()public: UTask_BossAISetPosition(); virtual..
Unreal - 부숴지는 벽 만들기 (Chaos Distruction)
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
부숴지는 벽 연출을 위해 Chaos Distruction 기능을 사용해보겠습니다 부숴질 벽을 하나 만들어주겠습니다부술 벽액터를 클릭하고 선택모드에서 Fracture Mode를 켜줍니다신규를 눌러 새로만들기를 해줍니다 클러스터로 모양을 부숴줍니다 Fracture 하면 모양이 부숴집니다앰플리튜드(진폭)을 설정해 옆면의표면을 까끌까끌하게 만들어주겠습니다 파열값을 늘리거나 줄이면 미리 단면을 확인해볼수 있습니다 부숴지는 조각이 너무 큰거같습니다 큰 객체는 한번더 Fracture를 해줍니다 디테일창에서 color을 검색해 본 컬러 표시를 off 해줍니다 해당벽을 설치만 해도 부숴집니다 Damage Threshold(데미지한계치) 수치를 올려줍니다 더이상 알아서 부숴지지않습니다 중앙을 기점으로 마스터필드로 벽면을 ..
Unrela - 시퀀스 만들기 (캐릭터편)
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
첫 던전을 입장할때 캐릭터 옆부터 앞을 비추다가 다시 원래시점으로 돌아가는 연출을 내고싶었습니다시퀀스를 사용해보겠습니다시네 카메라를 설치합니다 설치된 시네카메라를 클릭후 파일럿버튼을 누르면 카메라 시점으로 움직이게 설정할수있습니다좌측 상단의 화살표 모양을 누르면 다시 돌아갈수있습니다 필름백에서 카메라의 종류를 선택할수있습니다잘모르겠다면 DSLR 또는 디지털필름을 사용해주세요 크롭세팅입니다화면을 비율에 맞춰 잘라줍니다화면비가 대부분 16:9이니 1.77으로 설정 초점거리가 낮을수록 넓게볼수 있습니다 원하는 위치에 시네카메라를 만든뒤 배치합니다 시퀀스를 추가후 저장해줍니다 레벨 시퀀스를 추가하면 프레임을 설정해줍니다 사용하고있는 시네카메라를 드래그앤드랍을 해서 카메라를 추가합니다 위치를 잡아주시고 키를 찍어..
Unreal - 레벨이동시 게임저장, 로드하기 (Save Game)
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
맵을 이동할시 변수들이 초기화되서 분명 hp, mp, 재화수치들 등등변수값들이 맵을 이동했을때 초기화가 되는 현상이 있습니다OpenLevel을 사용하여 맵이 새로 열리면 원래있던 객체는 전부 Destroy되고 전부 새로 스폰되기떄문입니다 이럴떄는 Unreal엔진에서 제공해주는 SaveGameAPI 를 사용하시면됩니다 먼저 SaveGame을 상속받아 C++클래스를 생성해줍니다(ProjectSaveGame이라고 이름을 지정해줬습니다) SaveGame이란 게임을 저장할 "틀" 이라고 생각하시면 되겠습니다여기서 매우중요한점은 UPROPERTY를 반드시 사용 해야만 데이터가 저장됩니다 SaveGame을 상속받은 C++의 .h에서 저장할 변수값과세이브 데이터를 식별하기 위한 필수 인자인FString 슬롯 이름 과 ..
플레이어를 바라보는 모션워핑 버그수정
·
Unreal 디버깅
AI몬스터가 크기가 커질경우 플레이어가 밑에 있으니플레이어를 향해 모션워핑을 할경우 밑을 향한채로 루트모션이 회전해버리니 ai가 땅에 박혀버리는 현상이 일어났다 수정전코드void ABasicSkeletonEnemy::MotionWarpingPlayer(){ FVector playerLocation = aiController->GetBlackboardComponent()->GetValueAsVector(TEXT("PlayerLocation")); if (motionWarpComponent) { FVector enemyLocation = GetActorLocation(); FVector playerDirection = playerLocation - enemyLocation; FRotator playe..