3D 심화 강의를 다 들었다.
추후에 강의를 필요한 부분만 다시 들으면 좋을 것 같다.
멀티 플레이를 구현하는 방법도 배웠는데,
아직 너무 어렵다.
후발대 강의에서는 Stack과 Heap에 대해 배웠다.
이전에 포인터에 대해 공부를 조금 했어서 이해는 쉬웠다!
Photon
Stack & Heap
포톤 (Photon)은 Exit Games에서 개발한 멀티플레이어 게임 개발을 위한 네트워크 엔진이다.
Cross-platform: 포톤은 다양한 플랫폼 간에 통신을 지원한다.
이는 PC, 모바일, 콘솔 게임에서 멀티플레이어를 지원한다.
Real-time, Multiplayer: 포톤은 실시간 멀티플레이어 게임 개발에 초점을 맞추고 있다.
Scalability: 포톤은 클라우드 기반 서버를 사용하여 게임의 플레이어 수에 따라 자동으로 확장되는 기능을 제공한다.
Reliability: 포톤은 데이터 전송에 대한 높은 신뢰성을 제공한다.
1.1. ConnectUsingSettings 메서드
PhotonNetwork.ConnectUsingSettings();
이 메서드를 호출하면, 앱이 포톤 클라우드에 연결된다.
연결 상태는 PhotonNetwork.IsConnected
로 확인할 수 있다.
1.2. CreateRoom 및 JoinRoom 메서드
PhotonNetwork.CreateRoom("RoomName");
PhotonNetwork.JoinRoom("RoomName");
CreateRoom 메서드는 새로운 방을 만들고, JoinRoom 메서드는 이미 존재하는 방에 참가한다.
1.3. Instantiate 메서드
PhotonNetwork.Instantiate("PrefabName", position, rotation);
포톤 네트워크를 통해 새로운 게임 오브젝트를 생성한다.
이 메서드는 Unity의 Instantiate 메서드와 유사하나, 네트워크를 통해 동기화된다.
MonoBehaviourPunCallbacks
클래스는 포톤의 주요 이벤트에 대한 콜백 메서드를 제공한다.2.1. OnConnectedToMaster 메서드
public override void OnConnectedToMaster() { ... }
게임이 포톤 마스터 서버에 성공적으로 연결되면 호출된다.
2.2. OnJoinedRoom 메서드
public override void OnJoinedRoom() { ... }
로컬 플레이어가 방에 입장하면 호출된다.
2.3. OnPlayerEnteredRoom 메서드
public override void OnPlayerEnteredRoom(Player newPlayer) { ... }
다른 플레이어가 방에 입장하면 호출된다.
int, bool, float 등 기본 데이터 유형은 주로 스택(Stack)에 저장된다.
스택은 메모리의 한 부분으로서 함수 호출과 관련된 지역 변수 및 임시 데이터를 저장하는 데 사용된다.
클래스 인스턴스는 주로 힙(Heap)에 저장된다. (new ~ )
힙은 동적으로 할당된 메모리 영역으로서 객체와 데이터 구조를 저장하는 데 사용된다.
코루틴에서 yield return new WaitForSeconds(3);를 호출하면 3초마다 클래스 인스턴스가 힙 영역에 생성된다.
이렇게 생성된 인스턴스들은 가비지 컬렉터(Garbage Collector)에 의해 수거되기 전까지 힙에 쌓인다.
Destroy 함수를 호출하여 해당 객체를 파괴하더라도 인스턴스는 즉시 사라지지 않고 가비지 컬렉터가 실행되어야 제거된다.
Vector, Color, Quaternion과 같은 데이터 유형들은 구조체(Struct)로 정의되어 있다.
구조체는 값 형식(Value Type)으로 분류되며 일반적으로 스택(Stack)에 저장된다.
따라서 가비지 컬렉터의 관리 대상이 아니며 필요하지 않을 때 바로 사라진다.
하지만 클래스(Class)는 참조 형식(Reference Type)이므로 힙(Heap)에 할당되고 가비지 컬렉터가 수거하기 전까지 남아있다.
언제 어떤 것을 사용할까?
구조체는 작고 단순한 값을 나타내는 경우나 값 복사가 성능상 이점을 가져다주는 경우 등 특정 상황에서 사용한다.
하지만 보통은 클래스를 더 많이 활용한다. 클래스는 객체 지향 프로그래밍 개념을 구현하는 데 필수적이며, 다양한 기능과 상태를 포함할 수 있어 유연성과 확장성이 좋다.
면접 시 변수와 클래스 개념을 설명할 때 다음 사항들을 강조해 볼 수 있다.
무작정 기능의 뜻을 외우는 것 보다 자신이 이러한 개념들을 이해하고 활용해온 경험과 각각의 장단점에 대해서도 이야기하는 것이 좋다.
개인 과제 기능 구상하기!