전체 글 403

[Portfolio] Boss 엔딩 시네마틱

https://youtu.be/a0a7xGnURZE 진행중인 작업 - 사운드 작업 진행 예정 작업 - 기술문서 작성 및 영상제작 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현 - 검기 Trail, Particle 적용 - DualSword Slash Skill 구현 - Enemy의 KnockDown Hit 구현 - Hit Partic..

[UE4] 활시위(Bow String) 당기기 : Set/GetBoneLocationByName

활을 쏠 때 활시위를 당겼다 놓는 디테일 작업을 수행해보았다. 🏹 Bow Mesh 소켓 추가 활시위를 조절하기 위해, 가장 먼저 필요한 것은 활 Skeletal Mesh에 활시위 소켓을 생성하는 것이다. 💻 DoAction_Bow 클래스 활을 쏘기 위해 생성했던 DoAction_Bow 클래스에서 BeginPlay 함수 호출 시 활 Mesh인 Poseable Mesh를 초기화하고, 활시위의 본래 위치를 변수(OriginLocation)에 저장해주었다. 이후, 활시위는 DoAction_Bow 클래스의 Tick 함수에서 조절된다. 활시위를 조절하기 전에, 활시위를 움직여도 되는 상태인지 확인하기 위해 무기 장착 상태인지(bEndEquip), 공격중인지(bBeginAction), 활시위가 붙어도 되는지(bAtt..

🎮Unreal4/C++ 2023.06.19

[알고리즘] 브루트 포스(Brute Force) 문제 판별법

브루트 포스 알고리즘은 단어 그대로 Brute (무식한), Force (힘) 를 해석하여 무식하게 모든 경우의 수를 비교하여 해답을 찾는 알고리즘이다. 전체를 탐색한다는 의미에서 전체 탐색, 완전 탐색이라고도 한다. 모든 경우를 계산하기 때문에 단순히 모든 경우의 수를 비교하는 알고리즘을 설계하고 구현하기에 비교적 쉽고, 복잡한 알고리즘 없이 빠르게 구현할 수 있다. 또한 강력한 장점은 어떤 경우에도 예외 없이 100%의 확률로 정답만을 출력할 수 있는 점이다. 그러나, 모든 경우의 수를 연산하는 만큼 알고리즘 실행 시간이 매우 오래 걸리고, 메모리 효율면에서도 매우 비효율적이며 계산 비용이 높다. 따라서 문제를 파악할 때 브루트포스 알고리즘으로 풀이할 수 있는지를 판단해야 하는데, 이는 입력값(N)과 ..

[UE4] Arrow 생성/발사 : UProjectileMovementComponent, Attach/Detach

화살 발사를 위해 Projectile 클래스를 생성하고, 해당 클래스를 통한 화살을 생성해보았다. 🏹 Projectile 클래스 생성 : Arrow Projectile 클래스에는 충돌 후의 생명주기를 설정할 LifeSpanAfterCollision 변수와, Capsule 컴포넌트, Projectile 컴포넌트가 있다. 화살같은 객체를 만들기 위해선 Static Mesh도 필요한데, 이러한 부분은 Projectile 기반 블루프린트 클래스를 제작하여 커스텀하도록 따로 추가하지 않았다. 추가적으로, 프로젝타일이 충돌됐을 때 호출되는 FProjectileHit 델리게이트와 수행이 끝나고 난 뒤 Destroy 처리를 위한 FProjectileEndPlay 델리게이트를 생성해주었다. 생성자에선 각 컴포넌트를 초기..

🎮Unreal4/C++ 2023.06.17

[백준/C++] 1149번 : RGB거리 (DP연습)

RGB거리 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,..

[UE4] Bow AimOffset, 본마다 레이어로 블렌딩, Camera Pitch 각도제한

활 무기를 들고, 에임 상태가 됐을 때 조준하는 애니메이션을 출력하도록 Aim Offset을 제작하고 적용해보았다. 💻 CAnimInstance 클래스 수정 먼저 Aim상태인지 아닌지에 따라 애니메이션이 달라지기 때문에, AnimInstance 클래스에 Aim 상태인지를 판별하기 위한 bAim_Bow 변수를 추가하였다. Cpp 클래스의 Update 함수에서는 WeaponComponent가 존재할 때, SubAction_Aiming 클래스의 bAiming 변수를 계속해서 불러와 AnimInstance에서도 Aim 상태를 확인할 수 있도록 하였다. 🦾 Animation Blueprint 수정 : ABP_Character 기존에는 활을 들고 움직이는 Bow BlendSpace만 연결해 둔 상태였다. 먼저, C..

🎮Unreal4/C++ 2023.06.15

[UE4] 활(Bow) 장착/해제, Aim 기능 : UCurveFloat, FTimeline, FOnTimelineFloat

🏹 활 (Bow) 생성 활(Bow) 무기를 구현하기 위해 CAttachment_Bow 클래스를 작성하였다. 부모인 CAttachment 클래스는 무기의 최상위 클래스이다. 활을 쏠 때마다 활시위(string) 부분이 움직여지기 때문에 활 메시는 PoseableMeshComponent 를 이용하여 초기화한다. 활 애셋을 이용해 Mesh를 초기화 해 주었고, 무기 장착/해제 시 Socket에 활을 Attach하였다. 컴파일 후 DataAsset에 Attachment_Bow를 설정하면, 위와 같이 성공적으로 Bow가 붙고, 장착/해제 되는것을 볼 수 있다. 🏹 Bow Aiming 기능 마우스 오른쪽 버튼을 통해 에임을 맞추는 SubAction을 구현해보았다. 에임을 맞추는 상태에서는 카메라가 플레이어쪽으로 확..

🎮Unreal4/C++ 2023.06.14

[UE4] SubAction - Niagara Thorn 스킬 : SetNiagaraVariableObject, BoxExtent, ReceiveParticleData_Implementation

뾰족한 고드름 나이아가라를 수정하여 하늘에서 고드름을 여러 개 떨어뜨려 Enemy를 공격하는 스킬을 구현해보았다. 고드름같은 가시 객체는 CThornObject 클래스를 통해 제작해주었다. 💻CThornObject 클래스 가시 객체에는 충돌체의 크기를 구하기 위한 Static Mesh와, Mesh를 회전시킬 방향(NiagaraMeshRotation), 충돌 시 나타날 Effect, 충돌 Effect의 Transform의 속성을 지정해주었고, Root 컴포넌트 아래 Niagara 컴포넌트를 배치시켜주었다. ThornObject의 생성자에선 컴포넌트를 생성한 뒤, BeginPlay 함수에서는 Niagara의 OnSystemFinished 델리게이트를 등록해주었다. SetNiagaraVariableObject..

🎮Unreal4/C++ 2023.06.13

[UE4] Around 공격 : Character 주변을 회전하는 Object (Fire/Ice Ball, RotateAngleAxis)

Fire Ball이나 Ice Ball이 플레이어의 주변을 돌면서 Enemy를 공격하는 Around 무기를 제작해보았다. 📖 CDoAction_Around 클래스 먼저, Around라는 이름의 공격 클래스 CDoAction_Around를 제작하고, 플레이어 주변을 회전할 객체 CRotate_Object 클래스도 생성해주었다. 📖 CRotate_Object 클래스 CRotate_Object 클래스에는 Object에 충돌했을 때 캐릭터에게 들어갈 HitData와, 회전 속도(Speed), 플레이어로부터의 거리(Distance), 역방향으로 회전할 것인지(bNegative), 데미지 처리 간격(DamageInterval) 속성값이 존재하고, 컴포넌트로는 Capsule Component와 Particle이 존재한..

🎮Unreal4/C++ 2023.06.13

[백준/C++] 2579번 : 계단 오르기 - DP/점화식 연습

계단 오르기 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다. 마지막 도착 계단은 반드시 밟아야 한다. 따라서 첫 ..

[백준/C++] 1003번 : 피보나치 함수 - 0과 1의 횟수 출력

피보나치 함수 문제 다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다. int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다. fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다. 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다. fibona..

[백준/C++] 24416번 : 피보나치 수 - 재귀함수/DP 실행 횟수 출력하기

알고리즘 수업 - 피보나치 수 1 문제 오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 오늘은 n의 피보나치 수를 재귀호출과 동적 프로그래밍으로 구하는 알고리즘을 배웠다. 재귀호출에 비해 동적 프로그래밍이 얼마나 빠른지 확인해 보자. 아래 의사 코드를 이용하여 n의 피보나치 수를 구할 경우 코드1 코드2 실행 횟수를 출력하자. 피보나치 수 재귀호출 의사 코드는 다음과 같다. fib(n) { if (n = 1 or n = 2) then return 1; # 코드1 else return (fib(n - 1) + fib(n - 2)); } 피보나치 수 동적 프로그래밍 의사 코드는 다음과 같다. fibonacci(n) { f[1]

728x90