예제 #1
0
        void InitializeSender()
        {
            renderers = new List <SkinnedMeshRenderer>();

            if (targetGameObject != null)
            {
                SkinnedMeshRenderer[] psmrs = targetGameObject.GetComponents <SkinnedMeshRenderer>();
                SkinnedMeshRenderer[] csmrs = targetGameObject.GetComponentsInChildren <SkinnedMeshRenderer>();
                if (psmrs.Length != 0)
                {
                    renderers.AddRange(psmrs);
                }
                if (csmrs.Length != 0)
                {
                    renderers.AddRange(csmrs);
                }
            }
            else
            {
                Debug.LogError("Target GameObject is null!");
                return;
            }

            serializer   = gameObject.GetComponent <STMHttpSerializer>();
            oldVertsBuf  = new Vector3[renderers.Count][];
            oldMatrix    = new float[renderers.Count][];
            linedIndices = new List <int>();
        }
예제 #2
0
        void InitializeReceiver()
        {
            serializer = gameObject.GetComponent <STMHttpSerializer>();

            serializer.OnChannelInfoReceived  = OnInitialDataReceived;
            serializer.OnMeshInfoReceived     = OnMeshInfoReceived;
            serializer.OnMaterialInfoReceived = OnMaterialInfoReceived;
            serializer.OnTextureReceived      = OnTextureReceived;

            serializer.OnStreamListReceived = OnStreamListReceived;
            serializer.OnStreamReceived     = OnStreamDataReceived;
        }
예제 #3
0
        void InitializeReceiver()
        {
            m_serializer = gameObject.GetComponent <STMHttpSerializer>();

            m_serializer.OnChannelInfoReceived = OnChannelInfoReceived;
            //m_serializer.OnMeshInfoReceived = OnMeshInfoReceived;
            //m_serializer.OnMaterialInfoReceived = OnMaterialInfoReceived;
            //m_serializer.OnTextureReceived = OnTextureReceived;
            m_serializer.OnCombinedDataReceived = OnCombinedDataReceived;

            m_serializer.OnStreamListReceived = OnStreamListReceived;
            m_serializer.OnStreamReceived     = OnStreamDataReceived;
#if !UNITY_WEBGL
            m_serializer.OnAudioListReceived = OnAudioListReceived;
#endif
            m_serializer.OnAudioReceived = OnAudioDataReceived;
        }
예제 #4
0
        void InitializeSender()
        {
            if (packageSize > 255)
            {
                packageSize = 255;
            }
            byteSize       = new List <int>();
            combinedBinary = new List <byte>();

            renderers  = new List <SkinnedMeshRenderer>();
            serializer = gameObject.GetComponent <STMHttpSerializer>();

            if (targetGameObject != null)
            {
                SkinnedMeshRenderer[] psmrs = targetGameObject.GetComponents <SkinnedMeshRenderer>();
                SkinnedMeshRenderer[] csmrs = targetGameObject.GetComponentsInChildren <SkinnedMeshRenderer>();
                if (psmrs.Length != 0)
                {
                    renderers.AddRange(psmrs);
                }
                if (csmrs.Length != 0)
                {
                    renderers.AddRange(csmrs);
                }
            }
            else
            {
                if (Application.isPlaying)
                {
                    Debug.LogError("Target GameObject is null, set target GameObject.");
                }
                else
                {
                    Debug.LogWarning("Target GameObject is null, set target GameObject.");
                }
                return;
            }

            oldVertsBuf  = new Vector3[renderers.Count][];
            oldMatrix    = new float[renderers.Count][];
            linedIndices = new List <int>();
        }
예제 #5
0
        void CreateInfos()
        {
            if (serializer == null || renderers == null || targetGameObject == null)
            {
                string errorString = "";
                errorString += (serializer == null ? "serializer " : "");
                errorString += (renderers == null ? "rendrers " : "");
                errorString += (targetGameObject == null ? "target GameObject " : "");
                errorString += "is null on create channel!";
                Debug.LogError(errorString);
            }

            Dictionary <string, Material> materials = new Dictionary <string, Material>();
            Dictionary <string, Texture>  textures  = new Dictionary <string, Texture>();
            List <MeshInfo>     meshInfos           = new List <MeshInfo>();
            List <MaterialInfo> materialInfos       = new List <MaterialInfo>();

            List <string> meshNames     = new List <string>();
            List <string> materialNames = new List <string>();
            List <string> textureNames  = new List <string>();

            for (int i = 0; i < renderers.Count; i++)
            {
                SkinnedMeshRenderer renderer = renderers[i];
                if (renderer != null)
                {
                    MeshInfo meshInfo = serializer.CreateMeshInfo(renderer);
                    if (meshInfo == null)
                    {
                        continue;
                    }
                    meshInfos.Add(meshInfo);
                    meshNames.Add("mesh" + i);

                    for (int j = 0; j < renderer.sharedMaterials.Length; j++)
                    {
                        Material mat = renderer.sharedMaterials[j];
                        Material dummy;
                        if (materials.TryGetValue(mat.name, out dummy))
                        {
                            continue;
                        }
                        materials.Add(mat.name, mat);


                        MaterialInfo materialInfo = serializer.CreateMaterialInfo(mat);
                        if (materialInfo == null)
                        {
                            continue;
                        }
                        materialInfos.Add(materialInfo);
                        materialNames.Add("material" + materialNames.Count);

                        List <KeyValuePair <string, Texture> > texturePairs =
                            serializer.GetTexturesFromMaterial(mat);
                        foreach (KeyValuePair <string, Texture> texturePair in texturePairs)
                        {
                            Texture dummyTexture;
                            if (textures.TryGetValue(texturePair.Key, out dummyTexture))
                            {
                                continue;
                            }
                            textures.Add(texturePair.Key, texturePair.Value);
                            textureNames.Add(texturePair.Key);
                        }
                    }
                }
            }

            List <int>  meshBuffersSize = new List <int>();
            List <int>  matBuffersSize  = new List <int>();
            List <int>  texBuffersSize  = new List <int>();
            List <byte> combinedBuffer  = new List <byte>();

            foreach (KeyValuePair <string, Texture> texturePair in textures)
            {
                Texture texture = texturePair.Value;
                byte[]  buffer  = STMHttpSerializer.GetTextureToPNGByteArray(texture, true);
                texBuffersSize.Add(buffer.Length);
                combinedBuffer.AddRange(buffer);
            }

            for (int i = 0; i < materialInfos.Count; i++)
            {
                MaterialInfo matInfo   = materialInfos[i];
                string       matString = JsonUtility.ToJson(matInfo);
                byte[]       buffer    = Encoding.UTF8.GetBytes(matString);
                matBuffersSize.Add(buffer.Length);
                combinedBuffer.AddRange(buffer);
            }

            for (int i = 0; i < meshInfos.Count; i++)
            {
                MeshInfo meshInfo   = meshInfos[i];
                string   meshString = JsonUtility.ToJson(meshInfo);
                byte[]   buffer     = Encoding.UTF8.GetBytes(meshString);
                meshBuffersSize.Add(buffer.Length);
                combinedBuffer.AddRange(buffer);
            }

            byte[] compressedBuffer = StreamingMesh.Lib.ExternalTools.Compress(combinedBuffer.ToArray());

            ChannelInfo channelInfo = serializer.CreateChannelInfo(
                containerSize,
                packageSize,
                frameInterval,
                combinedFrames,
                meshNames,
                materialNames,
                textureNames,
                meshBuffersSize,
                matBuffersSize,
                texBuffersSize
                );

            serializer.Send(channelInfo);
            serializer.Send(compressedBuffer);
        }