저번에는 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/)
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);
}
}
}
}