전체 글 403

[UE4] 검기 효과 (Trail 노티파이 스테이트, Particle Effect 노티파이)

🔥 검기 효과 🚩 Trail 노티파이 스테이트 해머 무기를 사용할 때 해머를 휘두르는 순간 검기 이펙트가 나오도록 검기 효과를 구현해보았다. 먼저, 공격 애니메이션의 몽타주를 생성하고 해머를 휘두르는 구간동안 검기 노티파이를 생성하였다. 이때 생성되는 검기 노티파이의 이름은 "Trail"이다. 노티파이 트랙의 알맞은 구간에 Trail 노티파이 스테이트를 추가하여 해머가 상대를 향해 휘두르는 구간을 지정하여 설정해주었다. Hammer Start Hammer End 이때 검기가 그려질 시작과 끝 부분을 지정해주어야 하는데, 해당 위치는 플레이어의 Mesh에 위치한 Bone에 소켓을 추가해주었다. 소켓 추가가 끝나면 Trail 노티파이 스테이트를 클릭하여 디테일 창에서 출력할 검기 효과와, First Sock..

[C++] static 멤버, 생성자/파괴자

동적 메모리와 클래스 메모리를 동적으로 제어하기위해 C++는 new와 delete 연산자를 사용한다. static 멤버 static 멤버 변수는 클래스 선언 안에서 초기화할 수 없다. 선언은 단지 메모리를 어떻게 대입할지에 대한 서술일 뿐, 실제로 메모리를 대입하지 않기 때문이다. 그 서술을 사용하여 실제로 객체를 생성해야만 메모리를 대입하고 초기화한다고 볼 수 있다. static 클래스 멤버의 경우에는, 클래스 선언 바깥에서 별개의 구문을 사용하여 static 멤버를 독립적으로 초기화 해야한다. 이는 static 클래스 멤버가 객체의 일부분으로 저장되는 것이 아니라 별도로 저장되기 때문이다. 즉, static 데이터 멤버는 클래스 선언 안에서 선언되지만, 클래스 메서드 파일에서 초기화된다. 생성자/파괴..

📚책읽기 2023.02.03

[BattleProject] Enemy간 전투

https://youtu.be/2U4KDEUCNZk 작업일지 진행중인 작업 (문제점) - 공격중인 타겟이 죽었을 때 추적 범위 내 타겟 재설정 기능 구현 - Enemy 그룹 전투 구현 진행 예정 작업 - 문제점 해결 - 플레이어 방어 구현 - 플레이어 반격 구현 진행 완료 작업 1. 일정 반경 내 플레이어 들어오면 타겟 설정 및 추격 - 추격의 시작과 끝에 따라 Enemy 무기 장착/해제 2. 일정 반경 내 플레이어 들어오면 콤보 공격 - 콤보 공격 중 범위 밖으로 나갈 시 공격 중단 - Enemy 공격 중 플레이어 공격 시 애니메이션 초기화 상태 수정 + 콤보 이어서 공격 - 플레이어와 Enemy의 체력 감소 (데미지) 및 죽음 구현 3. Enemy 그룹 전투 - Enemy 간 공격/죽음 기능 구현

[UE4] 콜리전 중복 충돌 문제, 공격 중 전방의 Target에게 카메라 고정/회전, 가장 전방에 있는 액터 찾기 함수 작성

💥 콜리전 중복 충돌 문제 Enemy를 공격할 때 Enemy에 존재하는 캡슐 콜리전에 플레이어의 무기가 여러번 충돌되는 문제가 발생하였다. Component Begin Overlap 함수를 호출하여 충돌을 체크하는데 무기를 휘두르는 시간이 길다면 여러번 충돌이 체크될 수 있다. 따라서 이를 해결하기 위해 무기가 상속받는 Weapon_Combo 클래스에서 공격하는 대상들을 저장하는 Character형 배열 변수 Hitted를 생성하였다. 무기와 Overlap 충돌되는 Character 액터들을 모두 Hitted에 저장하는데, 이때 AddUnique 함수를 사용하여 중복되지 않는 캐릭터 액터들만 저장하는것이 핵심이다! 결과적으로 충돌되는 액터들을 중복없이 배열에 담기 때문에 여러번 충돌이 체크되어 공격하는 ..

[UE4] 문자열 자료형

📚 문자열을 다루는 자료형 언리얼에는 문자열을 다룰 수 있는 자료형 세가지가 있다. Name 액터의 ID같은 문자를 주로 표현하기 위해 존재하며, 대소문자를 구분하지 않는다. String C++언어에서도 자주 사용하였던 가변 문자열과 같은 자료형이다. Text 뭔가를 보여주기 위해 존재하며, 주로 UI에 사용된다. 예를들면 NPC의 대사를 보여준다거나 게임화면 공중에 떠있는 글자를 나타낼 때도 사용한다. Text는 유니코드를 사용하여 글자가 무조건 2바이트씩 저장된다.

🎮Unreal4/Basic 2023.02.03

[C++] 랜덤함수, explicit(명시적 데이터형 변환), 변환함수, 프렌드 (friend), 연산자 오버로딩, 오버로딩 제약, Vector클래스

랜덤 함수 C++에서는 표준 라이브러리 함수인 rand(), srand(), time()을 사용한다. rand() 그냥 rand() 함수를 사용하면 난수가 뽑히는 것 같지만, rand() 함수는 초기 씨앗값에 어떤 알고리즘을 적용하여 하나의 무작위 값을 뽑아낸다. 그 무작위 값은 다시 다음 번 함수 호출에 사용된다. 따라서 난수를 10번 호출하면 10번 모두 동일한 난수 집합이 생기는 문제점이 있다. srand() srand() 함수를 이용하면 디폴트 씨앗값을 무시하고 다른 난수 집합을 발생할 수 있다. 주로 time(0)의 리턴값을 씨앗값으로 설정하여 시간을 초 단위로 받아 씨앗값이 매번 달라지도록 설정한다. srand(time(0)); explicit 키워드 C++은 자동 데이터형 변환을 제공하여 생..

📚책읽기 2023.02.02

[UE4] 게임 속도 조절, 경직기능, 모빌리티, 딜레이/타이머

철권 게임을 보면 플레이어 공격 시에 잠깐 잠깐씩 애니메이션이 멈추는듯한 "경직 부분"이 있다. 이는 플레이어의 타격감을 높이기 위한 기능으로 Hit Stop 기능을 구현해보았다. 🎢 게임 속도 조절 경직 기능을 구현하려고 게임 전체의 속도를 느리게 하는것은 절대 안된다. 게임 타임이나 게임 요소들도 전부 느려지기 때문에 게임 전체시간을 늦추는 것은 지양해야한다. 즉, 경직을 구현하려면 게임 전체 시간이 아닌 액터 자체의 시간을 늦춰야한다. Set Global Time Dilation Set Global Time Dilation은 게임 전체의 시간을 늦추는 함수이다. 이는 예제로만 사용해보고 실제 게임 구현에는 사용하지 않는다. Set Custom Tile Dilation Set Custom Time D..

[UE4] 카메라 쉐이크(Camera Shake), 시점 전환, Amplitude/Frequency, Waveform

모든 카메라의 관리는 Player가 한다. Enemy의 카메라나 관전자의 카메라여도 게임 상에 있는 모든 카메라는 Player Controller를 통해 관리/작업한다. 🎥 카메라 시점 전환 Player에 메인으로 사용하던 카메라가 존재할 때, Enemy 객체에도 Spring Arm과, 카메라를 컴포넌트 추가한 뒤, Enemy BP에 위와같은 노드를 배치하면 해당 함수가 호출되는 순간 Enemy 객체에 배치해둔 카메라로 시점이 서서히 이동하며 전환된다. Blend Time을 크게 배치할수록 기존 카메라 위치에서 전환될 카메라 위치로 서서히 이동한다. 또한 카메라를 Enemy 객체안에 배치하지 않고, 맵을 전체적으로 비춰주는 카메라로 시점을 전환하고 싶다면, 단순히 Camera 변수를 만들어 해당 카메라를..

[UE4] 사운드 기능(2D Sound/3D Sound), 사운드 감쇠, Draw Debug Sphere

🎺 사운드 기능 (Sound) 언리얼에서 사운드 입히는 방법을 공부해보았다. 사운드를 구현하는 방법으로는 2D 사운드와 3D 사운드 두 가지 종류가 있다. 2D 사운드 2D 사운드는 어디에서든지 거리,위치 상관없이 다 같은 볼륨의 소리가 동일하게 나야하는 경우 사용한다. 예를 들면 배경음악(bgm) 등이 있다. 3D 사운드 3D 사운드는 거리나 상황에 따라 소리가 억제되어 조절이 가능하도록 구현해야 하는 경우 사용한다. 예를 들면 플레이어의 발소리(footstep) 등을 구현하는 데 사용된다. 3D 사운드는 도플러 효과가 적용되어있기 때문에 가까이 오면 소리가 커지고, 멀리가면 작아지는 등의 소리 효과를 나타낼 수 있다. 언리얼에서 사운드 기능을 구현할 수 있는 '사운드 큐'기능이 있긴 하지만, 이번엔 ..

[BattleProject] 플레이어, Enemy 데미지/죽음 구현, 공격 중 데미지 처리

https://youtu.be/Pk7JO2mr8Ds 작업일지 진행중인 작업 (문제점) - 추격 범위 및 공격 가능 범위 Collision에서 Sword와의 충돌 처리 - 가끔 플레이어가 데미지 입은 후 공격 액션 안먹힘 - 가끔 Enemy 사망 후 땅속으로 빨려들어감.. 진행 예정 작업 - 문제점 해결 - Enemy 그룹전투 구현 - 플레이어 방어 구현 - 플레이어 반격 구현 진행 완료 작업 1. 일정 반경 내 플레이어 들어오면 타겟 설정 및 추격 - 추격의 시작과 끝에 따라 Enemy 무기 장착/해제 2. 일정 반경 내 플레이어 들어오면 콤보 공격 - 콤보 공격 중 범위 밖으로 나갈 시 공격 중단 - Enemy 공격 중 플레이어 공격 시 애니메이션 초기화 상태 수정 + 콤보 이어서 공격 - 플레이어와 ..

[UE4] RotateVector, 인터페이스 (Interface), Particle, Spawn Emitter at Location / Attached

📒 RotateVector Enemy의 데미지 이펙트를 구현하던 도중 새로 알게된 함수 RotateVector가 있다. 언리얼 설명에서는 벡터 A를 Rotator B로 회전시킨 결과를 반환한다고 적혀있다. 이해하기 쉽도록 사용했던 블루프린트를 보면 다음과 같다. Enemy에게 데미지가 가해졌을 때 특정 이펙트를 Enemy의 위치에서 시키고싶지만, 이펙트를 출력할 위치는 Enemy에 상대적이지 않다. 따라서 출력할 이펙트의 위치를 기준으로 현재 Enemy가 바라보고 있는 Rotation값을 Rotate Vector에 전달해주면, 출력되는 이펙트가 Enemy와 같은 방향을 바라보도록 구현된다. 앞으로도 원하는 방향을 출력하고자 할 때 RotateVector를 자주 사용할 것 같아 글을 정리한다. 📘 인터페이..

[BattleProject] 플레이어 추격, 몬스터 콤보공격, 무기 장착해제

https://youtu.be/bqT6mEYgAqA 작업일지 진행중인 작업 - Enemy 공격 중 플레이어가 공격하면 Idle 상태로 변환됨 진행 예정 작업 - Enemy 공격 시 플레이어 체력 감소 - Enemy 사망 모션 정상화 - Enemy 그룹전투, 방어, 반격 진행 완료 작업 - 일정 반경 내 플레이어 들어오면 타겟 설정 및 추격 - 추격의 시작과 끝에 따라 Enemy 무기 장착/해제 - 일정 반경 내 플레이어 콤보 공격 + 콤보 공격 중 범위 밖으로 나갈 시 공격 중단

728x90