Metaverse 62

Crescendor - Scene Loading 구현

맨 처음 실행했을 때, Main Scene을 로딩하는 화면을 구현했다. 로딩은 각각 처음 실행 시, 연습 모드 진입 시, 실전 모드 진입 시에 구현할 예정이다. 각각 로딩 화면을 다르게 할거라 리팩토링이 필요할거다. 디자인을 하면서 기능 구현을 동시에 진행 중이다. 우리 팀은 UI/UX 관련 피드백을 주로 받았기 때문에 더 신경을 쓸 예정이다. 로딩이 90% 이상 진행되면 투명도를 올린다던가 로딩 바 아래에 텍스트를 추가하여 진행률을 보여준다던가 등의 작업을 하려고 한다. [SerializeField] Slider progressBar; private void Start() { StartCoroutine(Loading()); } IEnumerator Loading() { yield return null;..

Metaverse/Unity 2024.04.13

OVRInput - 제스처 인식

진짜 어이없게도... 컨트롤러 인풋을 넣으려고 테스팅을 하다가 발견하고 냅다 노선을 변경했다. 우리 시스템은 컨트롤러가 필요없는 더 편리한^^ 시스템이 될 것 같다. private void Update() { if (OVRInput.GetDown(OVRInput.Button.Three)) { LeftHandPosition(); } } private void Update() { if (OVRInput.GetDown(OVRInput.Button.One)) { RightHandPosition(); } } Button.One은 컨트롤러의 A버튼, Button.Three은 컨트롤러의 X버튼에 해당된다. 그런데 이게 각 양손의 pinch gesture에 해당하기도 하더라.. 그래서 다른 제스처도 해당되는게 있나 찾..

Metaverse/Unity 2024.03.10

Crescendor - Ranking System

우리 시스템은 사용자가 시간과 공간에 제약을 받지 않고 피아노를 학습할 수 있게 하고, 피아노 학습 과정에서 중도 포기하지 않도록 재미를 주는 것이 목적이다. 그래서 랭킹 시스템을 넣기로 했고, 실력이 높은 사람, 플레이 횟수가 많은 사람일수록 랭킹 점수를 높게 산정하여 콘텐츠 내의 경쟁을 유의미하게 한다. 만약 랭킹 시스템을 구현하는데 DBMS를 사용한다면, DB에 데이터를 저장하고 저장된 데이터를 정렬하여 다시 읽어오는 과정에서 디스크에 직접 접근해야 하므로 오래 걸릴 것이다. 그래서 보통 많이 사용하는 것이 Redis이다. Redis는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스이며, DBMS와의 차이점은 다양한 자료구조를 제공한다는 것이다. Redis 고성능 키 - 값 저장소로서..

Build Tool

다양한 빌드 구성에 걸쳐 소스 코드를 빌드하는 프로세스를 관리하는 커스텀 도구 동작 방식 언리얼 기본 C++ 프로젝트 생성 시, 3개의 C# 파일이 프로젝트에 같이 생성된다. (프로젝트명).build.cs (프로젝트명).target.cs (프로젝트명Editor).target.cs build.cs는 빌드 옵션을 관리하고, target.cs는 빌드 타입을 정의한다. .uproject를 실행하거나, .sln 프로젝트에서 build 명령을 내리면 UBT 프로그램이 실행되면서 언리얼 프로젝트의 build.cs, target.cs 파일들이 C# 컴파일러에 의해 컴파일된다. 이후에 .cs 파일에 작성한 사양대로 빌드 과정이 진행된다. 왜 필요한가? 언리얼은 멀티 플랫폼에서 개발이 가능하고 멀티 플랫폼 빌드를 목표로하..

Metaverse/UE5 2024.02.01

Automation Tool

C# 사용 시 UE 관련 무인 프로세스를 스크립팅할 수 있는 호스트 프로그램 및 유틸리티 라이브러리 세트 작동 방식 자동화 프로젝트: 자동화 툴 실행 시 확장자가 .Automation.csproj인 Visual Studio C# 프로젝트로 저장된 모든 자동화 프로젝트를 찾아 컴파일 다음, 리플렉션을 사용하여 실행할 적절한 명령을 찾는다. 이러한 명령은 Build Command 베이스 클래스에서 파생된 클래스에서 구현되며 클래스 명으로 식별됨 자동화 도구 실행: Windows의 Visual Studio 디버거 또는 Windows, Mac 및 Linux의 검색줄에서 검색할 수 있다. 디버거 Commands 실행 Command line에서 Commands 실행 (Windows) 터미널에서 Commands 실행..

Metaverse/UE5 2024.02.01

STL - next_permutation

현재 탐색하고 있는 순열의 다음 순열을 구하고 true를 반환한다. 만약, 다음 순열이 존재하지 않는다면 false를 반환한다. 즉, 마지막 모든 순열의 경우의 수를 탐색한 뒤, false를 반환한다. template bool next_permutation(BidirIt first, BidirIt last) { auto r_first = std::make_reverse_iterator(last); auto r_last = std::make_reverse_iterator(first); auto left = std::is_sorted_until(r_first, r_last); if (left != r_last) { auto right = std::upper_bound(r_first, left, *left);..

Metaverse/복습 2024.02.01

STL - set

namespace pmr { template using set = std::set; } Time Complexity Red - Black Tree로 구현되어 search에 O(logn)의 시간이 걸리며, 삽입 및 삭제는 O(logn + a)의 시간이 걸린다. Red - Black Tree 자가 균형 이진 탐색 트리로, 다음과 같은 조건들을 만족한다. 모든 노드는 빨간색 또는 검은색이다. 루트 노드는 검은색이다. 모든 리프 노드(NIL)들은 검은색이다. 빨간색 노드의 자식은 검은색이다. (즉, 빨간색 노드가 연속으로 나올 수 없다.) 모든 리프 노드에서 Black Depth는 같다 (즉, 리프 노드에서 루트 노드까지 가는 경로에서 만나..

Metaverse/복습 2024.01.30

RPC

RPC(Remote Procedure Call)는 로컬에서 호출되지만 호출하는 머신과는 다른 머신에서 원격 실행되는 함수를 말한다. RPC 함수는 네트워크 연결을 통해 클라이언트와 서버 사이에 메시지를 전송할 수 있다. 이 기능의 주요 용도는 휘발성인 비신뢰성 게임플레이 이벤트를 위한 것이다. 사운드 재생, 파티클 스폰, 액터의 핵심적인 기능과는 무관한 일시적인 효과와 같은 작업을 하는 이벤트 등을 포함한다. RPC 사용하기 함수를 RPC로 선언하려면 UFUNCTION 선언에 Server, Client, NetMulticast 키워드를 붙여주기만 하면 된다. ex) 함수를 서버에서 호출되지만 클라이언트에서 실행되는 RPC로 선언하려면 UFUNCTION( Client ) void ClientRPCFunct..

Metaverse/UE5 2024.01.29

Network

Network 모드 유형 NM_Standalone 로컬 머신에서 실행되며 원격 머신에서 클라이언트를 받지 않는 서버를 나타낸다. 싱글 플레이어, 또는 멀티 플레이 게임에 적절하다. NM_DedicatedServer 로컬 플레이어가 없어 사운드, 그래픽, 사용자 입력, 기타 플레이어 관련 기능을 제거하여 보다 효율적인 실행이 가능한 전용 서버이다. 이 서버 유형은 신뢰 서버에서 호스팅되는 멀티 플레이어 게임에 사용되며, 경쟁형 MOBA, MMO, 온라인 슈팅 게임 등 퍼포먼스가 중요해서 신뢰성 있는 서버가 필요한 경우에 사용된다. NM_ListenServer 로컬 플레이어가 있는 서버로, 원격 플레이어에게도 접속을 허락한다. 이 유형의 서버는 데디케이티드 서버가 불필요한 경쟁 또는 협력 게임에 좋으며, 사..

Metaverse/UE5 2024.01.29