내일배움캠프 103

팀 프로젝트 마무리 - Vivox 와 UI 전략 패턴

음성채팅을 위해 Vivox를 사용하면서, Vivox를 관리하는 클래스와 음성채팅과 관련된 옵션을 만들어주었습니다. 채널 관리 클래스 -  VivoxController게임 시작시, Vivox 채널에 참여하고, 종료시 채널에서 나가는 기능 구현한 클래스 입니다.기획당시 플레이어의 상태에 따라 음성채팅 연결을 조작할 가능성을 생각하였으며, 해당 내용을 구현했다면 이 클래스에서 조절하게 되었을 것입니다.더보기public class VivoxController : MonoSingleton{ private string nowChannelName; public async void JoinVoiceChannel(string channelName) { try { ..

팀 프로젝트 마무리 정리 - 멀티플레이 구현

팀 프로젝트 종료 기한이 다가옴에 따라 최종적으로 작성한 코드들을 정리하는 시간을 가져보고자 합니다. 게임 기획상 멀티플레이를 구현하게 되었고, 멀트플레이에 사용되는 오브젝트의 클래스들은 NetworkBehavior 를 사용하여 구현하게 되었습니다.스폰을 위한 클래스 - NetworkSpawnController멀티플레이를 준비하면서, 멀티플레이에 동기화 되는 오브젝트들은 서버측에서 스폰을 해주어야 사용이 가능합니다.스폰 기능은 NetworkObject 에 메서드로써 구현되어있으며, NetworkBehavior 를 가진 클래스는 해당 NetworkObject 컴포넌트를 반드시 가지고 있어야합니다.더보기스폰 컨트롤러public class NetworkSpawnController : MonoSingleton{..

팀 프로젝트 마무리 정리 - 로비

팀 프로젝트 종료 기한이 다가옴에 따라 최종적으로 작성한 코드들을 정리하는 시간을 가져보고자 합니다. 가장 먼저 멀티플레이를 구현하면서 만들어준 로비 관련 시스템 입니다. 먼저 로비 시스템의 구조는 이러합니다 UGS 인증 (Authenticate) - 로비 생성 or 참가 - 로비 내 준비 완료 - 릴레이를 통한 포트 연결 이후 NetworkManager를 통해 클라이언트와 호스트가 연결되고, 호스트의 씬 변경 요청을 통해 게임씬으로 넘어가게 됩니다. UGS 인증 - NetworkAuthenticate 클래스UGS 에 익명으로 로그인한 뒤, Vivox 에도 익명 로그인을 실행하는 클래스입니다.public class NetworkAuthenticate : MonoSingleton{ //로그인 성공시 ..

팀 프로젝트 - 퍼즐 힌트 시작 수정

퍼즐의 힌트를 시작할 때, 힌트를 보고 정보를 말해주어야하는 쪽은 교수측 플레이어지만, 그 트리거를 작동시키는것은 학생측인것이 불합리하다고 생각하여 퍼즐의 힌트를 받는 방법을 바꾸어주었습니다.석탑에 교수측 플레이어가 상호작용을 할 경우, 퍼즐이 활성화되며 힌트인 촛불이 작동하도록 변경해주었습니다.석탑의 경우, 작동시 Rpc를 보내는 역할만 하게 됩니다.public class PuzzleStartObject : MonoBehaviour, IInteractable{ public string GetInteractText() { return "만져보기"; } public void Interact() { GameManager.Instance.repeater.Pu..

팀 프로젝트 - 아이템 무작위 배치

맵을 구성함과 동시에, 아이템을 무작위로 배치하는 기능을 만들어주었습니다.노란색 아이콘이 아이템이 배치될 위치를 지정해둔 오브젝트들 입니다. 맵 데이터에 아이템이 생성될 위치를 가진 부모 오브젝트를 등록시켜둔 상태이며, 각 건물 프리팹 내에 아이템이 스폰될 수 있는 위치를 지정하는 빈 오브젝트를 만들어둔 상태입니다. 맵 프리팹은 생성되면서 부모 오브젝트의 자식 오브젝트들을 전부 가져온 뒤, 리스트에 Transform 을 저장하도록 만들어주었습니다.public class MapData : MonoBehaviour{ //...생략 private void Awake() { foreach (Transform t in studentItemSpawnPosParents) { ..

팀 프로젝트 - 프리팹 용량문제

기존 프리팹에 UModeler를 사용하여 문 부분을 잘라내고, 해당 부분을 문으로 사용하려 하였으나, 해당 작업 후 깃 허브에 올리는 과정에서 프리팹의 용량이 너무 커서 올리지 못하는 문제가 발생하였습니다. 해당 문제의 원인을 찾던중, UModelerize 로 변환한 프리팹이 원본 프리팹보다 과도하게 용량이 큰점을 발견하였습니다.원본 용량이 322KB 인데 반해, UModeler로 변환한 파일의 용량이 90,000KB를 넘는 모습입니다. 이 문제의 원인은 사용중인 모델이 프리팹을 조합해둔 형태였기 때문에 발생하였습니다.원본의 경우, 하나의 프리팹을 여러번 사용하여서 용량이 크지 않았지만, UModeler로 변환한 모델의 경우 같은 형태의 오브젝트도 각각 다른 매쉬를 사용하고 있는것을 발견하였습니다.이렇게..

유니티 - 터레인(Terrain)

유니티에서 3D 게임의 광범위한 지형을 만들 때, 터레인을 사용하여 구현하게 됩니다. 터레인의 경우, 하이라키창에서 우클릭 후, 3D Object - Terrain 을 선택하여 생성 할 수 있습니다.이때, 생성과 동시에 Assets 폴더에 생성한 터레인의 데이터를 저장하는 Terrain Data 가 생성됩니다.생성된 터레인은 인스펙터에서 Terrain 컴포넌트와, 콜라이더 컴포넌트를 가지게 됩니다.Terrain 컴포넌트의 5개의 버튼을 통해 터레인 오브젝트를 조작 할 수 있습니다. 첫번째 버튼은 이웃 터레인을 생성하는 버튼입니다.선택시 현재 존재하는 터레인의 4방향에 녹색 기즈모가 나타나며, 기즈모로 표기된 범위를 클릭하면 해당 위치에 터레인을 추가 생성합니다.Mirror 모드를 사용하여 생성할경우, 생..

제네릭 SO

데이터 관리시 스크립터블 오브젝트에 리스트를 사용해서 관리하는 경우가 자주 있었는데, 관리해야하는 데이터들이 여러개일때 관련 내용을 하나의 스크립터블 오브젝트 클래스로 관리할 수 없을까 해서 내용을 찾아봤습니다. 스크립터블 오브젝트의 기본이 되는 클래스를 제네릭으로 선언한 뒤, 해당 클래스를 상속시키면서 관리할 데이터타입의 제네릭을 지정해주는 방식입니다.public class SOList : ScriptableObject{ public List list;}[CreateAssetMenu(fileName = "DataSOList", menuName = "DataSO/Map List")]public class MapListSO : SOList{} 현재는 이런 방식이면 상속 시키는 의미가 없어보일 수 있으..

팀 프로젝트 - 조작 관련 UI 추가, 로비 배경 추가

로비 화면에서 조작법을 볼 수 있는 UI를 제작해주었습니다.조작 키 변경의 경우, 구현 우선순위가 낮다고 판단하여 차후 시간이 남을경우에 구현하게 될 듯 합니다. 이 외에도 로비 배경으로 사용할 오브젝트들을 배치해 두었으며, 맵의 추가 유령 스폰, 아이템 스폰 시스템을 제작중에 있습니다.※바닥 재질의 텍스쳐를 구해야할 것 같습니다... 생각중인 내용UI 제작중, 현재로써는 해외 출시등을 전혀 고려하지 않고 제작중인 상태입니다.현업에서는 해외 진출등을 고려하는 경우가 많기 때문에, 현재처럼 TMP 에 직접적으로 텍스트를 입력하기보단, 외부에 어떤 텍스트를 사용할지, 어떤 폰트를 사용할지를 저장한 뒤, 사용할 언어를 선택하여 표기할것으로 생각됩니다. 폰트의 경우 사용되는 폰트가 제한적이기 때문에 SO를 사용..

팀 프로젝트 - 로비 UI 디자인 변경

로비 UI의 디자인을 변경하고, UI 활성화시 연출이 발생하도록 수정해주었습니다. 먼저 UI의 책을 넘기는 효과는 무료 에셋을 사용하여 구현해주었습니다.https://assetstore.unity.com/packages/tools/animation/book-page-curl-55588 Book - Page Curl | 애니메이션 도구 | Unity Asset StoreUse the Book - Page Curl tool from Abdullah Aldandarawy on your next project. Find this & more animation tools on the Unity Asset Store.assetstore.unity.com 해당 에셋의 Book.cs 에 추가적으로 FlipEvent 메..