forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Сеть (http://forum.boolean.name/forumdisplay.php?f=169)
-   -   Photon Network-синхронизация дочерних объектов (http://forum.boolean.name/showthread.php?t=18627)

Alex_Witcher 15.10.2013 17:17

Photon Network-синхронизация дочерних объектов
 
Всем привет. Продолжаю изучать фотон. Может-ли кто-то подсказать, допустим у меня есть объект объединяющий в себе другие объекты. (Танк).
Я создаю этот объект через Photon Istantiance. И он отображается у других игроков. Подскажите как отображать еще у других клиентов вращение его башни (т.е его children GOs) ? Если повесить PhotonView-'ничего не произойдет. Неужели надо отдельно спавнить через Photon Instantiance каждый его дочерний элемент, а потом объединять?

pax 15.10.2013 17:25

Ответ: Photon Network-синхронизация дочерних объектов
 
Надо писать скрипт сериализации, указывать этот скрипт как observer для PhotonView. Там есть пример с сантехником и передачей его положения и вращения таким способом на сколько я помню.

Грубо примерно так (без интерполяции):
PHP код:

protected void OnPhotonSerializeView(PhotonStream streamPhotonMessageInfo info)
    {
        if (
stream.isWriting)
        {
            
stream.SendNext(transform.position);
            
stream.SendNext(transform.rotation);
            
// передача поворота башни
            
stream.SendNext(turretTransform.localRotation);
        }
        else
        {
            
transform.position = (Vector3)stream.ReceiveNext();
            
transform.rotation = (Quaternion)stream.ReceiveNext();
            
// прием поворота башни
            
turretTransform.localRotation = (Quaternion)stream.ReceiveNext();
        }
    } 


Alex_Witcher 15.10.2013 18:19

Ответ: Photon Network-синхронизация дочерних объектов
 
спасибо, работает. А то я уже начал пытаться инстантить отдельными префабами и соединять))) Ну интерполяцию я уже смогу добавить.

BIDGAR 06.04.2024 05:17

Ответ: Photon Network-синхронизация дочерних объектов
 
Цитата:

Сообщение от pax (Сообщение 268814)
Надо писать скрипт сериализации, указывать этот скрипт как observer для PhotonView. Там есть пример с сантехником и передачей его положения и вращения таким способом на сколько я помню.

Грубо примерно так (без интерполяции):
PHP код:

protected void OnPhotonSerializeView(PhotonStream streamPhotonMessageInfo info)
    {
        if (
stream.isWriting)
        {
            
stream.SendNext(transform.position);
            
stream.SendNext(transform.rotation);
            
// передача поворота башни
            
stream.SendNext(turretTransform.localRotation);
        }
        else
        {
            
transform.position = (Vector3)stream.ReceiveNext();
            
transform.rotation = (Quaternion)stream.ReceiveNext();
            
// прием поворота башни
            
turretTransform.localRotation = (Quaternion)stream.ReceiveNext();
        }
    } 


Здравствуйте. Я понимаю, что с публикации вашего ответа прошло более 10 лет.., но у меня сейчас аналогичная проблема, башня танка не синхронизируется. При попытки добавления скрипта в photonView, выдаёт ошибку does not implement interface member 'IPunObservable.OnPhotonSerializeView(PhotonStream , PhotonMessageInfo)'. 'gun) n.OnPhotonSerializeView(PhotonStream, PhotonMessageInfo)' cannot implement an interface member because it is not public.:)

Randomize 06.04.2024 14:21

Ответ: Photon Network-синхронизация дочерних объектов
 
Цитата:

Сообщение от BIDGAR (Сообщение 319434)
Здравствуйте. Я понимаю, что с публикации вашего ответа прошло более 10 лет.., но у меня сейчас аналогичная проблема, башня танка не синхронизируется. При попытки добавления скрипта в photonView, выдаёт ошибку does not implement interface member 'IPunObservable.OnPhotonSerializeView(PhotonStream , PhotonMessageInfo)'. 'gun) n.OnPhotonSerializeView(PhotonStream, PhotonMessageInfo)' cannot implement an interface member because it is not public.:)

Монобех наследует MonoBehaviourPun и IPunObservable?

Нужно что-то типа:
PHP код:

public class MyNetworkTank MonoBehaviourPunIPunObservable
{
    ...
    
void OnPhotonSeriaizeView(PhotonStream streamPhotonMessageInfo info)
    {
        if(
stream.IsWriting)
        {
            
stream.SendNext(transform.position);
            
stream.SendNext(transform.rotation);
        }
        else
        {
            
position = (Vector3)stream.ReceiveNext();
            
rotation = (Quaternion)stream.ReceiveNext();
        }
    }
    ...




Часовой пояс GMT +4, время: 17:00.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot