일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 랜덤 맵 생성
- 13iew
- UE
- tick 사용하지 않고
- deltaTime
- Unreal Engine 4
- Fresh cooked tweens
- Chat Server
- ue4 Crash
- 채팅 서버
- bluezone
- ue4 error
- game ability system
- UnrealEngine
- UE5
- Unreal Engine Error
- Random Map Generator
- Ai
- unreal engine
- 아이작 맵 생성
- 언리얼
- Unreal Engine 5
- multithreard chat
- LittleNightMare
- unity
- Unity Engine
- 언리얼 자기장
- unreal engine 5 tween
- UE4
- tick처럼 사용
- Today
- Total
목록Unreal Engine (27)
Class GameDev* SheepAdult
먼저 자기장 구현보다 gas를 통한 캐릭터에게 데미지를 주는 것에 대한 글을 작성하려 한다. 아직 gas에 대한 공부가 부족한 상태이며, 실력 또한 부족하여 글에 부족한 부분이 있을 수 있다. 먼저, gas환경 하에서 플레이어에게 데미지를 주기 위해서는 데미지를 주는 액터가 UAbilitySystemComponent와 UAttributeSet을 가지고 있어야 한다. UAttributeSet은 체력 혹은 마나 등의 속성 값을 등록하여 사용하기 위한 용도이며, UAbilitySystemComponent는 AttributeSet에 변화를 주기 위한 용도로 사용할 것이다. AttributeSet 먼저 AttributeSet 클래스를 하나 만든 후, Health, MaxHealth 속성을 추가했다. 그리고, 멀티..
유용한 오픈 소스 플러그인을 발견해서 작성한다. 틱에 작성하지 않고 틱처럼 돌아가게 하는(마치 타임라인과 비슷한) 플러그인이다. 아래는 해당 플러그인 깃 허브 링크이다. https://github.com/jdcook/fresh_cooked_tweens GitHub - jdcook/fresh_cooked_tweens: Tweens for Unreal Engine, with C++ API and Blueprint support Tweens for Unreal Engine, with C++ API and Blueprint support - GitHub - jdcook/fresh_cooked_tweens: Tweens for Unreal Engine, with C++ API and Blueprint suppor..
TSubclassOf는 UClass 유형의 안전성을 보장해 주는 템플릿 클래스이다. 여기서 안전성이란, 사용자가 작업할 때 의도치 않은 클래스를 사용하는 것을 방지해 준다는 말이다. 이 말은 TSubClassOf는 템플릿 클래스이므로 빌드 시점에서 타입 검사가 이루어지기 때문에 런타임 에러의 위험이 없다는 점에서 안전하다는 의미이기도 하다. 보통 TSubclassOf는 EditAnywhere 등과 같이 에디터에서 직접 넣어주는 용도로 사용한다. // .h UPROPERTY(EditAnywhere) TSubclassOf TestWidgetClass; UPROPERTY() class UTestWidget* TestWidget; // .cpp TestWidget = Cast(CreateWidget(GetWor..
FORCEINLINE은 함수를 강제적으로 inline화 시킨다. inline화란 컴파일 단계에서 컴파일러가 함수 호출 지점에 함수 내용을 갖다 붙이는 것을 말한다. 왜냐하면, 간단한 함수의 경우(한 줄짜리 getter, setter 등) 함수를 호출하는 데 발생하는 오버헤드가 함수 자리에 함수 내용이 작성되어 있는 것보다 효율성이 좋지 않을 수 있기 때문이다. 다시 말해, 함수를 호출하는 지점에서 함수로 이동하는 것보다, 그 자리에 함수 내용 코드를 써넣는 것이 효율성이 더 좋을 수 있다는 얘기이다. 이러한 경우 보통 inline을 사용한다. 하지만 inline의 경우, 컴파일러가 함수 내용이 복잡하다고 판단하면 inline처리 하지 않기도 하고, inline이 명시되어 있지 않더라도 inline화 하기..
해당 에러는 FTableRowBase를 상속한 구조체를 기반으로 데이터 테이블을 만든 후, 구조체를 C++에서 해결하면 발생하는 문제이다. 항상 발생하는 것은 아니고, C++에서 구조체 수정 후, 핫리로드(편집기가 아닌 엔진 내에서 컴파일) 했을 때 발생한다. 인터넷을 곳곳이 뒤져 봤지만 한 번 발생하면 다시 되돌릴 수 없는 비가역적 에러같다... 에디터를 껐다 켜도 안되고 프로젝트 재생성해도 되지 않았다. 그래서 나도 다시 만들었다. 원래 언리얼은 핫리로드가 지양되는만큼, 엔진 종료 후 vs에서 컴파일하는 게 국룰이지만 까먹을 때도 많고, 다시 껐다 켜는 게 여간 번거로운 일이 아니다.. 하지만 이런 일이 발생하지 않도록 핫리로드를 최대한 사용하지 말도록 하자.
개인 프로젝트를 진행 중에 Dangling Delegate 문제로 인해 많은 시간을 소비했다. 인벤토리 구현 중, 인벤토리 위젯 내의 다른 위젯 클래스의 함수가 캐릭터 컴포넌트에 선언된 업데이트 관련 delegate에 바인딩 되어 있었다. 인벤토리를 온오프하면 인벤토리 위젯은 당연히 삭제 되므로, delegate에 바인딩 된 함수도 같이 해제해 줘야 하지만, 이를 처리하지 못한 문제였다. 문제는 이상하게도 해당 함수가 바인딩 된 것 처럼 실행은 된다는 것...(인벤 토리의 구조체들은 업데이트가 되지만 widget은 업데이트 되지 않았다.) 이전엔 코드가 아래와 같았다. /* 인벤토리 슬롯들을 나열하는 그리드 클래스 */ // InventoryGrid.cpp void UInventoryGrid::Updat..
언리얼에서의 딜리게이트는 사용하면서부터 쭉 옵저버 패턴이라고 생각해왔고 확인 결과 옵저버 패턴이 맞았다. 그런데 ReplicatedUsing 또한 특정 행위가 발생하면 특정 함수가 호출이 되는 것이고, 그로 인해 액터에 대한 정보 업데이트가 이루어지는 것이니 옵저버 패턴인지 아닌지 궁금해졌다. 그리고 알아 본 결과 ReplicatedUsing은 옵저버 패턴이 아니었다. ReplicatedUsing은 멀티 플레이 환경에서 서버와 클라이언트 간에 상태를 동기화할 때 사용한다. Replicate된 변수가 서버에서 변경이 된다면 바인딩 된 클라이언트의 함수를 호출하는 방식으로 이루어진다. 즉, ReplicatedUsing은 디자인 패턴이라기 보다는 네트워크 기능으로 분류되며, Replicate선언 된 변수가 서..
화가 난다... 잘 작동하던 코드가 코드 좀 바꿨더니 아래와 같은 에러가 뜨면서 오류가 났다.. 이 오류 때문에 꼬박 이틀을 날렸다.. 하루하루가 중요한 시기인데.. 분명 코드가 문제 없이 돌아가고 있었고 원하던 대로 구현 중이었는데 이 문제로 몇 번을 갈아 엎었다. 물론 갈아 엎으면서 코드가 좀 깔끔해지긴 했지만 그래도 이틀은 좀.. 구글링 한 결과 피직스 에셋에서 메시 루트 본 키네마틱 어쩌고 하는데 그 전까진 됐기에 이 건 문제가 아닌 것 같고 정말 답답했다. 아무튼 이 것은 스켈레탈 메시 소켓에 AttachActor로 액터를 붙일 때 발생한다. 그런데 만약 붙일 액터의 Simulate Physics가 true이면 발생하는 문제였던 것이다. 그래서 Attach하기 전에 Simulate Physics..
대부분의 게임엔 게임 플레이 타임이 표시된다. 하지만 컴퓨터마다 접속 시간이 달라 동시에 게임에 입장한다고 하더라도 컴퓨터마다의 속도가 다르기 때문에 GetWorld()->GetTimeSeconds()로 시간을 받아온다면 서버와 클라이언트마다의 시간이 모두 달라 게임에 악영향을 끼칠 수 있다. 그래서 서버 컴퓨터의 시간으로 클라이언트에 맞춰줄 필요가 있다. 그렇다면 서버와 클라이언트 사이의 시간 차를 구하여 클라이언트 컴퓨터에 연산하는 방향으로 일을 처리해야 한다. 과정은 아래와 같다. 먼저 클라이언트의 전송 시각과 서버가 수신 후 전송 시각을 전송한 클라이언트가 이를 수신하면, 수신한 데이터와 수신한 시각을 바탕으로 서버와 클라이언트 사이의 시간차를 구한다. C++코드로 구현을 해보았다. 이는 HUD에..
ue5의 애니메이션 리타겟이 ue4와는 조금 달라졌다. 기존 ue4는 스켈레탈 애셋 내의 리타겟 매니저의 Set up Rig 카테고리에서 진행했었다. Select Rig에서 휴머노이드 릭을 선택하고 각 본에 맞게 리타겟을 해주는 방식이었다. 하지만 ue5에는 이 Set up Rig 카테고리가 없다. 대신에 아예 블루프린트로 독립되어 있다. 먼저, 콘텐츠 브라우저에서 마우스 오른쪽 클릭->애니메이션->IK 릭에서 IK 릭을 선택한 후, 리타겟 시킬 두 스켈레탈의 블루프린트를 각각 생성한다. 그 후, 블루프린트를 보면 오른쪽 아래에 "IK리타기팅" 창이 있다. 해당 창에서 "새 체인 추가"라는 버튼이 있는데, 이는 본들을 그룹화하는 역할을 한다. 예를 들어, spine이란 이름들을 가진 본들을 다중 선택한 ..