UE5

    소켓 실습

    소켓 실습

    소켓 => RPG게임 무기변경 * 구현 1.BPCharacter::Mesh->Skeletal Mesh->Hand_l에 소켓추가 => 코드상에서 찾아서 매쉬 추가가능 2.캐릭터->생성자 //1. hand_l_socket을 찾아옴 FName WeaponSocket(TEXT("hand_l_socket")); if (GetMesh()->DoesSocketExist(WeaponSocket)) { //3.무기 만들어줌 Weapon = CreateDefaultSubobject(TEXT("WEAPON")); //2.경로에가서 매쉬찾아옴, SW에 저장 static ConstructorHelpers::FObjectFinderSW(TEXT("StaticMesh'/Game/ParagonGreystone/FX/Meshes/He..

    충돌 기초

    충돌 기초

    * 콜리전 반응 종류 무시: 충돌X 겹침 : 충돌O, 지나가짐O ex)메이플 포탈 불록 : 충돌O, 지나가짐X * 충돌 구현 3. Preset에서 위부터 각각 MyCharacter를 Pawn 설정과 동일하게 설정. 4.BP_Mycharacter::캡슐::콜리전= MyCharacter 5.컴파일, 저장 * Attack 충돌시 할일 구현 1.엔진-콜리전-새 트레이스채널=Attack 추가 2.애님인스턴스에 변수추가 DECLARE_MULTICAST_DELEGATE(FOnAttackHit); public: FOnAttackHit OnAttackHit; 3. 브로드캐스트 때리기(리스너 패턴) Broadcast(c:소문자) void UMyAnimInstance::AnimNotify_AttackHit() { //UE_..

    블렌드 스페이스

    블렌드 스페이스

    * 블렌드 스페이스 기존 : 앞으로가는 애니메이션만 존재, 좌로걸을떄, 뒤로걸을떄??? 해결1 : if-else 중첩.. (-) 복잡 해결2: 블렌드 스페이스 => 여러 애니메이션 합치기. 여러 애니메이션 구분 편하게 - 구현 1. 애니메이선::블렌드스페이스 생성 (이름:BS_Move) 2. Horizontal, Vertical 이름설정 3.Left,Right,Up,Down 애니메이션 하얀점 위치에 넣기 && 값범위설정(-1~1) 4. 애니메이션블루프린트::Speed>0 포즈교체 5.캐릭터::새변수 => 움직일때 Value 저장 =>애님인스턴스에서 사용 => BP에 전달 void AMyCharacter::UpDown(float Value) { //if (Value == 0.f) return; //UE_L..

    애니메이션 노티파이

    애니메이션 노티파이

    * 애니메이션 노티파이 : ex) 칼을 휘두룰때 특정 시점에 소리가나도록 directX : 시간을 재면서 특정시간경과 -> 소리재생 ... 언리얼 : 노티파이 => 알림을 보내는 방식 * 구현 1. 몽타주 블루프린트 :: 새 노티파이를 소리재생원하는 위치에 두기 2. 애님인스턴스 :: 함수추가, 할일추가(사운드, 로그 ...) private: UFUNCTION() void AnimNotify_AttackHit(); 함수이름을 맞춰줘야함. AnimNotify_내가정한 노티파이이름() void UMyAnimInstance::AnimNotify_AttackHit() { UE_LOG(LogTemp, Log, TEXT("AnimNotify_AttackHit")); } * 몽타주를 평타모션3개로 나눠 순차실행 구현..

    델레게이트

    * 델레게이트 : 함수가 끝날때 호출되는 함수 기존코드 : 캐릭터::Attack함수에서 애님인스턴스를 찾아, 애님인스턴스에서 몽타주를 실행 (-) : 느림. 반복적. 불필요. 성능down 개선 : 캐릭터에 IsAttatking 맴버변수, 공격중일때는 바로리턴 => 불필요호출X 델레게이트 => Attack함수 끝나면 isAttaking을 false로. - 구현 1. 애님인스턴스 호출전에 IsAttacking 검사 void AMyCharacter::Attack() { //델레게이트 if (IsAttaking) return; Animinstance->PlayAttackMontage(); } 2. 몽타주가끝나면 OnAttackMontageEnded함수를 실행하라. UFUNCTION() void OnAttackM..

    애니메이션 몽타주

    애니메이션 몽타주

    * 몽타주 : 기존애니메이션 조합 => new 애니메이션 만들기 1.매쉬더블클릭-에셋생성-애님 몽타주 2.애니메이션 끌어서넣기. 조합하기 to defaultslot * 좌클릭-> 3단공격 구현 1. Mycharacter에 바인딩 // Called to bind functionality to input void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); PlayerInputComponent->BindAction(TEXT("Jump"), EInputEvent::IE_Pressed, this, &AMyChara..

    스테이트 머신

    스테이트 머신

    목적 : 점프, 슬라이딩, 피격, 아이들 ... 등 수많은 애니메이션 정상출력 기존방법 : if else 사용 중첩, 반복 => (-)로직이 꼬임 ex) 슬라이딩중 피격되면??? 개선 : 스테이트 머신 (하나의 상태를 두고 관리) * 점프 구현 1. MyCharacter에서 jump (매핑될이름,조건(IE_Pressed == 눌린상태면) ,실행할 함수) 2. 엔진설정에서도 추가해주기 // Called to bind functionality to input void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);..

    애니메이션 기초

    애니메이션 기초

    Mycharacter::Mesh에서 플레이할 애니메이션 설정 MyAnimInstance에서 애니메이션 관리 * 작업구조 cpp-상속받은 블루프린트 ex) MyAnimInsatnce.cpp ---상속받은 ABP_MyAnim float speed => 애니메이션 분기 ※ 코드작성후 저장만으로 반영X 엔진에서 컴파일 해야함 speed>0 ? then jmp else idel을 BP로 구현 * 값 전달 방법 1. MyCharacter에서 애니메이션의 speed를 얻어와서 조작한다. (-) 코드가 많아지면 겹쳐서 스피드를 조작할 가능성 => 버그를 찾기 어려움 -> 개선 : 애니메이션에서 플레이어의 정보를 얻어와서 관리함. ex)매 프레임마다 멤버변수 Speed = Pawn->GetVelocituy().Size(..