분류 전체보기 1019

GameLift Anywhere 플릿 - 2) 지역 생성 + 삭제

- 개요사용중인 AWS GameLift에 지역을 추가하여 AWS가 제공하는 리전이 아닌,로컬 환경이나 다른 회사의 클라우드 서비스를 AWS GameLift에서 사용할 수 있도록 설정한다 1) 지역 생성1 - 1) AWS Console 사용 사용중인 Identity Center 계정의 AWS Console에서Amazone GameLift Servers - Anywhere - 위치를 선택한다 위치 생성 버튼을 눌러서 지역을 생성할 수 있다 1 - 2) AWS CLI 사용 AWS CLI에서 표시된 부분에 "custom-생성할 지역의 이름"을 넣어주어 지역을 생성할 수 있다 2) 지역 삭제2 - 1) AWS Console 사용 생성한 지역을 삭제하고 싶다면 지역을 선택하고 "삭제" 버튼을 눌러 삭제할 수 있다..

GameLift Anywhere 플릿 - 1) AWS CLI 설치 및 설정

- 개요플릿(Fleet)은 "함대"를 뜻하는 단어지만게임 개발 측면에서는 "동일한 설정과 빌드를 공유하는 서버들의 묶음"으로 사용한다이러한 플릿을 만들고 설정하기 위해서는 2가지 방법을 선택할 수 있다AWS Console을 사용하여 웹 페이지에서 플릿을 제작 및 설정AWS CLI를 사용하여 터미널 창에서 플릿을 제작 및 설정 AWS Console을 사용하는 방법보다 AWS CLI를 설치하여 사용하는 방법이 훨씬 더 간단하고 편리하므로AWS CLI를 설치하고 사용할 수 있도록 설정한다 1) AWS CLI 설치https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html#sso-configure-profile-token-auto-sso Con..

언리얼 엔진 + GameLift 통합 - 최종) 포트 / 로그 / ProcessReady설정 + 패키징

- 개요ServerParameters 인스턴스에 대한 포트와 로그를 설정한다이후 설정이 완료된 ServerParameters 인스턴스를 사용하여 ProcessReady 함수를 호출하여 서버 프로세스가 모든 로딩을 마치고 외부 접속을 받을 준비가 되었음을 GameLift 서비스에 알려주도록 한다코드 작업이 완료된 후에 서버와 클라이언트 사이드의 프로젝트를 패키징하여실제 클라우드에서 테스트를 할 수 있도록 설계한다 - C++ 사이드1) ShooterGameMode 클래스 InitGameLift 함수에 위와 같이 3개의 로직을 추가한다각각 다음과 같다첫 번째 로직 : 커맨드인자로부터 포트 번호 관련 인자를 추출 + ServerParameters의 port 속성에 저장GameLift 서비스에서는 해당 포트를 사..

언리얼 엔진 + GameLift 통합 - 2) FServerParameters 설정 + OnStartGameSession / OnTerminate / OnHealthCheck 바인드

- 개요GameLift 서버 프로세스의 실행 파라미터를 갖고있는 ServerParameters 구조체의 인스턴스를 설정하는 로직을다른 함수로 분리하여 InitGameLift 함수의 부하를 감소시킨다또, AWS 공식 문서에서 가져온 코드를 프로젝트 진척도에 맞게 수정하여게임 세션 시작 + 서버 프로세스 종료 + 서버 프로세스 상태 확인에 맞게 호출할 함수를 바인드한다 - C++ 사이드1) ShooterGameMode 클래스 SetServerParameters 함수를 추가하여 ServerParameters 구조체의 인스턴스를 생성 + 설정한다 SetServerParameters 함수를 위와 같이 구성하였다해당 함수는 서버에서만 호출해야 하므로 WITH_GAMELIFT에 따라 조건부 컴파일하도록 설정한다로직..

유니티 엔진의 구성 - 36) Image 컴포넌트 VS RawImage 컴포넌트 + Sprite 타입 VS Texture 타입

- 개요 Sprite와 Texture는 유니티 프로젝트에서 사용할 이미지의 원본을 지정하는 방식을 의미하고,Image와 RawImage는 유니티 프로젝트에서 이미지를 사용하는 컴포넌트를 의미한다 1) Sprite 타입과 Texture 타입 Sprite와 Texture의 차이점은 위와 같다UI 등에서 이미지를 사용해야 하는 경우 가급적 Sprite 타입을 사용하는 것이 권장된다 1 - 1) Texture에서 Sprite 변환Sprite newSprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));image.sprite = newSprite; 위와 같이 기존 Text..

외적의 활용 (3) - 좌우 방향 판별

- 개요벡터의 외적은 sin 함수와 관련있는데, 이러한 성질을 이용하여 왼쪽과 오른쪽 방향을 판별할 수 있다 - 외적을 이용한 좌우 방향 판별 위와 같이 월드 공간의 y축 (0, 1, 0)의 y 벡터에 직교하는 평면에 캐릭터와 물체가 놓여있다이때 캐릭터의 정면을 향하는 시선 벡터 f와 캐릭터에서 물체로 향하는 벡터 v가 존재한다고 가정한다 만약 물체가 시선 방향의 왼쪽에 있다면 f × v 연산의 결과는 오른손 법칙에 따라 평면의 위쪽인 +y로 향햐고시선 방향의 오른쪽에 있다면 f × v 연산의 결과는 평면의 아래쪽인 -y로 향하게 된다따라서 이러한 외적의 성질을 활용하면 시선 방향을 기준으로 물체가 좌우 어디에 있는지 판단할 수 있다 - 외적 연산의 가공 남은 문제점은 외적의 결과값은 벡터이기 때문에 ..

외적의 활용 (2) - 법선 벡터

- 개요 벡터 외적이 가지는 또 하나의 중요한 성질은 두 벡터에 직교하는 벡터를 생성하는 것이다두 개의 벡터 u와 v의 외적에 대해 u와 v를 각각 내적하게 되면 항상 0의 결과값이 나오는 것을 확인할 수 있다따라서 외적의 결과는 두 벡터에 모두 직교함을 알 수 있다이때 선형 독립의 관계를 가지는 두 벡터의 선형 결합은 평면을 만드므로따라서 두 벡터의 외적은 두 벡터가 만드는 평면에 직교하는, 평면이 향하는 방향에 대한 벡터를 만드는 것이다 - 법선 벡터의 생성 3개의 점 P1, P2, P3를 결합하여 평면을 만들고 점 P2와 점 P3에서 점 P1을 뺀 2개의 벡터 v와 u를 생성한다이후에 2개의 벡터를 외적하면 세 점이 만들어낸 평면에 직교하는 벡터가 생성된다생성된 벡터는 평면이 향하는 방향을 나타내며..

유니티 엔진의 구성 - 35) Probuilder 불리언 메쉬 컷팅

- 개요 Probuilder 패키지의 불리언 메쉬 컷팅은 두 개 이상의 ProBuilder 메시를 사용하여 메시 간의 합집합, 차집합, 교집합 연산을 수행해 복잡한 3D 형태를 생성하거나 수정하는 도구를 의미한다해당 기능은 실험적 기능으로서 사용하기 위해 Edit - Preferences - ProBuilder에서Experimental Features를 활성화해야 한다 - 사용 방법 불리언 메쉬 컷팅을 사용하기 위해서는 상단 Tools - Probuilder - Experimental에서 사용할 수 있다 위와 같이 ProBuilder에서 생성한 메쉬를 드래그 앤 드롭하여 3가지의 연산을 진행할 수 있다 - 불리언 메쉬 컷팅의 3가지 연산1) Intersection(교집합) Intersection 연산..

UI 설정 - 5) 기존의 코드 수정 + 타이머와 장착한 무기 표현

- 개요플레이어가 Room에 입장하여 사용할 색을 선택한 이후에 타이머를 설정하여 게임의 제한 시간을 적용한다또, 플레이어가 현재 사용중인 무기를 표현하는 UI를 추가한다 - 스크립트 작업1) DisplayColor 클래스 + 그 외 기존에 사용하던 GetComponent 함수 대신 Util 클래스의 GetOrAddComponent 함수를 사용하여Start 함수의 실행 시점에서 가져오지 못한 컴포넌트를 참조한다또, 참조하는 다른 GameObject 역시 함수의 시점에서 다시 한번 검증하여 참조할 수 있도록 한다 2) PlayerWeaponChange 클래스 위와 같이 멤버변수를 추가한다weaponIcons 멤버변수 : 사용중인 무기의 이미지ammoAmounts 멤버변수 : 사용중인 무기의 탄창 수weap..

UI 설정 - 4) 접속한 플레이어의 이름 표시

- 개요같은 Room에 접속해있는 플레이어들의 이름을 표시하도록 설계한다 - 스크립트 작업1) PlayerLookAim 클래스 PlayerLookAim 클래스에서 처리하던 로컬 플레이어의 이름을 설정하는 로직을 제거한다 2) UI_NickName 클래스 Room에 접속해있는 플레이어들의 이름을 보여주는 UI_NickName 클래스를 생성한다멤버변수의 구성은 위와 같다names 멤버변수 : 플레이어들의 이름을 보여줄 TextMeshPro - TexthealthBars 멤버변수 : 플레이어들의 체력바 Start 함수를 위와 같이 구성하여 플레이어들의 이름 + 체력바 UI를 비활성화한다 3) DisplayColor 함수 UI_NickName 컴포넌트를 지니고 있는 UI를 멤버변수로 사용할 수 있도록 추가한다 ..