일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Ai
- UnrealEngine
- register component
- 랜덤 맵 생성
- redirection crash
- UE
- skill system
- unity
- Unreal Engine 4
- ue4 Crash
- 13iew
- Unreal Engine Error
- UE4
- Unreal Engine 5
- tscriptinterface
- Random Map Generator
- UE5
- 언리얼
- unreal engine skill
- redirector crash
- change textblock color
- deltaTime
- 리디렉터 크래쉬
- splinemeshcomponent scale
- staticmesh mobility
- unreal engine
- LittleNightMare
- 리디렉션 크래쉬
- ue4 error
- unreal engine redirection crash
- Today
- Total
목록Unreal Project (12)
Class GameDev* SheepAdult

(상수 같은 경우 코드의 가시성을 높이기 위해 따로 빼두지 않고 넣어놨습니다.) 3D 게임 개발 시 간단하게 이동을 구현하면(기본 언리얼이 제공하는 3D 콘텐츠 팩 같은 경우), 좌측으로 이동했다가 우측으로 이동할 경우 특별한 마찰력 등의 저항을 주지 않았다면 짧은 시간 안에 속도가 0으로 줄어들었다가 몸이 반대로 돌아가며 속도가 다시 서서히 올라간다. 방향 전환이 이루어질 때 아무런 애니메이션 없이 휙 돌아가는 모션이 없어 어색해 약간 주춤(?)하는(자동차 드리프트 느낌) 애니메이션을 넣어 보고자 했다. (코드는 마지막에) 1. 구현에서의 첫 번째 오판 - 판단 처음에 생각했을 때 캐릭터의 AxisValue를 받아서 구현해 보고자 했다. 일단, 속도가 너무 느리면, 즉 걸을 때는 일반적인 경우처럼 하기..

최근에 글을 작성할 만한 게 없어서 올려보는 Check Point.. 다른 튜토리얼을 보고한 게 아니라 최적의 방법은 아닐 수 있지만 본인이 구현하며 그나마 나은 방법이다. 게임 개발을 하다 보면 본인이 게임의 상황이나 애니메이션들에 신경을 많이 쓴다면 리스폰하거나 게임을 다시 시작할 경우 캐릭터가 스폰되는 모습을 체크포인트마다 다르게 주고 싶을 수 있다. 예를 들어 처음엔 활발했는데 맵을 진핼할수록 무기력한 모습이라든지 오히려 활기찬 모습이라든지,, 땅굴을 기어서 나온다든지 문을 박차고 나온다든지 원하는 로드가 다를 것이다. 그래서 체크포인트 액터마다 Enum값을 줘서 이를 달리해봤다. 먼저 Enum 클래스를 하나 만들어서 사용했다. 처음엔 CheckPoint 액터 클래스에 Enum 클래스를 선언하고 ..
스켈레탈 메쉬에 대한 몽타주가 끝나거나 블렌드 아웃될 때, 혹은 노티파이가 시작될 때 등 스켈레탈 애니메이션에 대한 Delegate를 활용하여 코드를 더 안전하고 효율성 있게 짤 수 있다. 언리얼은 위젯 애니메이션에도 이러한 Delegate를 지원한다. 아래는 전체적인 코드이다. // Widget.h #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "Components/Image.h" #include "FirstPersonDefaultWidget.generated.h" /** * */ UCLASS() class CAP2_API UFirstPersonDefaultWidget : public UUserWidget..

결과물 Youtube Link : https://www.youtube.com/watch?v=KpPfvmAMPW8 Swing이 되지 않는 위아래로 움직이며 높이가 다른 플랫폼으로 이동하기 위한 Pole을 구현했다. 본 프로젝트에서는 1인칭과 사이드 뷰를 전환해가며 플레이하는 게임인데 해당 기능은 사이드 뷰 모드에서만 동작하게 할 것이다. 먼저 Pole 모드 가능 범위 내에서 왼쪽 마우스 버튼 홀딩 시엔 계속 매달려있는 상태여야 하고, W, S 키로 올라가고 내려가는 기능이 있다. 그리고 Pole에서 점프 시, 폴과 반대 방향으로 점프할 수 있다. 폴 방향으로 점프할 순 있으나 폴에 막힐 것이다. 먼저 다른 오브젝트들과 비슷하게 왼쪽 마우스 버튼을 누르면 스피어 트레이스를 메인 캐릭터 캡슐콜라이더 앞에 조사..

결과물 Youtube Link: https://www.youtube.com/watch?v=JjcCQbMbJbo 일반적인 콘솔 게임을 보면 여러 개의 슬롯이 있는 것을 알 수 있다. 게임을 진행하다가도 현재 데이터는 그대로 둔 채 새 게임을 하고 싶은 경우에, 혹은 다른 사람이 플레이하고 싶을 때 다른 슬롯을 사용하기 위함이다. 각각의 슬롯은 독립적으로 게임 데이터를 가지고 있어야 하며, 게임을 로드했을 시 맵 내의 오브젝트들이 데이터를 저장할 때의 상태 그대로 있어야 한다. 이 기능을 현재 프로젝트에 적용하기 위해 구현했다. 일단 멀티 슬롯이다. 이는 Multi-Slot Widget이며, 3칸 하나하나는 각각 Slot 위젯이다. void UMultiSlotWidget::NativeConstruct() {..

결과물 Youtube Link : https://www.youtube.com/watch?v=olNclpA5Df0 +2022.4.30 수정 +2023.1.29 수정 (오랜만에 글 보는데 너무 예전 코드라 일부 수정) 3인칭 중에서도 사이드 뷰 시점일 경우에 물건을 줍고 던지는 기능을 구현해 봤다. 유튜브나 구글엔 원하는 형식의 강의가 없어서 스스로 구현해봤다. 먼저 구현된 모습이 어떨지 상상해 보면, 캐릭터가 물건을 집을 수 있는 위치에서 왼쪽 마우스 버튼을 누르면 그 물건을 줍는다. 줍는 애니메이션이 실행 중일 때는 움직일 수 없어야 하며, 줍는 애니메이션 실행 중 왼쪽 마우스 버튼을 뗀다면 애니메이션이 끝난 후 툭 떨어 뜨려야 한다.(사실 줍는 동안 손을 떼면 애니메이션이 해당 지점에서 중지하고 Rev..

먼저 LevelBlueprint역할을 하는 C++함수를 하나 만든다. LevelScriptActor C++ 클래스를 만들든 후 블루프린트 클래스로 만든다. 그리고 위와 같이 LevelBlueprint로 들어간다. 클래스 세팅에서 클래스 옵션의 부모 클래스를 방금 만든 블루프린트로 설정해 놓으면 LevelBlueprint처럼 사용할 수 있다. class ***_API AMyLevelScriptActor : public ALevelScriptActor { GENERATED_BODY() public: UPROPERTY(EditAnywhere, Category = "Widget") TSubclassOf _MainMenuWidget; UPROPERTY(VisibleInstanceOnly, Category = "W..

Light가 아닌 파티클이나 나이아가라를 통해 빛을 반사시키는 기능을 구현해 봤다. 빛이 면에 부딪히면 그 면의 법선벡터를 기준으로 반대로 반사되어야 하므로 이에 맞추어 구현했다. 트레이스를 쏴서 블락이 되면 반사각을 정해줘야한다. 작성할 때 각을 먼저 정해줘 먼저 보면 트레이스가 부딪힌 컴포넌트의 Material이 내가 원하는(거울과 같이 반사할 수 있는, 혹은 본인이 원하는 Material) Material이면 반사를 시켜주고, 그렇지 않으면 반사를 멈추는 작업을 해준다. 반사를 하려면 부딪힌 지점을 다음 트레이스의 출발지점으로 정해줘야 하고, 방향은 부딪힌 트레이스의 벡터를 노말 벡터를 기준으로 대칭되는 방향으로 정해줘야 한다. 이때 사용한 함수가 "Mirror Vector by Normal()"이..

결과물 Youtube Link : https://www.youtube.com/watch?v=t0hdhi6UnbM 사이드 뷰 게임에서의 밀고 당기기 기능을 어느 정도 구현해봤다. 처음에 감이 잘 잡히지 않아 정리를 해보고 구현했다. 본문 같은 경우 AddForce 같은 물리로 구현한 것이 아닌 AddWorldOffset과 AddWorldRotation을 사용해서 굉장히 자연스러운 구현은 못했지만 원하는 결과는 어느 정도 얻었다. 먼저 원리는 이렇다. 우선 개인적인 생각으로는 본인이 물건을 잡고있는 방향의 옆 방향을 입력했을 때는 움직일 수 없게 하는 게 자연스럽다고 생각했다. 에서 (1)은 움직일 수 없는 각도이고 (2)는 움직일 수 있는 각도이다. 만약 움직이는 키를 왼쪽 아래 방향을 입력한다면 왼쪽 아..
기본적인 Crouch() 함수를 사용해 캐릭터의 앉는 기능을 구현하면 부자연스럽게 뚝뚝 끊어져 보이는 것처럼 앉게 된다. 3인칭이나 사이드뷰같은 경우 SpringArm의 CameraLag을 통해 부드러운 앉기를 구현할 수 있지만 보통 1인칭은 캡슐 컴포넌트에 카메라를 박아 넣는 방식을 사용하므로 직접 구현해주는 게 낫다고 판단해 구현해 보았다. 먼저 Timeline에 쓰일 변수와 함수를 Pawn으로 사용할 메인 캐릭터 헤더파일에 아래와 같이 추가해 준다. private: // SmoothCrouching FOnTimelineFloat SmoothCrouchInterpFunction; // (1) FOnTimelineEvent SmoothCrouchTimelineFinish; // (2) UFUNCTION..