전체 글 403

[UE4] 연사 기능(Auto Fire) - SetTimer, TimerManager

마우스 왼쪽 버튼을 꾹~ 누르고 있으면 총이 연사되도록 연사 기능을 구현해보았다. ⏱ SetTimer 블루프린트에서 사용했던 SetTimer 함수의 정의를 살펴보면 World의 GetTimerManager로 Timer Manager를 불러와서, Timer Manager가 가지고있는 Set Timer 함수를 실행시킨다는 것을 알 수 있다. 따라서 나는 연사모드라면 (bAutoFire == true) GetWorld()로 World를 가져와 동일하게 Get Timer Manager를 다시 가져오고, 그 안에 있는 SetTimer 함수를 바로 사용하였다. SetTimer 함수를 사용하려면 어떤 Timer를 작동시킬 것인지를 구분하기 위해 식별자인 Handle이 필요하다. 따라서 변수로 FTimerHandle을..

🎮Unreal4/C++_TPS 2023.03.14

[UE4] UI(UserWidget, BlueprintImplementableEvent, WidgetComponent), 블루프린트 부모변경

총의 연사 기능을 구현하기에 앞서 현재 연사 모드인지 아닌지에 대한 표시를 나타내기 위해 간단한 UI를 만들어보았다. 🎨 UserWidget 상속받은 C++ 클래스 먼저 블루프린트에서도 UI를 제작하기 위해 Widget을 생성하고 나면 UserWidget이 부모클래스로 상속되어 있기 때문에 C++ 클래스로 Widget을 만들때도 UUserWidget을 상속받으면 된다. C++ Widget 클래스에서는 함수를 선언만 해두고 구현하진 않는다. 실제 구현은 Widget 블루프린트에서 배치해둔 컴포넌트들을 변경해야 하기 때문에 구현은 블루프린트에서 해야 한다. 따라서 C++ 클래스에서 선언만 해두고 실제 구현은 블루프린트에서 진행되므로 BlueprintImplementableEvent 속성을 적용하였다. 🎨 W..

🎮Unreal4/C++_TPS 2023.03.14

[UE4] 총 발사(Fire), 탄착군(RandomUnitVectorInConeInDegrees ), 총알 충돌, Hit Decal&Hit Particle, 화염, 탄피, Sound, 반동(Camera Shake, AddControllerPitchInput)

💥 탄착군 형성 탄착군을 형성하기 위해 Random 함수로 direction을 초기화하였다. Random 함수의 매개변수로 camera의 앞 방향을 direction으로 전달하고, 탄착군의 튕김 범위(RecoilAngle)를 0.75f 로 설정한 뒤 전달해주었다. 💡 RandomUnitVectorInConeInDegrees 함수 UFUNCTION(BlueprintPure, Category = "Math|Random", meta=(NotBlueprintThreadSafe)) static inline FVector RandomUnitVectorInConeInDegrees(FVector ConeDir, float ConeHalfAngleInDegrees) { return RandomUnitVectorInCon..

🎮Unreal4/C++_TPS 2023.03.14

[UE4] Aim 기능 -2 : 에임 오프셋(1D), 프로퍼티 매트릭스를 통한 대량 편집, 시야각 제한

Idle 상태와 Aim 상태에서의 에임 오프셋을 구현해보았다. 💡 프로퍼티 매트릭스를 통한 대량 편집 에임 오프셋을 만들기에 앞서, 사용하려는 애니메이션이 하나의 애니메이션 안에 프레임별로 다른 방향을 바라보는 모션이 전부 담겨져있었다. 따라서 Center를 바라보는 방향과, Down, Up 방향에 해당하는 프레임을 하나씩 잘라 애니메이션을 나누어주었고, 이렇게 잘린 애니메이션은 프레임이 1이기 때문에 기준 포즈(Idle)에 방향 포즈(Center, Down, Up)를 섞는 편집 과정을 수행하였다. 편집하려는 (잘라둔)애니메이션들을 모두 선택한 후 애셋 액션->프로퍼티 매트릭스를 통한 대량 편집 기능을 눌러 애니메이션 자체의 속성값들을 편집할 수 있다. 여기서 모든 애니메이션을 선택한 뒤, Additiv..

🎮Unreal4/C++_TPS 2023.03.13

[UE4] Hand IK - FABRIK (Two Bone IK와 차이점, 몽타주 Curve)

🤲 Hand IK 블루프린트를 공부하면서 계단을 오를 때 자연스러운 Foot IK를 구현했었다. 오늘은 총을 잡을 때 정확히 손이 총을 감싸쥘 수 있도록 Hand IK를 구현해보았다. Player의 애니메이션 블루프린트에서 IK는 모든 애니메이션 연산이 끝나고 가장 마지막에 적용시켜야 하기 때문에 최종 애니메이션 포즈의 바로 전 단계에 위치시켰다. IK를 구현하기 위한 Inverse Kinematics 레이어를 추가하였다. 먼저, IK를 사용하는 중인지를 애니메이션 블루프린트에 알려줄 bool 형 변수(bool UseIK)를 생성해주었다. AnimInstance 클래스에서 bUseIK 변수를 선언한 뒤 블루프린트에서 사용할 수 있도록 BlueprintReadOnly, EditAnywhere 속성을 부여하..

🎮Unreal4/C++_TPS 2023.03.13

[UE4] Aim 기능 -1 : Curve, Timeline (AimData, UCurveFloat, TimelineComponent, FOnTimelineFloat, AddInterpFloat)

저번 시간에는 무기의 Equip/Unequip을 구현하였고 이번엔 총 게임의 핵심인 Aim 기능을 구현하였다. 사실 핵심적인 기능은 블루프린트의 활(Bow)의 Aim 기능을 구현했던 것과 비슷하게 구현된다. 살짝 다른점이 있다면 총은 Aiming 중에 흔들리지 않아야 한다(?)는 것이다. 📚 InputEvent Player 클래스에서 마우스 오른쪽 키를 누르면 Aiming 입력이 실행되도록 하였다. 📚 Begin_Aim, End_Aim Weapon Component의 Begin_Aim 함수가 호출될 때 현재 무기가 있는지와 Aim 모드가 될 수 있는 상태인지를 검사하였다. Can Aim 함수에서는 bEquipping 과, bReload, bInAim 까지 총 3가지 bool 변수를 검사하며 모든 경우가 ..

🎮Unreal4/C++_TPS 2023.03.13

[UE4] AR4 Equip/Unequip (Montage, PlayAnimMontage)

🚩 AR4 (Rifle, 소총) Equip AR4 ("1")의 입력을 받으면 플레이어가 AR4 총을 드는 Equip 기능을 구현하였다. Weapon Component를 이용하여 Weapon을 상속받는 각각의 무기들을 제어하는 것과 같이 프로그램의 전체적인 구조는 블루프린트에서 구현했던 구조와 비슷하게 구현하였다. AR4를 장착하기 위한 SetMode 함수가 수행될 때, 현재 무기의 Type이 장착중인 무기와 같다면 무기를 해제하도록 SetUnarmedMode를 호출하였고, 현재 장착중인 무기가 아니라면, Unequip할 수 있는 상태인지를 확인한 뒤, Unequip 함수로 장착해제하고, 매개변수로 받아온 새로운 무기 Type을 장착하였다. Equip과 Unequip이 가능한지를 검사하는 함수 CanEqu..

🎮Unreal4/C++_TPS 2023.03.13

[수학] 삼각함수 회전변환 항등식

🚩 회전변환 반지름의 길이가 1이고, 중심이 원점인 단위원을 좌표평면에 나타내고, θ를 나타내는 각도(동경)와 원 사이의 교점을 P(x, y)라고 하자. 점 P에서 x축에 수선을 그으면 직각삼각형이 만들어지며, 점 P의 좌표는 (cosθ, sinθ)가 된다. 단위원이 아니라 반지름이 a인 경우에는 점 P의 좌표가 (a*cosθ, a*sinθ)가 될 것이다. 회전변환은 어떤 한 점을 중심으로 잡고, 이동시키고자 하는 점을 회전시키는 변환을 의미한다. 즉, 원점을 중심으로 회전시킨다면 "원점을 중심으로 θ만큼 회전시키는 변환"으로 칭할 수 있다. 어떤 점에서 θ만큼 이동시키는 회전변환을 나타내는 행렬은 아래와 같다. 즉, 점 P를 (x, y)라고 하고, 회전이동된 점을 (x', y') 라고한다면 아래와 같이..

📚수학공부 2023.03.13

[Portfolio] 검기 Trail, Particle 추가, 스킬작업

https://youtu.be/HApyp-m_2ng 진행중인 작업 - 다운공격스킬 및 다운공격 구현 진행 예정 작업 - 플레이어 - 밑에서 위로 공격하는 공중콤보 구현 - 맵적용, IK, Parkour 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현 - 검기 Trail, Particle 적용

[DX] 3D 모델, Assimp, ReadFile

🚩 3D 모델 3D 모델을 담고있는 파일은 많은 종류가 있는데, 대표적으로 Fbx, 3DS, Obj, md5, SDKMesh 등등이 있다. 3D 모델링 프로그램은 3DS MAX, Maya, Blender 등이 있다. 3DS Max와 Maya는 Autodesk 회사의 프로그램으로 Fbx 파일을 반환하고, Blender는 OpenSource이다. 3D 모델의 파일 형식은 이처럼 매우 다양한데, 형식에 따라 개발 툴에서의 파일입출력이 가능하거나 불가능하게 나뉘었기 때문에, 프로그래머들은 Assimp 라는 프로그램을 사용하여 어떤 파일 형식이건 동일한 형태로 변환하여 사용할 수 있도록 하였다. (게임을 위해서 만들어진건 아니고, 만들어놓고보니 게임개발에 잘 사용되었다.) Assimp에 있는 데이터를 그냥 가져다..

🎨DirectX 2023.03.13

[Portfolio] 타겟팅을 이용한 공중콤보 마무리

https://youtu.be/To4NjHbb5_Y 진행중인 작업 - 파티클 에셋 찾기 - 검기 파티클 적용 진행 예정 작업 - 플레이어 - 밑에서 위로 공격하는 공중콤보 구현 - 다운공격, 맵적용, IK, Parkour 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현

728x90