분류 전체보기 116

[UE4] 스켈레톤 & 소켓 시스템

소켓 소켓이란 스켈레탈 메시 내의 Born에서 약간 Offset을 준 부분을 말한다. 그런 다음 Born을 기준으로 소켓의 위치, 방향, 크기를 조절한다. 스태틱 메시, 스켈레탈 메시는 소켓에 미리 붙여볼 수 있어, 콘텐츠 제작자는 스켈레탈 메시의 소켓을 구성한 다음, 프로그래머에게 오브젝트를 붙일 소켓 이름만 알려주면 된다. 소켓을 생성하려면 일단 스켈레탈 메시를 더블클릭해서 들어간 후 스켈레톤 트리 패널에서 소켓추가를 선택해 추가할 수 있다. 소켓은 Born 이름 옆에 소켓 아이콘으로 표시된다. 원하는 소켓을 우클릭하고 프리뷰 애셋 추가 메뉴를 선택한 후 원하는 악세사리를 캐릭터에 부착해 볼 수 있다. 스켈레톤 애셋 언리얼4에서의 스켈레톤 애셋은 기본적으로 Born의 이름과 계층구조의 목록이다. Bo..

UE4 2022.11.03
[221101] JadenCase 문자열 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12951# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include using namespace std; string solution(string s) { string answer = ""; answer += toupper(s[0]); for (int i = 1; i < s.size(); i++) { if (s[i - 1] == ' ') { answer += toupper(s[i]); } else { answer += tolowe..

[UE4] FMath의 선형보간법 종류와 차이점

개요 게임 개발을 하다보면 자연스러운 동작을 구현하기 위해 선형보간법을 사용한다. 언리얼에서 자주 사용하는 선형보간법에는 크게 3가지가 있다. 1. FMath::Lerp https://docs.unrealengine.com/4.26/en-US/API/Runtime/Core/Math/FMath/Lerp/1/ FMath::Lerp Performs a linear interpolation between two values, Alpha ranges from 0-1 docs.unrealengine.com 두 값 사이의 선형 보간 수행( Alpha 범위 0~1 ), Alpha값을 이미 정해놓은 경우에 사용한다. FInterpTo보다 구현이 간단한 편이다. template static T Lerp ( const T ..

UE4 2022.10.22
[졸작] 기능구현리포트_2회차

기능 구현 리포트 [2회차] 1. 콤보 공격 구현 애니메이션 몽타주(Animation Montage), 노티파이, 델리게이트, 람다함수를 활용하여 콤보 공격 기능을 구현하였다. 2. 충돌체크 & 죽음 구현 콜리전 채널과 프리셋을 추가하고, 캡슐 컴포넌트가 해당 프리셋을 사용하도록 지정. SweepSingleByChannel()를 사용해 충돌여부 확인. 충돌을 감지하면 죽는 애니메이션 재생, 콜리전 false. 3. 디버그 드로잉 DrawDebugHelpers.h를 추가해 캡슐모양으로 충돌 범위와 충돌여부 드로잉. 공격 판정이 발생 하면 녹색, 반대는 붉은색으로 표시. 4. 카메라 부드럽게 Zoom 마우스 휠 입력을 바인딩해 ZoomIn, ZoomOut 구현, Tick함수에서 Lerp(선형보간) 사용해 부..

[UE4] 공격 시 조금씩 앞으로 가는 기능 구현하기

구현방법 구글링과 유튜브를 찾아보다가 아주 쉬운 방법을 발견했다. 바로 AddImpulse함수를 사용하는 것이다. 이 함수에 관한 설명은 https://coding-hell.tistory.com/73 에 있으니 참고하자. 원리는 캐릭터에 충격을 가하는 것이다. 이렇게 되면 선형보간을 할 필요도 없어지고 CharacterMovementComponent에서 제공하는 함수이므로 물리가 적용된다. 더이상 다른 물체를 뚫고 나가거나 언덕을 못오를 일이 없다. 1. Character헤더에 가할 힘을 변수로 선언한다. 물론 생성자에서 원하는 값으로 초기화해주도록 한다. UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowP..

UE4 2022.10.22
[UE4] 마우스휠로 카메라 줌(Zoom)기능 구현하기

구현 방법 1. 먼저 프로젝트세팅>입력 으로 들어가서 액션매핑에 ZoomIn과 ZoomOut을 만들어준다. 2. 설정한 입력 세팅을 캐릭터 클래스의 SetupPlayerInputComponent()함수에서 원하는 함수와 바인딩 시켜준다. void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 설정한 입력 세팅을 Pawn의 함수와 Binding시키기. PlayerInputComponent->BindAction(TEXT("ZoomIn"), EInputEvent::IE_Pressed, this, &AMyCha..

UE4 2022.10.21
[UE4] 데미지 프레임워크

TakeDamage() 언리얼 엔진의 액터 클래스 AActor에는 TakeDamage라는 함수가 구현돼 있다. 이 함수를 사용하면 손쉽게 액터에 데미지를 전달할 수 있다. TakeDamage 함수는 총 네 개의 인자를 가지고 있다. - DamageAmount : 전달할 데미지의 세기 - DamageEvent : 데미지 종류 - EventInstigator : 공격 명령을 내린 가해자 - DamageCauser : 데미지 전달을 위해 사용한 도구 여기서 데미지를 가한 진정한 가해자는 폰이 아니라 폰에게 명령을 내린 플레이어 컨트롤러라고 할 수 있으므로 EventInstigator에는 폰정보가 아닌 플레이어 컨트롤러의 정보를 보내줘야 한다. if (bResult)//충돌이 감지되면 { if (HitResul..

UE4 2022.10.21
[UE4] 디버그 드로잉(Debug Drawing)

디버그 드로잉 기능을 사용하려면 소스 상단에 DrawDebugHelpers.h 헤어를 추가해야 한다. 이 헤더에는 다양한 그리는 함수들이 선언돼 있다. 그 중에서 캡슐 모양을 그리는 기능인 DrawDebugCapsule()함수를 사용하여 탐색을 위해 원이 움직인 궤적을 표현해본다. 캡슐의 반지름을 설정하고 탐색 시작 위치에서 끝 위치로 향하는 벡터를 구한 후, 벡터의 중점 위치와 벡터 길이의 절반을 대입하면 우리가 원하는 크기의 캡슐 모양을 구할 수 있다. 캡슐 방향을 회전시키려면 회전 행렬을 적용하면 된다. 캡슐을 캐릭터 시선 방향과 일치하게 회전시키려면 FRotationMatrix 의 MakeFromZ함수에 캐릭터의 시선 방향 벡터를 입력해 필요한 회전 좌표축을 생성할 수 있다. #if ENABLE_..

UE4 2022.10.20
[UE4] 가비지 컬렉션(Garbage Collection)

언리얼 실행 환경은 메모리에 떠있는 언리얼 오브젝트가 사용 중인지 아닌지를 주기적으로 검사하고, 사용하지 않는 물체는 메모리에서 자동 제거하는 가비지 컬렉션을 제공한다. 언리얼 오브젝트가 사용 중인지 여부는 다른 언리얼 오브젝트가 해당 오브젝트를 참조하는지로 판단하는데, FHitResult의 멤버 변수 Actor의 선언이 일반 참조로 선언된다면 해당 함수에서의 참조로 인해 제거돼야 할 액터가 메모리에 그대로 남아있는 문제가 발생할 수 있다. 이러한 문제를 방지하기 위해 FHitResult는 참조로부터 자유롭게 포인터 정보를 전달해주는 약 포인터(TWeakObjectPtr) 방식으로 멤버변수를 선언했다. 약 포인터로 지정된 액터에 접근하려면 IsValid()함수를 이용해 사용하려는 액터가 유효한지 먼저 점..

UE4 2022.10.20
[221020] Level_ 1 문자열 내 마음대로 정렬하기

https://school.programmers.co.kr/learn/courses/30/lessons/12915 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include using namespace std; vector solution(vector strings, int n) { vector answer; vector temp; for (string s : strings) { temp.push_back(make_pair(s[n], s)); } sort(temp.begin(), temp.end()); for (pair..