최종 프로젝트 7/14 작업 노트

2025. 7. 14. 20:12·스파르타코딩클럽_Unity개발과정

<< 트러블슈팅 내역 >>

 

1. PunRPC Attribute를 이용한 메서드 내용 다른 클라이언트에 전달할 때 발생한 에러

 

1) 에러 발생 상황

탄환, 이펙트는 자주 호출

> 로컬 오브젝트 풀에서 관리

> 로컬 오브젝트 풀에서 호출할 때, 다른 클라이언트에서도 풀에서 꺼내서 초기화하라고 요청 보내기 (RPC 메서드)

> (에러!)

2) 에러 원인: RPC 메서드의 매개변수로는 유니티 API 자료형은 들어갈 수 없습니다.

(GameObject, Transform, Color 등)

3) 현재 구조

대기방에서 입장 전 팀을 나누어 각 플레이어에 팀 색상을 뿌려주는 방식

 

4) 해결

 

(1) DataManager 싱글톤 추가 
지금의 구조를 크게 바꾸지 않으면서도 어디서나 참조할 데이터들을 넣어둘 수 있는 장점

이후에도 동일한 접근을 해야할 데이터들. 예를 들어, 대기방에서 각 플레이어가 선택한 무기를 게임으로 가져온다던지 하는 기능 확장 때도 동일하게 사용 가능

 

(2) DataManager에 팀 색상 데이터 넣어두기

BnB 대기방에서의 팀 색상 선택을 생각하고 팀 색상 프리셋 생성

(3) 기존 구조 변경

대기방에서 게임으로 들어갈 때,
플레이어에 컬러 타입을 넘겨주는 것이 아닌

DataManager에 A, B팀이 각각 선택한 팀 컬러를 저장

(지금은 0,1번 디폴트. 이후 대기방 팀 컬러 선택 기능 추가 시 변경 가능하게끔)

 

(4) 무기, 탄환에 색상 대신 팀 인덱스 값만 가지도록 스크립트 수정

(5) 팀 인덱스 값만 있다면 DataManager 를 통해 색상을 꺼내 사용할 수 있는 매개변수 단순화가 완료

즉, RPC를 통해 팀 인덱스만 넘겨주면 색상을 넘겨줄 수 있게끔 구조 변경 완료

DataManager.Instance.TeamColors[index] 

1번 트러블 해결 후 ParrelSync를 통한 멀티 플레이 테스트

 

 

 

2. 오브젝트풀의 프리팹 변경에 따른 개편

1) 기존의 문제들

(1) 플레이어, 무기, 탄환, 이펙트 등 게임 시작 이후 생성할 것들을 PhotonNetwork.Instantiate()로 생성 > 해당 구문으로 생성하는데 PhotonView 컴포넌트 필요 > 각 컴포넌트마다 실시간으로 통신 부하 > 다 포톤뷰를 가지고 있다면 네트워크 부하가 매우 커짐

 

(2) RaiseEvent로 곳곳에서 처리하려다 보니 로컬/멀티 경계가 모호한 부분이 많이 생겨 탄환 발사 시 방향이 튄다던지 하는 문제가 쉽게 잡히지 않음 > 코드 유지 보수 어려움 및 로직의 꼬임 문제

 

2) 해결 방안

(1) 각 플레이어, 색칠 가능한 오브젝트들 각자 ViewID를 통한 멀티 플레이 중 객체 인식이 필요한 오브젝트들만 PhotonView 사용

그 외 무기, 탄환, 이펙트 등에 부착한 PhotonView 는 전부 제거

 

(2) 개발 가성비가 뛰어난 PunRPC로 전환
RaiseEvent처럼 값을 넘겨주고 처리할 로직을 다 짜서 갈래를 나눠줄 필요가 없어짐(단순화)

다른 클라이언트에 전달할 내용들을 [PunRPC] 속성을 붙여(MonoBehaviourPun 상속 필요) RPC 메서드로 만들고

        // 해당 무기의 총알 1발 발사
        RPCManager.Instance.photonView_RPCManager.RPC(nameof(RPCManager.Instance.SpawnBullet), RpcTarget.AllViaServer,
                                            teamID,
                                            (int)weaponData.bullet,
                                            firePos.position,
                                            Quaternion.LookRotation(firePos.forward));

예시로 위와 같이 아주 간단하게

일반적인 메서드를 동일하게 여럿의 클라이언트에 발송할 수 있어

직관적, 독립적이며 책임 소재의 판별이 용이하여 유지 보수에 유리

 

(3) 위의 코드블럭에서 보이다시피 다른 곳에서 제거한 PhotonView 들 대신 그들의 브로드캐스트가 필요한 메서드들을 모아놓을 RPCManager 스크립트 및 오브젝트 생성. 해당 오브젝트에 PhotonView 컴포넌트를 포함하여 하나만으로 모든 브로드캐스트를 처리하여 통신 부하 대폭 감소

 

문제가 생길까 하여 PunRPC를 처리하는 API 확인

> 구조를 보니 버퍼처럼 List로 통신 요청을 넣고 처리

> 여러 군데에서 호출하더라도 해당 구조를 통해 순차적으로 처리하여 순서의 문제가 없음

 


3. 탄이 구조물에 맞으면 점유율 올라가나 시각적으로 색칠이 안됨

원인: 인스펙터에 Color 타입이 노출될 때 기본 투명도가 0

즉, 마스크에 탄환이 맞은 자리에 스탬프가 찍힘으로 인한 점유율은 상승했으나

그 색이 투명하였기에 보이지 않았던 것

 

 


4. 각 팀 플레이어 스폰 위치의 배리어에 총알이 맞으면 오브젝트 풀로 돌아가는 부분에서 인덱스 에러 발생

public enum PrefabIndex_Bullet
{
    Bullet_Shooter,
}

해당 프로젝트에서는 무기, 총알, 이펙트 등 

enum을 통해 해당 데이터들의 인덱스를 지칭하여 경량화 및 구조화를 꾀함

enum 타입이 인스펙터에 등장하면 드롭다운으로 기입된 데이터 내에서만 선택 가능하여 휴먼 에러 줄일 수 있다는 장점도 있음

 

enum과 함께 switch-case 문을 통해 데이터 값에 따른 변화를 주었는데

인스펙터의 enum 드롭다운이 아무 값도 지정하지 않고 있어 인덱스 에러

 

알맞은 데이터를 할당하여 해결


4. B팀의 총이 y축 기준 180도 돌아가 있는 문제

총 생성 이후 local 각도 0도로 초기화로 임시 해결

이후 무기가 다양해지고 무기에 초기 각도에 대한 데이터가 각각 들어가면 이에 맞춰 초기화하도록 변경하기

저작자표시 비영리 동일조건 (새창열림)

'스파르타코딩클럽_Unity개발과정' 카테고리의 다른 글

최종 프로젝트 7/16 작업노트  (1) 2025.07.16
최종 프로젝트 7/15 작업 노트  (0) 2025.07.15
7/11 작업노트  (1) 2025.07.11
최종 프로젝트 작업 내용 7/10  (3) 2025.07.10
묑모장 > 코코낸내 후 정리  (0) 2025.07.04
'스파르타코딩클럽_Unity개발과정' 카테고리의 다른 글
  • 최종 프로젝트 7/16 작업노트
  • 최종 프로젝트 7/15 작업 노트
  • 7/11 작업노트
  • 최종 프로젝트 작업 내용 7/10
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체 N
      • 스파르타코딩클럽_Unity개발과정 N
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    대시
    hello
    텍스트매시프로
    잔상
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    무료스킨
    다크모드
    UI
    룰렛
    유니티 애니메이터 파라미터 초기화
    64비트
    유니티
    sprite mask
    스파인
    삭제
    갤럭시 S24
    마스크
    unity
    직렬화
    세이브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
최종 프로젝트 7/14 작업 노트
상단으로

티스토리툴바