[Unity] 로컬 멀티플레이 가이드 !

네,가능합니다 ㅣ 2024. 10. 18. 16:17

지금 팀프로젝트를 진행중인데, 로컬멀티플레이는 계산해두지 않고 제작하고있다.

 

이번주 주말에 로아숙제가 빨리 끝난다면 로컬멀티플레이는 내가 꼭 하고싶은 부분이다.

 

하지만 막상 하려고 할때 어디부터 어떻게 해야할지 정말 막막할것이다.

 

그런 나를 위한 ! 로컬 멀티플레이를 추가하기위한 TIL겸 가이드 !! 

 

체크리스트 !

1. 입력 시스템

  • Unity New Input System을 사용하는 경우 각 플레이어의 Action Map를 설정하고 Player1, Player2 등으로 분리
  • Player Input Manager클래스에서  플레이어마다 입력을 처리할 수 있도록 수정

2. 카메라 시스템 (싱글 카메라로 사용할지 분할 카메라로 사용할지 결정 우리는 싱글로 충분 !)

 

3. UI 및 HUD 시스템

  • 각 플레이어의 체력, 스코어 가 분리되어 표시하기
  • 공용UI는 잘 분리하여 놔두기
  • 개인 UI의 색과 캐릭터 색을 맞추고 캐릭터 머리위에 어떤 화살표 등으로 표시하는것도 매우 좋아보임.

4. 게임 로직 및 데이터

  • 체력, 스코어, 능력 등을 개별적으로 관리하는 구조로 변경할것 (상자아이템은 누가먼저 먹냐로 재밌을듯 ?)
  • 기존의 한명의 플레이어 로직을 건드는것 X 확장을 하여 두명의 플레이어가 사용하는것을 만들것 !!

5. 충돌 및 상호작용 시스템

  • 플레이어와 불 환경등의 충돌이 개별적으로 잘 이루어지는지 체크할것

6. 게임 상태 관리

  • 한 플레이어가 죽어도 다른 플레이어가 남아있으면 게임 진행이 멈추지 않도록 설정했는지 확인할것

7. 플레이어 스폰위치 조정

 

8. 사운드 및 효과 확인

  • 각플레이어의 효과사운드(점프) 같은것들이 분리되어 출력이 잘 되는지 체크하기
  • 동시에 피격됐을때 작동이 잘 되는지 확인하기

9. 씬 조정하기

  • 혼자 게임할지 두명에서 게임할지 정하는것이 필요 (게임 가이드도 필요해 보임 키 안내 등)
  • 캐릭터 선택 시 첫번째 플레이어의 캐릭터 선택 이후 두번째 플레이어의 선택 알려주는것도 필요해 보임

 

아래는 해당 가이드를 바탕으로 우리 프로젝트에서 필요한 부분을 그대로 따라하면 될 정도로 정리함.

 

스크립트별 분리를 해두었음

 

게임매니저에 싱글, 멀티 선택한걸 저장해두고

싱글플레이시 Player1만 적용하고 멀티플레이 선택시 2도 함께 하는식으로 로직을 변경하면됨

 

싱글 혹은 멀티 선택을 받으면

public enum GameMode { SinglePlayer, MultiPlayer }
public static GameMode currentGameMode;

public void StartSinglePlayer()
{
    currentGameMode = GameMode.SinglePlayer;
}

public void StartMultiPlayer()
{
    currentGameMode = GameMode.MultiPlayer;
}

위의 열거형을 바탕으로 로직을 수정해나감

if (GameManager.currentGameMode == GameMode.MultiPlayer)
{
    // 멀티로직
}
else
{
    // 싱글로직
}

 

1. PlayerController 및 Player

  • Playe1과 Player2를 프리팹으로 분리해주기 (이미 분리 돼있는듯 캐릭터 선택이 아닌, 왼쪽이 1번 오른쪽이2번으로 미리 고정해두는것도 좋아보임)
  • PlayerInputController에서 Onmove 및 Onjump를 각 플레이어가 독립적으로 조작할수있게 설정하기 ?
  • 캐릭터 선택이 끝나고 시작했을때 두명이 동시에 스폰되게 바꾸기(이건 게임매니저에서 하면 될듯)

2. InputPlayerInform 및 PlayerInformManager

  • 닉네임 입력을 분리해서 받을것
  • 각 캐릭터에 분리해서 받은것을 나눠서 할당해줄것

3. Score 및 ScoreManager

  • ScoreManager에서 두명의 점수를 따로 관리해줄것

4. RandomBoxSpawner 및 RandomEffectManager

  • 두 플레이어 모두에게 동일한 효과를 주도록 적용할것
  • 시간이 느려지는것은 게임자체를 건드는것이고 자석효과같은부분에서 수정이 필요함

5. UIManager

  • 체력과 점수를 개별표기할것

 

 

유니티에서 할일 !

 

1. 플레이어를 각각의 PlayerController로 스폰시키고 입력을 따로 할당하도록 설정

 

2. Input System 에서 Player2의 Input System만들어주기

 

3. UI 추가해주기