2024/12 17

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

변경점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..