[Unity] Destroy Object 동기화

박민주·2022년 6월 23일
0

Unity

목록 보기
30/40

저번에는 1:1 PvP인 것처럼
서로 총을 쏘고, 서로를 없애는 기능을 구현해봤었다.

이번에는 플레이어가 어떤 물체를 없앴을 때
동기화하는 기능을 구현해봤다.

일단 저번처럼 RPC 함수 등록은 필요가 없었고, 더 단순했다.

나는 플레이어랑 물체가 닿았을 때 삭제하게 하려고 OnTriggerEnter에다가 넣어주었다.

    void OnTriggerEnter(Collider coll) {
        if(coll.tag == "Obstacle") {
            Debug.Log($"OnTriggerEnter: {coll.gameObject.name}");
            PhotonView pv = coll.gameObject.GetComponent<PhotonView>();
            if(pv.IsMine)
            {
                PhotonNetwork.Destroy(coll.gameObject);
            }
        }
    }

그리고 저번에 Destory를 쓰면 출력됐던 에러도 해결했다.
아래 에러인데, 본인이 Master client가 아니면 출력되는 거라고 한다.
if(PhotonView.IsMine) 을 추가하면 해결되었다.

(참고: https://forum.unity.com/threads/photon-failed-to-network-remove-gameobject-please-help.371499/)

전체 코드

  • Obstacle에는 PhotonView 컴포넌트가 붙어있어야 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

// 사용자가 Obstacle이랑 부딪히면 해당 Obstacle이 사라지도록 하고 싶다.
// Obstacle은 PhotonView가 있는 객체여야 함

public class PlayerTrigger : MonoBehaviourPun
{
    void OnTriggerEnter(Collider coll) {
        if(coll.tag == "Obstacle") {
            Debug.Log($"OnTriggerEnter: {coll.gameObject.name}");
            PhotonView pv = coll.gameObject.GetComponent<PhotonView>();
            if(pv.IsMine)
            {
                PhotonNetwork.Destroy(coll.gameObject);
            }
        }
    }

}
profile
Game Programmer

0개의 댓글