본문 바로가기

언리얼_엔진_게임개발_공부/프로젝트9

[슈터게임] 7. C++ 위젯 애니메이션 제어 / 함수 델리게이트 바인딩 / feat. UButton wrapper & 바인딩 위젯의 경우 UPROPERTY 매크로에 meta = (BindWidget) 키워드로 에디터의 UMG 디자이너에서 생성한 위젯을 C++ 코드에서 제어할 수 있었다.(+ BindWidgetOptional 키워드를 넣으면 같은 이름의 위젯이 없어도 컴파일 타임 에러가 발생하지 않는다) 위젯 애니메이션의 경우에도 meta = (BindWidgetAnim) 키워드를 통해 애니메이션의 제어가 가능하다(는 사실을 뒤늦게 알게 됐다)주의할 점은 UPROPERTY(Transient, meta = (BindWidgetAnim)) 과 같이 Transient 키워드를 포함시켜야 한다는 것이다. Transient?언리얼 엔진 공식 도큐먼트에서는 아래와 같이 설명하고 있다.이 프로퍼티는 휘발성이라, 저장 또는 로드되지 않습니다... 2025. 3. 10.
[슈터게임] 평화롭고 건강한 우리팀의 눈물겨운 피드백 공유회 (KPT회고) Keep - 현재 만족하고 있는 부분S - 첫 언리얼 엔진 팀 프로젝트를 3주 안에 마무리까지 이끌어낸 점!S - 구현에 있어 원활히 진행된 점.M - 편하게 의견 조율 및 공유가 가능한 분위기 덕분에 즉각적인 소통에 있어 문제가 없었던 점W - 모두가 적극적인 태도로 커리큘럼 외의 내용까지 적용시킴W - 서로 존중하는 태도를 가지고 끝까지 감정적인 문제없던 것.S - 프로젝트 진행 간 아이디어를 눈에 보이게 구현한 것에 대한 확실한 성취감. 계속 이어지길 바람.Problem - 불편하게 느끼는 부분JC - 초기 코드 / 클래스 설계에 대한 계획 미흡JC, S - 담당 역할의 모호성으로 인한 작업량 불균형 및 버전 컨트롤 문제 발생JC - 초기 기획 / 진행 방향에 대한 공감 부족J - 처음 컨셉 결정에.. 2025. 3. 7.
[슈터게임] 6. DataTable 활용한 상점 구현 아래의 글을 보고 아이디어를 얻어 상점을 구현하는 데에 있어 구조체와 데이터 테이블을 활용하기로 했다.https://www.unrealengine.com/en-US/tech-blog/creating-a-data-driven-ui-with-umg이에 따라 아래와 같이 구성 요소를 계획하였다.상점 구성 요소1. Pawn을 상속한 매니저 클래스캐릭터와 상호작용을 기반으로 상점 메뉴 위젯 객체를 관리한다.혹시 모를 확장 기능(이동, 상호작용 등)을 생각하면 Pawn 기반으로 구현하는 것이 어떨까 하는 튜터님의 조언을 따라 폰 클래스를 상속하는 클래스를 만들었다.[구성 요소]- 콜리전 - 플레이어 오버랩 감지- 위젯 클래스 & 인스턴스 - 열고 닫을 상점 메뉴- 카메라 - 상점 메뉴 진입 시 ViewTarget .. 2025. 3. 4.
[슈터게임] 5. C++ 코드에서 UTextBlock 위젯의 폰트 / 아웃라인 변경 - UFont / FSlateFontInfo / FFontOutlineSettings 언리얼 엔진에 외부 폰트를 임포트하고 C++ 코드에서 FSlateFontInfo 구조체의 값을 지정해 폰트를 변경해보았다. 0. 외부 폰트를 사용하는 경우 .ttf / .otf 파일을 콘텐츠 브라우저에 드래그 앤 드롭하여 Font Face 에셋으로 추가한다. 단 원래 글꼴 파일이 프로젝트 폴더 내에 위치시키고 Font Face 에셋 내 파일 경로 또한 프로젝트 내의 글꼴파일을 가리키고 있는지 확인한다. 1. .콘텐츠 브라우저에서 우클릭 후 UFont 에셋을 생성했다. 2. 생성된 에셋을 더블클릭해 편집화면으로 들어간 후 + 클릭하여 아래와 같이 드롭다운 메뉴에서 해당 오브젝트와 연결될 Font Face 를 선택한다.화면에 나온 것처럼 + 버튼으로 여러가지 글꼴을 하나의 Composite Font 에 추가.. 2025. 2. 26.
[슈터게임] 4. UUserWidget 상속 / UWidgetTree::ConstrctWidget / BlueprintImplementableEvent 오버라이드 목표1. HUD 내의 다양한 요소를 각각의 클래스로 나누고자 했다.2. 기존 위젯 애니메이션 제어 방식을 개선하고자 했다. (FindFunction 함수 호출 최소화)- 위젯 애니메이션 재생 및 종료 시점에 위젯 삭제 (WBP 그래프에서 Play Animation with Finished Event 노드 활용) 를 하기 위해 FindFunction 함수로 위젯 블루프린트 내에서 생성한 애니메이션 관련 이벤트를 실행시키는 것이 효율적이지 않다고 생각되어UUserWidget 를 상속한 클래스의 함수를 블루프린트에서 오버라이드 하여 실행하는 방식으로 구현해보고자 했다. [프로세스]1. 화면 상단 중앙에 띄울 알림 메세지 창을 UUserWidget 을 상속한 C++ 클래스 NotificationWidget 으로.. 2025. 2. 24.
[슈터게임] 3. HUD 위젯의 이미지 교체하기 / SetBrush... 무기 교체 시 HUD 에 표시할 무기 아이콘 또한 교체되어야 한다.UUserWidget 의 Horizontal Box 안에 Image 로 아이콘이 들어갈 자리를 잡아놓았고, 코드에서 무기 교체 시 이 아이콘 교체를 진행한다.레이아웃을 디자인하며 Image 위젯의 디테일 패널을 살펴보니 Brush 라는 항목에서 이미지를 설정할 수 있게 되어 있었다. 그래서 이 Brush 를 키워드로 검색하였고, SetBrush~ 함수로 이미지 교체가 가능한 것을 알게 되었다.그래서 아래와 같은 순서로 진행했다. 0. 위젯을 관리하는 클래스의 생성자에서 FObjectFinder 를 활용해 텍스쳐 에셋 로드 후 에셋 포인터에 오브젝트 저장1. 위젯 블루프린트에서 Image 위젯 추가2. 해당 위젯 블루프린트 클래스 기반의 위.. 2025. 2. 22.