내일배움캠프 90

팀 프로젝트 - 오브젝트 스폰 시점 수정, 로딩 씬 추가

변경점UGS 인증을 별도의 클래스로 만들어주었습니다. 또한 UGS에 로그인을 한 뒤 Vivox에 로그인 하도록 변경하였습니다.public class NetworkAuthenticate : MonoSingleton{ public TMP_InputField nameInput; //로그인 성공시 호출 public event Action OnAuthenticateSuccessEvent; private readonly string loginText = "Connecting"; protected async override void Awake() { Create(); if (Instance != this) { Destroy(ga..

면접관련 - 객체지향 프로그래밍과 유니티 생명주기

객체지향절차지향이 코드간의 순서를 중요시한다면 객체지향은 코드를 담고있는 객체간의 관계를 중요시하는 패러다임 입니다. 객체지향에서는 클래스와 인스턴스가 존재하며, 클래스는 객체에 필요한 속성과 기능에 대한 정보를 가지고 관리하며,인스턴스는 클래스를 기반으로 실제 메모리에 할당된 내용을 뜻합니다. 그리고 객체지향 프로그래밍에는 캡슐화, 추상화, 상속, 다형성의 4가지 특징이 있으며캡슐화는 접근 제어자를 통해 특정 정보를 은닉하면서 작성한 코드를 재활용하는 특징추상화는 공통된 기능이나 속성을 묶어서 제공하는 특징상속은 부모 클래스의 기능을 그대로 물려받으면서, 추가 기능을 구현할 수 있는 특징다형성은 변수명, 함수명이 같아도 다른 기능을 할 수 있게되는 특징입니다. 생명주기유니티의 생명주기는 별도로 호출되지..

팀 프로젝트 - 리팩토링 대상 정리

NetworkConnectController - Awake 에 NetworkGameObject 생성 기능NetworkSpawnController 클래스를 만들면서, 네트워크 오브젝트의 생성, 삭제를 이 클래스에서 관리하는 방향으로 잡았음, 임시로 넣어준 기능의 위치 변경 필요LobbyManager - 인증 메서드 Authenticate()인증 시스템 자체를 별도의 클래스로 빼는것이 좋아보임LobbyManager - 로비 정보 새로고침 메서드 - RefreshLobbyInfo()메서드 내에 준비 상태 확인 로직, 게임 시작시 로직이 들어가있는 상태이 로직들을 별개의 메서드로 빼고, 메서드를 호출시키는것이 직관적일수 있다고 생각중VivoxController - 로그인 관련 메서드 SetupVivox()UGS..

팀 프로젝트 진행 - 멀티플레이 구현

팀원이 제작한 플레이어 오브젝트를 네트워크 오브젝트화 하여 멀티플레이를 구현하였습니다. 캐릭터 생성 로직네트워크 오브젝트를 스폰하기 위한 클래스를 생성해주었습니다.이후 모든 오브젝트의 생성을 이 클래스가 당담할 예정입니다.public class NetworkSpawnController : MonoSingleton{ public Transform profassorSpawnPoint; public Transform studentSpawnPoint; public NetworkObject playerPrefab; protected override void Awake() { Create(); if (Instance != this) { ..

팀프로젝트 진행 - 재시작 문제 해결

호스트와의 연결이 끊길경우, 호스트가 서버를 종료했을경우 클라이언트 플레이어가 로비로 돌아오도록 수정해주었습니다.public class NetworkConnectController : MonoBehaviour{ public NetworkObject networkGameManager; private void Awake() { if (NetworkManager.Singleton.IsHost) { NetworkObject netGameManager = Instantiate(networkGameManager); netGameManager.Spawn(true); } } //게스트 플레이어의 경우, 서버와 연결이..

Netcode - NetworkObject, NetworkBehaviour

NetworkObject 서버를 통해 작동해야하는 오브젝트에 붙여주는 컴포넌트호스트측에서 Instantiate 를 한 뒤, Spawn을 해서 클라이언트측에서 해당 오브젝트가 생성됨클라이언트측에서는 오브젝트를 생성, Spawn 할 권리가 없음Spawn(false) 를 할 경우, DontDestroyOnLoad 가 붙은 오브젝트로 생성됨(기본값이 true, 씬을 넘어가면 파괴됨)호스트측에서 오브젝트를 생성하고, SpawnWithOwnerShip() 을 사용하여 입력한 클라이언트 ID 의 소유로 생성해 줄 수 있다Spawn시 유니티 생명주기중 Awake 이후에 스폰된다, 따라서 Awake를 사용할 수 없다NetworkBehaviourNetworkManager 와 별도로 IsHost, IsClient 등의 플래..

팀 프로젝트 - Vivox 조작 UI 제작

좌측 하단에 다른 참가자가 입력을 할 경우 이를 시작적으로 표시해 줄 수 있는 HUD UI와, 보이스채팅 음량을 조절할 수 있는 UI를 제작하였습니다. 보이스채팅 채널에 입장할 때, HUD UI를 생성해주는 코드입니다.public class VoiceChatSetter : MonoSingleton{ public List chatList = new List(); public RosterItem hudUiPrefab; public Transform hudParentPosition; protected override void Awake() { Create(); if (Instance != this) { Destroy(gameO..

팀프로젝트 - 프로토타입 로비 완성, Vivox 연동 시작

레디 기능, 방 떠나기 기능, 강퇴기능을 로비에 추가하고, 게임 시작시 Relay를 통해 연결하는 내용까지 구현하여 프로토타입 로비를 완성하였습니다. 위의 사진과 같이 게스트 참여자의 경우 Ready 버튼이 활성화 되며, Ready 버튼을 누를경우 준비가 완료되었다는 뜻으로 체크 이미지가 표기됩니다.호스트의 경우, Ready 버튼 위치에 Kick 버튼이 활성화되며, 이 버튼을 누를경우 참여자가 강퇴되게 됩니다. 또한 호스트 플레이어의 경우 Kick, Ready 버튼이 모두 비활성화 됩니다. 또한 우측 아래 Leave Lobby 버튼을 눌러서 로비에서 나갈 수 있으며 호스트가 로비를 떠날경우 로비 게스트 참여자도 강제로 로비에서 내보내는 방식으로 제작하였습니다.또한 게임 시작 버튼의 경우 모든 참여자가 준..

팀 프로젝트 진행 - 프로토타입 로비 제작

UGS의 Lobby 기능을 사용하여 로비를 생성하고, 방 코드를 입력하여 생성된 로비에 입장할 수 있도록 만들어주었습니다. 먼저 로비기능을 관리하는 클래스입니다.제네릭 싱글톤이 현재 씬을 넘어가는 형태로만 제작되어있기 떄문에, Awake를 재정의하여 씬을 넘어가지 않도록 만들어주었습니다.public class LobbyManager : MonoSingleton{ public TMP_InputField nameInput; public TMP_InputField roomCodeInput; //UI관리용 이벤트 //로비에 참여하면 호출 public event Action OnJoinLobbyEvent; //로비에서 나가면 호출 public event Action OnLea..

팀프로젝트 진행 - UGS 연결

UGS의 Lobby, Relay, Vivox 를 이용하여 멀티플레이를 구현할 예정이기 때문에, 프로젝트에 UGS를 연결하게 되었습니다. UGS 페이지에서 신규 프로젝틀를 등록할 경우 해당 프로젝트의 ID를 발급받을 수 있습니다.이 아이디를 유니티 에디터에 등록하면 UGS에 프로젝트를 연동하여 UGS 시스템을 이용할 수 있습니다. 에디터에서는 Edit - Project Setting - Services 에서 UGS 에 연결 할 수 있습니다.프로젝트를 생성했거나 생성할 조직을 선택한 뒤, Use an existing cloud project 를 선택하면 사전에 만들어준 프로젝트를 선택하여 ID를 등록할 수 있으며Create a new cloud project 를 선택하면 새로운 프로젝트를 생성하여 ID를 발..