1인 개발/PushAndSlash

푸쉬앤슬래시 개인 프로젝트 26일차

잼잼재미 2024. 6. 15. 17:38

구현 내용


1. 멀티 플레이 승패 판정 구현


 

  • 상대 Player를 떨어뜨리면 승리
  • 상대가 접속을 종료하면 승리
  • 나의 Player가 떨어지면 패배
  • 승리 시간에 따라, 획득 Coin, Exp 설정

 

private void Update()
{
    if (!_photonView.IsMine)
    {
        if (!IsSurvive() && !IsFinish)
        {
            IsFinish = true;
            _stageController = GameObject.FindWithTag("StageController").GetComponent<StageController>();
            _stageController.GameClear();
        }
    }
    else
    {
        if (!IsSurvive() && !IsFinish)
        {
            IsFinish = true;
            _stageController = GameObject.FindWithTag("StageController").GetComponent<StageController>();
            _stageController.GameOver();
        }
    } 
}

 

Room에 있는 Player의 IsMine을 판별하여 각각 Die 했을 때, 나의 PC에서 승패에 따른 Panel을 활성화했다.

 

 

2. 강제 종료 패널티 구현


private void OnApplicationQuit()
{
    if(CurrentSceneName == "MultiBattleScene1")
    {
        if(GameManager.I.DataManager.GameData.RankPoint >= 1) GameManager.I.DataManager.GameData.RankPoint--;
        if (GameManager.I.DataManager.GameData.Lose >= 1) GameManager.I.DataManager.GameData.Lose++;

        GameManager.I.DataManager.DataSave();
    }
}

 

다음과 같이 OnApplicationQuit() 함수를 통해, 멀티 대전 중, 강제 종료를 하게되면 받는 패널티를 구현했다.

 

https://kkln2486.tistory.com/290

 

게임 종료

public void ExitGame(){ // 현재 실행 환경이 에디터이면 에디터 플레이모드 종료 #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; // 현재 실행 환경이 에디터가 아니면 프로그램 종료 #else Application.Qu

kkln2486.tistory.com

 

 

회고


오늘은 멀티 플레이에서 승패 판정을 구현했다. 그리고 승패에 따라 RankPoint, Win, Lose 등 변수 값을 설정하도록 했다. 이제 위 변수들로 랭킹 시스템을 만들것이다. 멀티 플레이의 승패 판정을 구현하면서 게임을 강제 종료를 해버리면 남은 플레이어는 승리하지만 강제 종료한 플레이어는 아무런 패널티가 없었다. 그래서 위와 같은 경우에 대해서 찾아보니 OnApplicationQuit() 라는 게임 종료 시, 실행되는 함수가 있었다. 이 함수로 강제 종료에 대한 패널티를 설정할 수 있었다. 이제 남은 것은 랭킹 시스템 구현, 광고 보상 구현, 보스 구현 뿐이고, 전체적인 게임 밸런스만 조절하면 기획했던 게임이 완성이다. 멀티 플레이 중, 플레이어가 공격을 할 때, 공격의 동기화가 조금씩 씹히는 현상이 있지만 무료 버전의 포톤을 사용하다 보니, 실시간 3D PVP 게임을 구현하는데 한계가 있다고 생각한다. 추후, 개선을 할 수 있다면 개선하도록 하겠다!