전체 글 151

프레임워크 - 리소스 매니저

Resources 폴더에서 프리팹이나 SO 등의 데이터를 가져오는 역할을 하는 매니저 입니다. 먼저 enum 형태로 리소스 폴더의 대분류, 소분류를 만들어주었습니다.소분류의 경우 사용하지 않는 경우도 있기때문에 None 을 만들어주었습니다.//파일 경로 (대분류)public enum EMajorType{ Data, Prefab, Sound}//파일 경로 (세부)public enum ESubType{ None, UI}일단 임시로 만들어준 상태입니다. 리소스 폴더의 내용이 늘어날때, enum 의 종류도 늘려주면 됩니다. 싱글톤의 경우, 별도로 만들어주어야합니다.더보기ResourceManager//리소스 파일에서 데이터를 가져오는 클래스public class ResourceManag..

팀 프로젝트 마무리 - 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로 변환한 모델의 경우 같은 형태의 오브젝트도 각각 다른 매쉬를 사용하고 있는것을 발견하였습니다.이렇게..