전체 글 (64) 썸네일형 리스트형 UE5 | C++ 개발 - 블루프린트 펑션 라이브러리 블루프린트는 매우 유용하면서도 딱딱하다. 이미 코드가 정해져있기때문에, 필요에 가장 가까운 노드를 골라서 사용하는 느낌이랄까. 비유하자면, 코드개발은 아예 찰흙으로 주물조물 원하는 신체 모양을 만들어가는 느낌이라면, 블루프린트 개발은 이미 만들어진 신체 부위 조각물들을 잘 붙여서 사람모양을 만드는 느낌이다. 얼추 모양은 나오지만 완전히 내가 원하는 모양은 아닐 수 있다. 미리 만들어놓는 함수들이기에 응용을 다양하게 할 수 있도록 많은 정보가 들어가있고, 그만큼 필요보단 무게가 있다.그래서 작업속도도 빠르고 간편하지만, 최적화엔 좋지못해서 초반엔 코드스케치용으로 사용하고 나중에 코드로 옮겨주는 작업이 필수라고한다. 그러나 때에 따라 블루프린트를 사용하는게 여러모로 코드보다 이득일 때가 분명 있을 것이다. .. UE5 - 채팅시스템(멀티 - 리슨서버) : 채팅ID 등록 2 어제 호기롭게 ID 등록 로직을 올렸으나, 잘못된 부분이 있어 수정하고자한다. 일단, ID는 서버에 저장된다. 그 중에서도 난 간단하게 PlayerState에 저장하기로 했다.그러나 간과한 부분이 있었다. PlayerState에 정보를 저장할땐 보안상 게임모드를 통해서 저장하도록 하는데, 게임모드 입장에선 그냥 PlayerState에 저장해달라고 하면 누구의 PlayerState에 저장해야할지 혼란스러워한다는 부분이다. 근데 나는 그냥 GetPlayerState로 PlayerState를 호출해서 여기에 저장하라고 했는데, 서버는 호스트가 소유하고있기때문에 게임모드입장에서 그렇게하면 그냥 호스트의 PlayerState에 저장하라는 이야기나 다름없다.그래서 발생한 문제는 누군가 ID를 설정할 때마다 호스트의.. UE5 - 채팅시스템(멀티 - 리슨서버) : 채팅ID 등록 저번 글에 이어 이번엔 리슨서버환경에서 멀티 채팅을 구현해보았다.오늘은 ID등록을 다뤄보겠다. 1. ID 입력을 구현해주었다.- 아이디를 입력하고 조건에 부합하면 리드온리로 수정을 막고 컨트롤러로 보내준다. 2. 컨트롤러에서 ID를 저장한다음 게임모드(서버)로 보내준다. 3. 게임모드에서 플레이어 스테이트로 보내준다. 4. 플레이어스테이트에서 ID를 플레이어 정보에 저장한다음, UI에 등록하기 위해 컨트롤러로 보내준다.- SerUserID는 C++에서 구현해주었다. 5. 컨트롤러에서 위젯으로 최종 전달해주면 6. ID등록이 완료된다.- ID로 채팅도 가능하다 UE5 - 채팅시스템(싱글) 1. 위젯 블루프린트를 생성해준다. 2. Text Box를 CanvasPanel아래에 넣어주고 위치를 잡아준다.- 변수 체크를 해준다. 3. Vertical Box를 추가하고 아래에 Scroll Box를 넣어준다. -스크롤 박스는 다음과 같이 설정했다.-변수 체크도 해준다. 4. 그 외 필요한 UI들을 추가해준다. 5. TextBox를 생성해줄 위젯 블루프린트를 하나 더 만든다.-TextBox를 넣고 변수체크를 해준다. 6. 다시 돌아와 Graph로 넘어간다. 7. String을 인풋받는 AddChat 함수를 생성하고, 채팅메세지를 받을 String Array 변수를 생성한다. 8. 노드를 이용해 함수를 작성한다.- 아까 만든 TextBox를 위젯으로 생성해 메세지를 넣고 ScrollBox에.. UE5 | C++ - 난수 생성 언리얼과 C++을 포괄해서 난수를 생성하는 방법에는 여러가지가 있다.함수마다 속도와 난수 품질이 달라 목적에 따라 선택해 사용할 수 있다.대표적인 함수 몇개만 언급해보고자 한다. 1. FMath::Rand() (RandRange(Min, Max)) ( 언리얼 메소드)- 반환값 : int32- 범위 : 0 ~ RAND_MAX(32767) 사이의 정수(RandRange(Min, Max)는 Min~Max사이의 정수)- 속도 : 빠름- 난수 품질 : 낮음(패턴 있음)int32 randNum = FMath::Rand(); 2. FMath::FRand() (FRandRange(Min, Max)) (언리얼 메소드)- 반환값 : float- 범위 : 0.0 ~ 1.0 사이의 부동소수점 (FRandRange(Min,.. UE5 - 포스트프로세스 머티리얼 언리얼엔 여러 비주얼 기능이 많지만 어떤 기능은 리소스를 많이 잡아먹곤 한다.그럴땐 편법이라고 하긴 그렇지만 우회해서 비슷한 기능을 구현할 수 있다. 포스트 프로세스를 이용해 뷰포트 위에 직접 효과를 덧씌워주는 것이다. 예시 1. 포그안개는 대표적인 '이쁘고 비싼' 이펙트이다.안개를 깔아놓으면 신비로운 분위기, 평화로운 분위기같은 긍정적 분위기부터공포 분위기, 긴장된 분위기 등의 부정적 분위기까지 다양하게 연출이 가능하다.그러나 그만큼 리소스 비용 또한 비싸다.욕심내서 잘못 깔았다간 대가로 프레임을 상당히 지불하게 될 수 있다.그럴땐 포스트 프로세스 머티리얼로 상대적으로 가볍게 비슷한 효과를 낼 수 있다.→DepthFade :기능 - 카메라와 객체 표면 간의 깊이 차이를 기반으로 0에서 1사이의 스칼라 .. UE5 - 포스트 프로세스 머티리얼 : 아웃라인 저번주에 포스트 프로세스 머티리얼을 활용한 오브젝트 아웃라인 표시에 대해 배웠다.이해되지 않은 부분이 있음에도 과제때문에 복습을 못하다 오늘에서야 다시 잡아봤는데 보통 난해한게 아니다.일단 작성 노드는 다음과 같다.기본 설정은 위와 같고 아래와 같이 설정을 변경해주면선명한 이미시브 색 출력까지 얻을 수 있다. 이렇게 작성하며 돌이켜보다보니 이해가 갔다.역시 복습은 필수다. 가장 헤맨 부분은 처음 해상도와 관련된 부분이다.아무리 생각해도 이해가 가지 않았다. ViewSize는 현재 뷰포트의 해상도를 출력하는 노드인데, 결국 버림에 Clamp를 걸어서 값은 (2,2)가 나온다. 그럼 그냥 (2,2)를 곱해주는 것과 무슨 차이일까. 한참을 헤매고 찾았다.해상도별 차이 보정은 SceneTexelSize가 맡고있.. UE5 | C++ 개발 - TMap을 활용한 무기 스왑 무기 스왑을 구현해야했다.처음엔 팀원분이 TSubclassOf 를 이용해 무기클래스별 컴포넌트를 구현해주셔서 스왑자체는 간편하게 구현이 가능했다.그러나 문제가 발생했다. 스왑할때마다 탄알 정보가 초기화됐다. 그래서 게임인스턴스에 정보를 저장하는 방법을 구현해보고자 했지만, TSubclassOf는 클래스유형을 저장할 뿐 인스턴스를 생성하는 것이 아니기 때문에 멤버변수값을 가져올 수가 없었다.그래서 액터는 따로 생성해놓고 변수 변화를 해당 액터에 저장하면서 값을 불러올까 했지만, 그것도 뭔가 한다리를 더 거치는 느낌이라 내키지 않았다. 결국 TSubclassOf 를 포기하고 새로 작성하기로 했다. 어떤 방법이 좋을까 구상해보다 처음엔 액터를 매번 가져다 붙이는 방법을 생각했다.무기 소켓과 무기별 주머니소켓을.. 이전 1 2 3 4 5 ··· 8 다음