1인 개발/PushAndSlash

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

잼잼재미 2024. 6. 27. 11:48

트러블 슈팅


1. 멀티 공격 시, 통신 딜레이


PC -> 모바일

 

기존에 멀티 전투를 구현했을 때는 문제가 없이 잘 작동했는데, 개발을 진행하다보니 공격 시, 콜라이더가 작동하지 않는 버그가 생겼다. 모바일 -> PC를 공격하는 것은 정상적으로 작동되고, PC -> 모바일을 공격하는 것은 작동되지 않았다. 멀티의 통신 딜레이로 인해 모바일에서는 공격 콜라이더를 제대로 감지하지 못하는 것이라고 예상했다.

 

 

2. PhotonAnimatorView 동기화 시, 씹힘 현상


 

연속적으로 애니메이션이 실행되면 동기화가 어느정도 되지만, 한번씩 위와 같이 상대 PC에서는 동기화가 되지 않아서 애니메이션이 실행되지 않는다. 

 

 

 

Synchronize Parameters 또한 모두 Continuous로 설정했지만 위와 같이 애니메이션이 실행되지 않는 경우가 많았다. 그 이유는 Photon Animator View를 사용할 때, Trigger Parameters의 경우 주의할 점이 몇가지 있다. Trigger는 특성 상, 애니메이션 이벤트가 활성화 될 때, 활성화 되고 Update문이 실행되기 전, 비활성화 된다. GameObject의 컴포넌트는 위에서 부터 순서대로 실행되기 때문에 Trigger을 실행하는 코드가 실행되고, 무조건 PhotonAnimatorView 컴포넌트가 실행되야 한다. 그래서 PhotonAnimatorView 컴포넌트는 가장 아래에 존재해야 한다. 나의 경우, PhotonAnimatorView 컴포넌트를 가장 아래에 존재했지만, Trigger을 실행하는 코드가 같은 GameObject에 존재하지 않고, 외부 스크립트에서 실행되기 때문에 Trigger 실행 코드와 PhotonAnimatorView 컴포넌트 중, 어떤 것이 먼저 실행될지 알 수 없어서 위와 같은 현상이 생기는 것이라고 생각했다. 

 

 

private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        if (!_photonView.IsMine)
        {
            _atk = _playerCharacter.Atk;
            other.GetComponent<PlayerCharacter>().PhotonView.RPC("RPCPlayerNuckback", RpcTarget.AllViaServer, _playerCharacter.transform.position, _atk);
        }
    }   
}

[PunRPC]
public void PlayerAttackRPC()
{
    _anim.SetTrigger("Attack");
}

 

그래서 Trigger Parameter의 경우, PhotonAnimatorView를 통해 동기화 하지 않고, RPC를 통해 각자의 PC에서 개별적으로 함수를 실행해서 SetTrigger 코드를 실행하도록 수정했다.

 

 

 

RPC를 통해 Trigger을 실행해서 애니메이션 동기화가 씹히는 현상을 해결할 수 있었다!

 

 

3. 빌드 오류


 

어제 깃허브 Revert로 해결했던 빌드 오류가 다시 생겼다.. 아마도 GPGS와 Admob의 충돌을 피할 수는 없는 것 같다. 위 오류는 몇일간 구글링을 해도 결국 해결하지 못했던 내용이다. 결국, GPGS 사용을 포기하도록 했다. 애초에 GPGS는 뒤끝 서버의 회원가입을 위한 로그인 아이디를 받아오기 위한 용도로만 사용했다. 

 

 

public int IdSetting()
{
    int id = Random.Range(0, 10000);
    GameManager.I.DataManager.GameData.LoginID = id.ToString();

    return id;
}

 

대신 Random 함수를 사용해 랜덤 ID를 생성해서 회원가입을 진행하도록 했다. 

 

 

현재 진행 중인 프로젝트에서 GPGS와 Admob을 제거하고, Admob을 다시 설치했지만, 동일한 빌드 오류가 발생했다. 현재 프로젝트에서는 설치 및 제거를 많이 반복해서 이미 어딘가 충돌해서 더 진행하기 어렵다고 판단했다. 그래서 새로운 프로젝트를 생성하고, 작업 내용을 모두 옮겨서 새로운 프로젝트에서 빌드를 진행해서 위 오류를 해결할 수 있었다.