示例#1
0
        public void DeSerialize(BinaryReader reader)
        {
            Index = reader.ReadInt32();
            Vector3 localPosition = default(Vector3);

            localPosition.x = reader.ReadSingle();
            localPosition.y = reader.ReadSingle();
            localPosition.z = reader.ReadSingle();
            LocalPosition   = localPosition;

            Quaternion localRotation = default(Quaternion);

            localRotation.x = reader.ReadSingle();
            localRotation.y = reader.ReadSingle();
            localRotation.z = reader.ReadSingle();
            localRotation.w = reader.ReadSingle();
            LocalRotation   = localRotation;

            Vector3 localScale = default(Vector3);

            localScale.x = reader.ReadSingle();
            localScale.y = reader.ReadSingle();
            localScale.z = reader.ReadSingle();
            LocalScale   = localScale;

            AssetIndex = reader.ReadInt32();

            int renderInfoCount = reader.ReadInt32();

            if (renderInfoCount > 0)
            {
                RendererInfos = new RendererInfo[renderInfoCount];
                for (int iRender = 0; iRender < renderInfoCount; iRender++)
                {
                    RendererInfo rendererInfo = new RendererInfo();
                    rendererInfo.DeSerialize(reader);
                    RendererInfos[iRender] = rendererInfo;
                }
            }



            //正式不导出 只是为了测试
#if false
            Vector3 aabbCenter = default(Vector3);
            aabbCenter.x = reader.ReadSingle();
            aabbCenter.y = reader.ReadSingle();
            aabbCenter.z = reader.ReadSingle();

            Vector3 aabbSize = default(Vector3);
            aabbSize.x = reader.ReadSingle();
            aabbSize.y = reader.ReadSingle();
            aabbSize.z = reader.ReadSingle();

            _AABB = new Bounds(aabbCenter, aabbSize);
#endif
        }
示例#2
0
        public void Serialize(BinaryWriter writer)
        {
            writer.Write(Index);
            Vector3 localPosition = LocalPosition;

            writer.Write(localPosition.x);
            writer.Write(localPosition.y);
            writer.Write(localPosition.z);

            Quaternion localRotation = LocalRotation;

            writer.Write(localRotation.x);
            writer.Write(localRotation.y);
            writer.Write(localRotation.z);
            writer.Write(localRotation.w);

            Vector3 localScale = LocalScale;

            writer.Write(localScale.x);
            writer.Write(localScale.y);
            writer.Write(localScale.z);

            writer.Write(AssetIndex);

            RendererInfo[] rendererInfos = RendererInfos;
            if (rendererInfos == null || rendererInfos.Length <= 0)
            {
                writer.Write(0);
            }
            else
            {
                writer.Write(rendererInfos.Length);
                for (int iRender = 0; iRender < rendererInfos.Length; iRender++)
                {
                    RendererInfo rendererInfo = rendererInfos[iRender];
                    rendererInfo.Serialize(writer);
                }
            }

            //正式时,这个数据不用导出
#if false
            Bounds  unitAABB   = _AABB;
            Vector3 aabbCenter = unitAABB.center;
            writer.Write(aabbCenter.x);
            writer.Write(aabbCenter.y);
            writer.Write(aabbCenter.z);

            Vector3 size = unitAABB.size;
            writer.Write(size.x);
            writer.Write(size.y);
            writer.Write(size.z);
#endif
        }
示例#3
0
        private void OnInstantiateUnitCompleted(string pathOrAddress, UnityObject obj, SystemObject userData)
        {
            m_RuningUnitCommandCount--;

            LoadUnitData loadData      = userData as LoadUnitData;
            int          unitIndex     = loadData.m_UnitIndex;
            int          unitCommandId = loadData.m_CommandId;


            UnitData unitData = m_UnitDatas[unitIndex];

            if (m_IsReleasing)
            {
                UnityObject.DestroyImmediate(obj);
                unitData.RemoveState(UnitState.Instantiating);
                unitData.AddState(UnitState.Released);
                unitData.GameObject = null;
                unitData.ClearRef();
            }
            else
            {
                GameObject resultGameObject = obj as GameObject;

                m_InstantiatedUnitCount++;

                unitData.GameObject = resultGameObject;
                unitData.RemoveState(UnitState.Instantiating);
                unitData.AddState(UnitState.Instantiated);

                SceneUnitInfo unitInfo      = m_Units[unitIndex];
                Transform     unitTransform = resultGameObject.transform;
                unitTransform.SetParent(m_AreaController.GetRoot(), false);
                unitTransform.localPosition = unitInfo.LocalPosition;
                unitTransform.localRotation = unitInfo.LocalRotation;
                unitTransform.localScale    = unitInfo.LocalScale;

                RendererInfo[] rendererInfos = unitInfo.RendererInfos;
                if (rendererInfos != null && rendererInfos.Length > 0)
                {
                    for (int iRenderer = 0; iRenderer < rendererInfos.Length; iRenderer++)
                    {
                        RendererInfo iterRendererInfo = rendererInfos[iRenderer];

                        Transform iterRendererTranfsorm = unitTransform;
                        if (iterRendererInfo.TransformIndexs != null)
                        {
                            for (int iTransformIndex = 0; iTransformIndex < iterRendererInfo.TransformIndexs.Length; iTransformIndex++)
                            {
                                iterRendererTranfsorm = iterRendererTranfsorm.GetChild(iterRendererInfo.TransformIndexs[iTransformIndex]);
                            }
                        }

                        Renderer iterRenderer = iterRendererTranfsorm.GetComponent <Renderer>();
                        if (iterRenderer && iterRendererInfo.LightmapIndex >= 0)
                        {
                            /*  for (int iMaterial = 0; iMaterial < iterRenderer.materials.Length; iMaterial++)
                             * {
                             *    Material iterMaterial = iterRenderer.materials[iMaterial];
                             *    if (CRenderer.Shaders.GetInstance().TryFindShader(iterMaterial.shader.name, out Shader shader))
                             *    {
                             *        iterMaterial.shader = shader;
                             *    }
                             * }*/
                            iterRenderer.lightmapIndex       = iterRendererInfo.LightmapIndex;
                            iterRenderer.lightmapScaleOffset = iterRendererInfo.LightmapScaleOffset;

                            iterRenderer.realtimeLightmapIndex       = iterRendererInfo.RealLightmapIndex;
                            iterRenderer.realtimeLightmapScaleOffset = iterRendererInfo.RealLightmapScaleOffset;
                        }
                    }
                }
            }
            m_UnitDatas[unitIndex] = unitData;
        }