| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 언리얼 5
- 112일선
- unity
- GenAI
- 224일선
- 리팩터링
- 이득우의 언리얼 프로그래밍1
- 리팩터링 3장
- shader
- 전주비빔 라이스 버거
- 공부
- 주식단테
- 주식
- 산토리 하이볼
- 언리얼5
- 스즈메의 문단속
- 구글 컨퍼런스
- 스포일러 주의
- 상계9동
- 이득우의 언리얼 프로그래밍 1
- JavaScript
- 448일선
- 작계훈련
- 2023 게이밍 인 구글 클라우드
- 2023 Gaming
- URP
- 2023 구글 클라우드
- 2023 게이밍
- 리팩터링 4장
- 1일차
- Today
- Total
목록전체 글 (95)
개발 이야기 안하는 개발자
여행 다녀왔쥐.7월 14일 부터 7월 22일까지. (2024년) 이탈리아 가게된 이유가 여자친구가 대학원 연수로 이탈리아 간다길래 따라갈 생각으로 갔다.여행중에 만나겠지란 생각으로 이탈리아 여행을 가기로 했다. 로마(2일) -> 피렌체(3일, 베니스 당일치기) -> 나폴리(2일, 아말피 당일치기) -> 로마(1일) 이렇게 다녀왔다! 구글 지도 꼭 오프라인 다운로드 받고.내 구글지도 인가 에서 경로 미리 찍어놓고.여행다니면서 길을 잃진 않았다. 그냥 교통편이... 일단 계속 작성해본다. 후... 인천 공항 잘 도착해서 환전했다.모바일로 미리 환전 신청해놔서 바로 환전 받았다. 저번에도 그랬고내 캐리어는 항상 무겁더라.난 여행가서 많이많이 사오고 싶은데. 그래서 이번여행엔 옷 2벌씩만 챙겨서 갔다.ㅋㅋㅋㅋ..
네트워크로 전송할 데이터의 구분 플레이어의 세부적인 스탯 정보를 모든 클라이언트에 공유할 필요가 있는가?스탯 정보는 소유자에게만 공유하고 다른 클라이언트(Simulated Proxy)는 체력 정보만공유 무기를 먹었을때 서버에서만 스탯값이 적용되도록 로직을 수정한다.무기 말고 포션과 스크롤은 맨 위에 HasAuthority()로 묶어 주어 서버에서만 연산하도록 한다.void AABCharacterBase::EquipWeapon(UABItemData* InItemData){ UABWeaponItemData* WeaponItemData = Cast(InItemData); if (WeaponItemData) { if (WeaponItemData->WeaponMesh.IsPending()..
클라이언트의 입력 정보를 서버로 보내고 서버에서 확인 후 수정을 거친다. Autonomous Proxy 클라이언트의 진행 (ReplicateMoveToServer()) 클라이언트 캐릭터의 움직임을 보관하는 네트워크 클라이언트 데이터 생성 클라이언트의 데이터에 저장된 움직임 중에 참고할 중요한 움직임 기록(OldMove) 현재 틱의 움직임을 기록하는 신규 움직임 생성(NewMove) 입력을 처리하기 전의 각종 초기화 상태를 저장(StartLocation) 필요시 최종 움직임과 현재 움직임을 병합 시도 클라이언트 로컬에서의 움직임 진행(PerformMovement) 신규 움직임에 움직임 결과 상태를 저장(SavedLocation) 신규 움직임을 클라이언트 데이터에 추가 ServerMove함수를 호출해 Old..
RPC(remote Procedure Call) 원격 프로시저(함수) 호출의 약자로 우너격 컴퓨터에 있는 함수를 호출할 수 있도록 만든 통신 프로토콜 서버와 클라이언트간에 빠르게 행동을 명령하고 정보를 주고받는데 사용된다. 언리얼 엔진에선 클라가 서버로 통신하는 유일한 수단이다. Client RPC 서버에서 클라로 호출하는 RPC 특정 클라에게만 명령을 보낼 수 있다. 서버에서 명령을 보낼 클라의 커넥션을 소유한 액터를 사용해야 한다 (AActor::GetNetConnection) Server RPC 클라에서 서버로 호출하는 RPC 언리얼에서 유일하게 클라가 서버의 함수를 호출 할 수 있음. 서버쪽에서 클라의 명령을 검증할 수 있는 함수를 구현할 수 있다. Client RPC와 동일하게 서버와의 커넥션을..
액터 리플리케이션 특정 플레이어에 속한 액터의 정보를 네트워크 내 다른 플레이어에게 복제하는 작업 클라이언트-서버 모델에서는 대부분 서버에서 클라이언트로 전달함. 리플리케이션의 방법에는 크게 2가지가 있음. - 프로퍼티 리플리케이션 - PRC (Remote Procedure Call) 기본 액터의 로딩 클라이언트가 초기화 될 때 모든 액터 정보를 서버로부터 받는 것은 비효율적이다. 따라서 기본 배경에 관련된 액터는 맵을 통해 스스로 로딩하도록 설계되어 음. 고정으로 제공하는 액터와 동적으로 생성하는 액터 - 고정으로 제공하는 액터 : 레벨을 구성하는 배경 액터 - 동적으로 생성하는 액터 : 플레이어 컨트롤러와 폰 고정 액터에 대해 NetLoadOnClient 속성을 체크해야 함(기본 값) NetLoadO..
기능이 일부 제작된 3강 예제이다. 실행버튼 끝쪽에 more를 누르면 Numberof Players로 플레이 사람수를 정할 수 있다. Play a Listen Server 를 누르게 되면 게임 실행방식은 이제 Listen Server 로 동작하게 된다. Project 셋팅에서 Allow Late Joing을 활성화 한다 그럼 다음과 같이 톱니바키 실행버튼 (Add another Client)이 생기는데, 이 버튼을 누르면 다른 클라이언트의 화면이 활성화 되는 것을 볼 수 있다. 언리얼 네트워크 개요 언리얼 멀티 프로젝트는 새로운 엔진처럼 느낄정도로 새롭고 어렵다. 멀티플레이 프로젝트를 제작할 예정이라면 처음부터 구성을 염두해 두고 제작해야 한다. 멀티플레이 게임은 싱글플레이에서도 정상 작동한다. 하지만 ..
헤드업 디스플레이 HUD는 플레이어 컨트롤러에 의해 제작되고 관리되는 UI 객체이다. HUD의 구현은 위젯을 생성하고 이를 플레이어 뷰포트에 띄우는 과정으로 생성된다. 이렇게 만들어진 위젯은 자신을 소유한 플레이어 컨트롤러에 접근할 수 있다. 위 이미지는 각각 초기화 되는 기능 순서이다. CreateWidget을 호출해서 제작하고 그럼 UI가 NativeOnInitialized 가 호출된다. 이후 AddtoViewPort를 호출하면 NatvieConstruct 가 호출되는 방식이다. CharacterStatComponent.cpp에서 값을 초기화를 먼저 하려면 InitializeComponent부터 호출해야 한다. protected: virtual void InitializeComponent() over..
데이터를 csv로 읽어와서 이를 언리얼에 적용할 것이다. 이를 읽어오는 하나의 폼을 스크립트로 제작하고 이를 블루프린트로 만들예정이다. DataAsset과 유사하게 FTableRowBase를 상속받은 구조체를 선언해야 한다. 엑셀의 Name 컬럼을 제외한 컬럼과 동일하게 UPROPERTY속성을 선언하고 csv를 언리얼 엔진에 임포트한다. Source파일 안에 원하는 곳에 메모장을 제작하고 이름뒤에 헤더를 붙인다 (.h) USTRUCT(BlueprintType) struct FABCharacterStat : public FTableRowBase { GENERATED_BODY() public: FABCharacterStat() : MaxHp(0.0f), Attack(0.0f), AttackRange(0.0f..
액터 컴포넌트를 활용한 스탯액터에 부착할 수 있는 컴포넌트 중 트랜스폼이 없는 컴포넌트액터의 기능을 확장할 때 컴포넌트로 분리해 모듈화를 할수 있음.스탯 데이터를 담당하는 컴포넌트와 UI 위젯을 담당하는 컴포넌트로 분리액터는 두 컴포넌트가 서로 통신하도록 중개하는 역할로 지정 언리얼 델리게이트를 활용한 발행구독 모델푸시형태의 알림을 구현하는데 적합한 디자인 패턴스탯이 변경되면 델리게이트에 연결된 컴포넌트에 알림을 보내 데이터를 개신스탯 컴포넌트와 UI컴포넌트 사이의 느슨한 결합의 생성발행구독과 옵저버의 차이는 발행구독 사이엔 델리게이트라는 연결다리가 있어서 스탯컴포넌트와 UI 위젯 컴포넌트가 서로 모른다는 장점이 있다. 캐릭터 머리 위에 HP bar를 제작한다.Widget Blueprint를 UserWi..
게임 플레이 큐(Cue) _GC라고 부름 시각 이펙트나 사운드와 같은 게임 로직과 무관한 시각적, 청각적 기능을 담당함. 데디케이티드 서버에서는 사용할 필요가 없음. - 스태틱 게임플레이 큐 : 일시적으로 발생하는 특수효과 사용 (Execute 이벤트 발동) - 액터 게임플레이 큐 : 일정 기간동안 발생하는 특수효과에 사용 (Add / remove 이벤트 발동) 블루프린트로 제작하는 게 더 좋음. 게임플레이 이펙트에서 자동으로 GC와 연동할 수 있도록 기능을 제공하고 있음. 게임플레이 큐의 재생은 GameplayCueManager가 관리함(분리된 구조) 게임플레이 태그를 사용해 쉽게 발동시킬수 있음. - 이때, 반드시 GameplayCue로 시작하는 게임플레이 태그를 사용해야 함. 공격에 성공했을때 이펙..
캐릭터 어트리뷰트를 제작한다. 어트리뷰트 세트 GAS에서 제공하는 언리얼 오브젝트 이다. 단일 어트리뷰트 데이터인 GameplayAttributeData의 묶음이다. GameplayAttributeData는 하나의 값이 아닌 두 가지 값을 구성되어 있다. - BaseValue (기본 값), CurrentValue (변동 값) - PreAttributeChange(), PostAttributeChange(), PreGameplayEffectExecute(), PostGameplayEffectExecute() 어트리뷰트 세트 접근자 매크로를 만들어서 제공함. ASC는 초기화될 때 같은 액터(Owner)에 있는 AttributeSet 타입 객체를 찾아서 등록하기 때문에 따로 초기화를 제작하지 않아도 된다. 상..
캐릭터에는 사용하는 애니메이션을 지정해주는 컴포넌트가 있다. 캐릭터 매쉬에 Animation을 보면 사용할 모드와 애님 클래스를 지정할 수 있다. 블루프린트를 사용할 꺼고, 애님 클래스는 ABP_ABCharacter_C 를 사용한다고 적혀있다. 적혀져 있는 ABP_ABCharacter_C는 따로 제작한 클래스이다. AnimInstance를 상속받은 클래스를 하나 제작한다. 그리고 이것을 토대로 블루프린트를 제작하고 지정하면 된다. 타겟할 스켈레톤과 만들었떤 Anim Instance를 지정해주고 제작하면된다. 캐릭터는 GetAnimInstance()를 통해 AnimInstance를 가져올 수 있고, AnimInstance는 GetOwningActor()를 통해 캐릭터를 가져올 수 있다. 애니메이션 블루프린..