Как поделиться материальными изменениями в мультиплеере с помощью Photon? - PullRequest
0 голосов
/ 30 сентября 2018

Я работаю над простым многопользовательским AR-приложением, используя этот учебник.
https://www.youtube.com/watch?v=n3a-aaSYR8s
SourceCode

Один пользователь размещает простой 3D-куб где-то в комнатеЗатем он и другие игроки, которые присоединятся к игре, могут изменить ее материал, нажав на кнопку, которая выполняет простой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeMaterial : MonoBehaviour {


    public Material material_1;
    public Material material_2;
    public GameObject MainObject;


    void Update(){
        MainObject = GameObject.FindWithTag("Player");
    }



    public void assignMaterialOne(){
            MainObject.GetComponent<Renderer> ().material = material_1;
        }

    public void assignMaterialTwo(){
        MainObject.GetComponent<Renderer> ().material = material_2;
    }



}

Это работает для того игрока, который поместил куб, но когдадругие игроки присоединяются к игре, они видят куб с материалом по умолчанию.Они могут изменить свой материал, но он будет виден только на их устройстве.

Как я могу синхронизировать и отобразить изменение материала или анимации куба для всех пользователей?
Поскольку в учебнике используется Photon, есть ли способ реализовать его с использованием Photon ?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 01 октября 2018

Для этого вам нужно будет отправить данные по сети, в вашем случае - ссылку на ваши материалы (вы можете использовать названия материалов, но целочисленные значения или байты с простой таблицей поиска было бы более эффективным для сохранения полосы пропускания)

поэтому в случае, когда ваш игрок владеет и контролирует, вы устанавливаете эту ссылку на материал, когда изменяете ее, и все другие подчиненные экземпляры будут проверять это изменение и соответственно корректировать свои собственные экземпляры.

для достижениятаким образом, вы можете либо отправить RPC (сообщение, которое отправляется по сети), если данные очень редко изменяются на дискретные, либо сериализовать данные, если они постоянно меняются (например, положение и ротация игрока).

поэтому я думаю, что вы сможете сойти с рук RPC в вашем случае:

https://doc.photonengine.com/en-us/pun/current/gameplay/rpcsandraiseevent

Пока,

Жан

...