/// <summary> /// 读取unit数据信息 /// </summary> /// <param name="br"></param> /// <param name="cID"></param> public void Read(BinaryReader br, int cID) { if (this.readed && this.dataLength > 0L) { br.BaseStream.Position += this.dataLength; return; } long num = 0L; this.createID = cID; long num2 = br.BaseStream.Position; long num3 = num2; this.prePath = br.ReadString(); num2 = br.BaseStream.Position; if (br.ReadInt32() == 10009) { this.type = br.ReadInt32(); if (!GameScene.isPlaying) { } this.unitParser = UnitType.GenUnitParser(this.type); //根据不同unit类型,使用对应的解析器解析数据 this.unitParser.unit = this; if (GameScene.isPlaying && this.type == UnitType.UnitType_Light && this.scene.lightDataLength > 0L) { br.BaseStream.Position += this.scene.lightDataLength; return; } if (this.type == UnitType.UnitType_Light) { num = br.BaseStream.Position; } this.unitParser.Read(br); } else { br.BaseStream.Position = num2; this.unitParser = new UnitParser(); } this.dependResCount = br.ReadInt32(); if (this.dependResCount != 0) { } for (int i = 0; i < this.dependResCount; i++) { br.ReadInt32(); } int num4 = br.ReadInt32(); this.lightmapPrototypes = new List <LightmapPrototype>(); for (int i = 0; i < num4; i++) { LightmapPrototype lightmapPrototype = new LightmapPrototype(); lightmapPrototype.rendererChildIndex = br.ReadInt32(); lightmapPrototype.lightmapIndex = br.ReadInt32(); num2 = br.BaseStream.Position; if (br.ReadInt32() == 10006) { lightmapPrototype.scale = br.ReadSingle(); } else { br.BaseStream.Position = num2; } lightmapPrototype.lightmapTilingOffset.x = br.ReadSingle(); lightmapPrototype.lightmapTilingOffset.y = br.ReadSingle(); lightmapPrototype.lightmapTilingOffset.z = br.ReadSingle(); lightmapPrototype.lightmapTilingOffset.w = br.ReadSingle(); this.lightmapPrototypes.Add(lightmapPrototype); } br.ReadSingle(); this.position = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); this.rotation = new Quaternion(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); this.localScale = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); num2 = br.BaseStream.Position; if (br.ReadInt32() == 20001) { this.combineParentUnitID = br.ReadInt32(); bool flag = br.ReadBoolean(); if (flag) { if (this.combinUnitIDs == null) { this.combinUnitIDs = new List <int>(); } num4 = br.ReadInt32(); for (int i = 0; i < num4; i++) { this.combinUnitIDs.Add(br.ReadInt32()); } } } else { br.BaseStream.Position = num2; } this.cullingFactor = br.ReadSingle(); num2 = br.BaseStream.Position; if (br.ReadInt32() == 40001) { this.center = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); } else { this.center = this.position; br.BaseStream.Position = num2; br.ReadSingle(); br.ReadSingle(); br.ReadSingle(); } br.ReadSingle(); br.ReadSingle(); if (this.cullingFactor <= 0.01f) //太小,使用默认剔除因子 { this.cullingFactor = this.scene.terrainConfig.defautCullingFactor; } this.UpdateViewRange(); long num5 = br.BaseStream.Position; this.dataLength = num5 - num3; if (this.type == UnitType.UnitType_Light) { this.scene.lightDataLength = num5 - num; } this.readed = true; }