목록분류 전체보기 (194)
초보 코린이의 성장 일지
https://www.youtube.com/watch?v=_9COOkwDw64 진행 중인 작업 - Skill 구조 다듬기 - Player 스킬 - UI - AI 작업 - 구조 옮기기 진행 예정 작업 - AI 작업 - 구조 적용 진행 완료 작업 - Behavior Tree 적용 - Bow 적용
Enemy에 감지 범위에 객체가 들어왔을때 텔레포트를 사용하여 도망칠 수 있도록 구현해 볼 것이다. 1. 각 Task와 EQS에 설정을 해준다. 1. Behavior 전체적인 노드 구조. #include "BehaviorTree/CBTTaskNode_Equip.h" #include "Global.h" #include "Characters/CEnemy_AI.h" #include "Characters/CAIController.h" #include "Components/CStateComponent.h" #include "Components/CStatusComponent.h" #include "Weapons/CEquipment.h" EBTNodeResult::Type UCBTTaskNode_Equip::Exec..
Eenmy가 Player를 감지하게 되면 Bow를 장착하였다. 이제는 감지 범위에 들어왔을시 장착 후 화살을 날릴 수 있도록 구현을 해 볼 것이다. 여기서 하나 중요한점은 Player가 Bow로 화살을 날릴때 조건이 AimMode인 상태에서만 발사할 수 있도록 설계가 되어있다. Enemy도 동일하게 AimMode를 넣어줄 것이다. 1. BP에서 사용할 수 있도록 BlueprintReadOnly로 해준다. 1. SubAction을 BP에서 부를수 있도록 BlueprintCallable로 해준다.2 2. Pressed, Released도 동일하게 만들어준다. 1. C++내에 있는 함수를 불러다가 BP에서 처리를해 줄 것이다. 1. C++에있는 함수를 사용하게 될 것임으로, 부모를 콜해줘야한다. 2. 키가 눌..
Enemy가 공격하려고 할때, Player가 먼저 공격을 했을 경우 Enemy에 공격모드가 사라져버리는게 아닌, Hit후 일정시간이 지나면 바로 Enemy가 공격 행동을 할 수 있도록 구현해볼 것이다. 간격은 Behavior Tree에 Wait로 1초정도로 줄 것이기 때문에 빠르게 공격하게끔 만들어질 것이다. #pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Weapons/CWeaponStructures.h" #include "CDoAction.generated.h" UCLASS(Abstract) // 객체화 되면 안되므로 Abstract class U2212_06_API UCDoAction : public..
Enemy가 Sowrd를 뽑는 동작시 Hit가되면 무기가 뽑히지 않는 상태로 끝나버리게 된다. 이걸 예외처리를 따로 해줌으로써 해결해 볼 것이다. #include "Components/CMovementComponent.h" #include "Global.h" #include "AIController.h" #include "GameFramework/Character.h" #include "GameFramework/CharacterMovementComponent.h" void UCMovementComponent::Move() { bCanMove = true; } void UCMovementComponent::Stop() { bCanMove = false; AAIController* controller = O..
Behavior Tree를 통해 Enemy Hitted를 구현해 볼 것이다. #pragma once #include "CoreMinimal.h" #include "BehaviorTree/BTTaskNode.h" #include "CBTTaskNode_Hitted.generated.h" UCLASS() class U2212_06_API UCBTTaskNode_Hitted : public UBTTaskNode { GENERATED_BODY() public: UCBTTaskNode_Hitted(); protected: virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; virt..
https://www.youtube.com/watch?v=M6-WO39TL80 진행 중인 작업 - Thorn Skill Overlap 오류 수정 중..... - Skill 구조 다듬기 - Player 스킬 - UI 진행 예정 작업 - Player 스킬 - Player 공중 콤보 - UI 진행 완료 작업 - Thorn Skill 완료
Static 장점 및 설명 - 함수 외부에서 선언된 static 변수를 전역 변수라고 부르며, 생명주기는 프로그램이 시작될 때 생성 및 초기화되고(초기화는 한번만) 종료될때까지 그 상태 그대로 유지된다. 그 이후 종료되면 소멸한다. - 지역 변수에 static을 붙이게 되면 자동 주기에서 정적 주기로 변경된다. - 지역 변수인 static 변수는 함수내에 범위가 종료된 이후에도 해당 값을 유지한다. - 고정된 메모리를 사용하기 때문에 메모리 측면에서 낭비가 덜하므로 효율적일수 있다. - 객체를 생성하지 않고 사용가능 하기 때문에 속도가 빠르다. - 어떠한 타입이든 모든 객체들이 알고 있고 공유할 수 있어야 하는 멤버 변수에 static를 붙인다. - 멤버 변수는 클래스 내에서 선언만 가능하고 정의는 불가..
AI Enemy들이 Equip에 대한 오류가 발생하였다. 이를 해결해주기 위한 방법이 존재한다. 만약 Sword를 Enemy가 장착한다고 가정하고 이야기해 보겠다. WeaponAsset라는 클래스에 Sowrd에 객체 정보와 생성을 동시에 했다면, WeaponAsset는 이제 정보만을 가지고 있고, WeaponData라는 클래스를 하나 더 만들어줘서 이 곳에서 생성을 하게 만들어 준다. 그리고 Player와 Enemy에서 각자 생성을 하게끔 분리해주면 된다. 또한 생성을 해주는 곳에서 다른 클래스들이 접근을 못하게 막아주고, 생성이 완료되면 Friend로 엮여있는 클래스에만 열어주고 return 시켜서 보내주는 방법으로, 생성을 시켜줄 것이다. 1. WeaponAsset에서 위에 보이는 바와 같이 생성 정..
Enemy가 이제 무기를 뽑도록 만들어 볼 것이다. #pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "CWeaponComponent.generated.h" // 무기 타입 UENUM(BlueprintType) enum class EWeaponType : uint8 { Fist, Sword, Hammer, Warp, Around, Bow, Max, }; DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FWeaponTypeChanged, EWeaponType, InPrevType, EWeaponType, InNewType); UCLASS(ClassGroup = (Custo..