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 }
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 }
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; }