Ejemplo n.º 1
0
    //送信する情報をキューに追加
    public override void OnMonobitSerializeViewWrite(MonobitStream stream, MonobitMessageInfo info)
    {
        stream.Enqueue(Active);

        stream.Enqueue(lookAtObject.localPosition);
        stream.Enqueue(lookAtObject.localRotation);

        stream.Enqueue(waist.localPosition);
        stream.Enqueue(waist.localRotation);
        stream.Enqueue(handL.enable);
        stream.Enqueue(handR.enable);
        stream.Enqueue(footL.enable);
        stream.Enqueue(footR.enable);
        stream.Enqueue(handL.target.localRotation);
        stream.Enqueue(handR.target.localRotation);
        stream.Enqueue(footL.target.localRotation);
        stream.Enqueue(footR.target.localRotation);
        stream.Enqueue(handL.target.localPosition);
        stream.Enqueue(handR.target.localPosition);
        stream.Enqueue(footL.target.localPosition);
        stream.Enqueue(footR.target.localPosition);
        stream.Enqueue(handL.weight);
        stream.Enqueue(handR.weight);
        stream.Enqueue(footL.weight);
        stream.Enqueue(footR.weight);
    }
Ejemplo n.º 2
0
    public override void OnMonobitSerializeViewRead(MonobitStream stream, MonobitMessageInfo info)
    {
        Active = (bool)stream.Dequeue();

        lookAtObject.localPosition = (Vector3)stream.Dequeue();
        lookAtObject.localRotation = (Quaternion)stream.Dequeue();

        waist.localPosition        = (Vector3)stream.Dequeue();
        waist.localRotation        = (Quaternion)stream.Dequeue();
        handL.enable               = (bool)stream.Dequeue();
        handR.enable               = (bool)stream.Dequeue();
        footL.enable               = (bool)stream.Dequeue();
        footR.enable               = (bool)stream.Dequeue();
        handL.target.localRotation = (Quaternion)stream.Dequeue();
        handR.target.localRotation = (Quaternion)stream.Dequeue();
        footL.target.localRotation = (Quaternion)stream.Dequeue();
        footR.target.localRotation = (Quaternion)stream.Dequeue();
        handL.target.localPosition = (Vector3)stream.Dequeue();
        handR.target.localPosition = (Vector3)stream.Dequeue();
        footL.target.localPosition = (Vector3)stream.Dequeue();
        footR.target.localPosition = (Vector3)stream.Dequeue();
        handL.weight               = (float)stream.Dequeue();
        handR.weight               = (float)stream.Dequeue();
        footL.weight               = (float)stream.Dequeue();
        footR.weight               = (float)stream.Dequeue();
    }
Ejemplo n.º 3
0
 /**
  * オブジェクトの位置・姿勢・倍率の同期処理関数.
  *
  * @param stream MonobitTransformViewの送信データ、または受信データのいずれかを提供するパラメータ
  * @param info 特定のメッセージやRPCの送受信、または更新に関する「送信者、対象オブジェクト、タイムスタンプ」などの情報を保有するパラメータ
  */
 public void OnMonobitSerializeView(MonobitStream stream, MonobitMessageInfo info)
 {
     if (stream.isWriting)
     {
         OnMonobitSerializeViewWrite(stream, info);
     }
     else
     {
         OnMonobitSerializeViewRead(stream, info);
     }
 }
 /// <summary>
 /// ストリームデータをシリアライズする
 /// </summary>
 /// <param name="stream">ストリームデータ</param>
 /// <param name="info">メッセージ情報</param>
 public override void SerializeView(MonobitStream stream, MonobitMessageInfo info)
 {
     Serialize(observed, stream, info);
     foreach (Component component in InternalObservedComponents)
     {
         Serialize(component, stream, info);
     }
     foreach (Component component in ObservedComponents)
     {
         Serialize(component, stream, info);
     }
 }
        /// <summary>
        /// 指定コンポーネントごとにストリームデータをシリアライズする
        /// </summary>
        /// <param name="component">指定コンポーネント</param>
        /// <param name="stream">ストリームデータ</param>
        /// <param name="info">メッセージ情報</param>
        private void Serialize(Component component, MonobitStream stream, MonobitMessageInfo info)
        {
            if (component == null)
            {
                return;
            }

            new Switch(component)
            .Case <MonobitAnimatorView>(p =>
            {
                ExecuteComponentOnSerialize <MonobitAnimatorView>(component, stream, info);
            })
            .Case <MonobitTransformView>(p =>
            {
                ExecuteComponentOnSerialize <MonobitTransformView>(component, stream, info);
            })
            .Case <MonoBehaviour>(p =>
            {
                ExecuteComponentOnSerialize <MonoBehaviour>(component, stream, info);
            })
            .Case <Transform>(p =>
            {
                Serialize <Transform, MonobitEngineBase.OnSerializeTransform>(
                    p,
                    stream,
                    new Serializer <Transform>[] {
                    trans => { return(trans.localPosition); },
                    trans => { return(trans.localRotation); },
                    trans => { return(trans.localScale); },
                });
            })
            .Case <Rigidbody>(p =>
            {
                Serialize <Rigidbody, MonobitEngineBase.OnSerializeRigidBody>(
                    p,
                    stream,
                    new Serializer <Rigidbody>[] {
                    rigid => { return(rigid.velocity); },
                    rigid => { return(rigid.angularVelocity); },
                });
            })
            .Case <Rigidbody2D>(p =>
            {
                Serialize <Rigidbody2D, MonobitEngineBase.OnSerializeRigidBody>(
                    p,
                    stream,
                    new Serializer <Rigidbody2D>[] {
                    rigid => { return(rigid.velocity); },
                    rigid => { return(rigid.angularVelocity); },
                });
            });
        }
Ejemplo n.º 6
0
 public void OnMonobitSerializeView(MonobitStream stream, MonobitMessageInfo info)
 {
     if (stream.isWriting)
     {
         stream.Enqueue(playerName);
         stream.Enqueue(vrmTitle);
     }
     else
     {
         playerName = (string)stream.Dequeue();
         vrmTitle   = (string)stream.Dequeue();
     }
 }
        /// <summary>
        /// MonobitAnimatorViewの同期データの読み書きを実行する
        /// </summary>
        /// <param name="stream">MonobitAnimatorViewの送信データ、または受信データのいずれかを提供するパラメータ</param>
        /// <param name="info">特定のメッセージやRPCの送受信、または更新に関する「送信者、対象オブジェクト、タイムスタンプ」などの情報を保有するパラメータ</param>
        public void OnMonobitSerializeView(MonobitStream stream, MonobitMessageInfo info)
        {
            if (this.m_Animator == null)
            {
                return;
            }

            if (stream.isWriting == true)
            {
                this.Serialize(stream);
            }
            else
            {
                this.Deserialize(stream);
            }
        }
    public void OnMonobitSerializeView(MonobitStream stream, MonobitMessageInfo info)
    {
        if (stream.isWriting)
        {
            stream.Enqueue(serializeBytes);
        }
        else
        {
            serializeBytes = (byte[])stream.Dequeue();

            if (MonobitEngineBase.CompressedStream.DeltaCompressed == monobitView.compressedStream)
            {
                ++serializeReadCount;
                UnityEngine.Debug.Log("serializeBytes[0]=" + serializeBytes[0] + " serializeReadCount=" + serializeReadCount);
            }
        }
    }
Ejemplo n.º 9
0
        /**
         * 書き込み専用オブジェクトの位置・姿勢・倍率の同期処理関数.
         *
         * @param stream MonobitTransformViewの送信データ、または受信データのいずれかを提供するパラメータ
         * @param info 特定のメッセージやRPCの送受信、または更新に関する「送信者、対象オブジェクト、タイムスタンプ」などの情報を保有するパラメータ
         */
        public override void OnMonobitSerializeViewWrite(MonobitStream stream, MonobitMessageInfo info)
        {
            // ストリームへの送信処理、および、自身の座標を最新のtransform情報に更新
            Transform transform = gameObject.transform; // gameObjectを参照するコストが重いので、1回にまとめる

            if (m_SyncPosition.m_EnableSync)
            {
                stream.Enqueue(transform.localPosition);
            }
            if (m_SyncRotation.m_EnableSync)
            {
                stream.Enqueue(transform.localRotation);
            }
            if (m_SyncScale.m_EnableSync)
            {
                stream.Enqueue(transform.localScale);
            }
        }
Ejemplo n.º 10
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="info"></param>
    public void OnMonobitInstantiate(MonobitMessageInfo info)
    {
        Position = transform.position;
        Rotation = transform.rotation;

        foreach (SD_Unitychan_source_speaker speaker in GameObject.FindObjectsOfType <SD_Unitychan_source_speaker>())
        {
            if (speaker.monobitView.ownerId == info.sender.ID)
            {
                var voice = speaker.GetComponent <MultiSpeakerVoice>();
                if (voice == null)
                {
                    return;
                }
                voice.SetSpeakerObject(gameObject, Position, Rotation);
                break;
            }
        }
    }
Ejemplo n.º 11
0
        /**
         * 読み込み専用オブジェクトの位置・姿勢・倍率の同期処理関数.
         *
         * @param stream MonobitTransformViewの送信データ、または受信データのいずれかを提供するパラメータ
         * @param info 特定のメッセージやRPCの送受信、または更新に関する「送信者、対象オブジェクト、タイムスタンプ」などの情報を保有するパラメータ
         */
        public override void OnMonobitSerializeViewRead(MonobitStream stream, MonobitMessageInfo info)
        {
            // ネットワークからの更新を受信したことをフラグで検知
            m_UpdateNetwork = true;

            // ストリームからの受信処理
            if (m_SyncPosition.m_EnableSync)
            {
                m_LastUpdatePosition = (Vector3)stream.Dequeue();
            }
            if (m_SyncRotation.m_EnableSync)
            {
                m_LastUpdateRotation = (Quaternion)stream.Dequeue();
            }
            if (m_SyncScale.m_EnableSync)
            {
                m_LastUpdateScale = (Vector3)stream.Dequeue();
            }
        }
        /**
         * オブジェクトの位置・姿勢・倍率の同期処理関数.
         *
         * @param stream MonobitTransformViewの送信データ、または受信データのいずれかを提供するパラメータ
         * @param info 特定のメッセージやRPCの送受信、または更新に関する「送信者、対象オブジェクト、タイムスタンプ」などの情報を保有するパラメータ
         */
        public void OnMonobitSerializeView(MonobitStream stream, MonobitMessageInfo info)
        {
            if (stream.isWriting)
            {
                // ストリームへの送信処理、および、自身の座標を最新のtransform情報に更新
                if (m_SyncPosition.m_EnableSync)
                {
                    stream.Enqueue(gameObject.transform.localPosition);
                    m_LastUpdatePosition = gameObject.transform.localPosition;
                }
                if (m_SyncRotation.m_EnableSync)
                {
                    stream.Enqueue(gameObject.transform.localRotation);
                    m_LastUpdateRotation = gameObject.transform.localRotation;
                }
                if (m_SyncScale.m_EnableSync)
                {
                    stream.Enqueue(gameObject.transform.localScale);
                    m_LastUpdateScale = gameObject.transform.localScale;
                }
            }
            else
            {
                // ネットワークからの更新を受信したことをフラグで検知
                m_UpdateNetwork = true;

                // ストリームからの受信処理
                if (m_SyncPosition.m_EnableSync)
                {
                    m_LastUpdatePosition = (Vector3)stream.Dequeue();
                }
                if (m_SyncRotation.m_EnableSync)
                {
                    m_LastUpdateRotation = (Quaternion)stream.Dequeue();
                }
                if (m_SyncScale.m_EnableSync)
                {
                    m_LastUpdateScale = (Vector3)stream.Dequeue();
                }
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// OnMonobitSerializeViewを呼び出してシリアライズさせる
        /// </summary>
        /// <typeparam name="T">呼び出し先のクラス型</typeparam>
        /// <param name="component">コンポーネント</param>
        /// <param name="stream">ストリームデータ</param>
        /// <param name="info">メッセージ情報</param>
        private void ExecuteComponentOnSerialize <T>(Component component, MonobitStream stream, MonobitMessageInfo info)
        {
            if (component == null)
            {
                return;
            }

            MethodInfo methodInfo = null;

            if (m_dicOnSerializeMethodInfos.TryGetValue(component, out methodInfo) != true)
            {
                var result = MonobitNetwork.GetMethod <T>(component, MonobitNetworkingMessage.OnMonobitSerializeView.ToString(), out methodInfo);
                if (result == false)
                {
                    methodInfo = null;
                }
                m_dicOnSerializeMethodInfos.Add(component, methodInfo);
            }

            if (methodInfo != null)
            {
                string componentName = component.GetType().Name;
                if (stream.isWriting)
                {
                    stream.Enqueue(new string[] { componentName, "start" });
                }
                else
                {
                    stream.SkipDequeue();
                }
                methodInfo.Invoke(component, new object[] { stream, info });
                if (stream.isWriting)
                {
                    stream.Enqueue(new string[] { componentName, "end" });
                }
                else
                {
                    stream.SkipDequeue();
                }
            }
        }
Ejemplo n.º 14
0
 // プレハブがインスタンス化されたときのコールバック
 public void OnMonobitInstantiate(MonobitMessageInfo info)
 {
     ClientSide.RakeupGame.itemObject.Add(gameObject);
 }
 public void OnMonobitInstantiate(MonobitMessageInfo info)
 {
     UnityEngine.Debug.Log("OnMonobitInstantiate sender=" + info.sender + " view=" + info.monobitView);
 }
        /// <summary>
        /// 指定コンポーネントごとにストリームデータをデシリアライズする
        /// </summary>
        /// <param name="component">コンポーネント</param>
        /// <param name="stream">ストリームデータ</param>
        /// <param name="info">メッセージ情報</param>
        private void Desirialize(Component component, MonobitStream stream, MonobitMessageInfo info)
        {
            if (component == null)
            {
                return;
            }

            new Switch(component)
            .Case <MonobitAnimatorView>(p =>
            {
                ExecuteComponentOnSerialize <MonobitAnimatorView>(component, stream, info);
            })
            .Case <MonobitTransformView>(p =>
            {
                ExecuteComponentOnSerialize <MonobitTransformView>(component, stream, info);
            })
            .Case <MonoBehaviour>(p =>
            {
                ExecuteComponentOnSerialize <MonoBehaviour>(component, stream, info);
            })
            .Case <Transform>(p => {
                Desirialize <MonobitEngineBase.OnSerializeTransform>(
                    stream,
                    new Desirializer[] {
                    r => {
                        // Position
                        p.localPosition = (Vector3)r;
                    },
                    r => {
                        // Rotation
                        p.localRotation = (Quaternion)r;
                    },
                    r => {
                        // Scale
                        p.localScale = (Vector3)r;
                    }
                });
            })
            .Case <Rigidbody>(p => {
                Desirialize <MonobitEngineBase.OnSerializeRigidBody>(
                    stream,
                    new Desirializer[] {
                    r => {
                        // angularVelocity
                        p.angularVelocity = (Vector3)r;
                    },
                    r => {
                        // velocity
                        p.velocity = (Vector3)r;
                    }
                });
            })
            .Case <Rigidbody2D>(p => {
                Desirialize <MonobitEngineBase.OnSerializeRigidBody>(
                    stream,
                    new Desirializer[] {
                    r => {
                        // angularVelocity
                        p.angularVelocity = (float)r;
                    },
                    r => {
                        // velocity
                        p.velocity = (Vector2)r;
                    }
                });
            });
        }
        /// <summary>
        /// OnMonobitSerializeViewを呼び出してシリアライズさせる
        /// </summary>
        /// <typeparam name="T">呼び出し先のクラス型</typeparam>
        /// <param name="component">コンポーネント</param>
        /// <param name="stream">ストリームデータ</param>
        /// <param name="info">メッセージ情報</param>
        private void ExecuteComponentOnSerialize <T>(Component component, MonobitStream stream, MonobitMessageInfo info)
        {
            if (component == null)
            {
                return;
            }

            MethodInfo methodInfo = null;

            if (m_dicOnSerializeMethodInfos.TryGetValue(component, out methodInfo) != true)
            {
                var result = MonobitNetwork.GetMethod <T>(component, MonobitNetworkingMessage.OnMonobitSerializeView.ToString(), out methodInfo);
                if (result == false)
                {
                    methodInfo = null;
                }
                m_dicOnSerializeMethodInfos.Add(component, methodInfo);
            }

            if (methodInfo != null)
            {
                methodInfo.Invoke(component, new object[] { stream, info });
            }
        }