Как сделать удаление обьектов Photon?(РЕШЕНО)

Как сделать удаление обьектов Photon?(РЕШЕНО)

Сообщение disignkiev 14 ноя 2016, 14:00

Не удаляются GameObject, если его удаляет клиент, а не мастер сервер, как данную проблему решить?
такую ошибку выдаёт "Failed to 'network-remove' GameObject. Client is neither owner nor master Client taking over for owner who left"
это нужно для инвертаря
вот скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

public class Inventory : Photon.MonoBehaviour {

    // Use this for initialization
   public List<Item> list;
    GameObject cam;
    public GameObject inventory;
    public GameObject contener;
    void OnEnable()
    {
        inventory = GameObject.FindGameObjectWithTag("Inventar");
     
        if (!cam && Camera.main)
           
        cam = GameObject.FindGameObjectWithTag("MainCamera");
        // Your characters's camera tag
        if (!cam)
        {
            Debug.Log("Please assign a camera to the ThirdPersonCamera script.");
            enabled = false;
        }
        cam.GetComponent<Camera>();

    }
        void Start () {
        list = new List<Item>();
        inventory.SetActive(false);
    }
       
        // Update is called once per frame
        void Update () {
        if (Input.GetMouseButtonUp(1))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))

            {
                Item item = hit.collider.GetComponent<Item>();
                if (item != null)
                {
                    list.Add(item);
                    PhotonNetwork.Destroy(hit.collider.gameObject);
                }

            }

        }
        if(Input.GetKeyUp(KeyCode.I))
        {
            if (inventory.activeSelf)
            {
                inventory.SetActive(false);
                for (int i = 0; i < inventory.transform.childCount; i++)
                {
                    if (inventory.transform.GetChild(i).transform.childCount > 0)
                    {
                        Destroy(inventory.transform.GetChild(i).transform.GetChild(0).gameObject);
                    }
                }
            }
            else
            {
                inventory.SetActive(true);
                int count = list.Count;
                for (int i = 0; i < count; i++)

                {
                    Item it = list[i];
                    if(inventory.transform.childCount>=i)
                    {
                       
                        GameObject img = Instantiate(contener);
                        img.transform.SetParent(inventory.transform.GetChild(i).transform);
                        img.GetComponent<Image>().sprite =Resources.Load<Sprite>(it.sprite);
                        img.AddComponent<Button>().onClick.AddListener(() => remove(it, img));
                    }
                    else break;
                }
            }
        }
                }
    void remove(Item it, GameObject obj)
    {
        GameObject newo = Resources.Load<GameObject>(it.prefab);
        PhotonNetwork.InstantiateSceneObject(newo.name,Vector3.up,Quaternion.identity,0,null);
        newo.transform.position = transform.position + transform.forward + transform.up;
        Destroy(obj);
        list.Remove(it);
       
       
    }
}
 



пробывал с RPC, тоже не получается, нигде не синхронизируется
Синтаксис:
Используется csharp
   Item item = hit.collider.GetComponent<Item>();
                if (item != null)
                {
                    list.Add(item);
                    ty = hit.collider.gameObject;
                    GetComponentInParent<PhotonView>().RPC("coobik", PhotonTargets.All, null);
                   
                }
    [PunRPC]
    private void coobik()
    {
       
     
       PhotonNetwork.Destroy(ty);

    }
 

:-?
что я делаю не так?
Последний раз редактировалось disignkiev 06 дек 2016, 01:01, всего редактировалось 1 раз.
disignkiev
UNец
 
Сообщения: 9
Зарегистрирован: 07 ноя 2016, 10:27

Re: Как сделать удаление обьектов Photon?

Сообщение Aleksey 28 ноя 2016, 23:52

Правило.Сетевые объекты удаляются и респаунятся ТОЛЬКО PhotonNetwork.Instantiate и PhotonNetwork.Destroy. Нельзя использовать обычные юнити инстантиэйты, дестрои.
У тебя ошибка указывает на то что ты удаляешь объект не владельцем этого объекта.
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как сделать удаление обьектов Photon?

Сообщение disignkiev 06 дек 2016, 01:00

решено добавлением

[PunRPC]
public IEnumerator DestroyRpc()
{
GameObject.Destroy(this.gameObject);
yield return 0; // if you allow 1 frame to pass, the object's OnDestroy() method gets called and cleans up references.
PhotonNetwork.UnAllocateViewID(this.photonView.viewID);
}
на обьект
disignkiev
UNец
 
Сообщения: 9
Зарегистрирован: 07 ноя 2016, 10:27


Вернуться в Photon

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3