public static BattleInstructionBase Deserializetion(byte[] byteArray, ref int index) { if (byteArray.Length < SelfSerializationByteLength) { return(null); } int sceneUnitId = SerializeUtils.ReadInt(byteArray, ref index); BattleInstructionType instructionType = (BattleInstructionType)SerializeUtils.ReadByte(byteArray, ref index); BattleInstructionBase ret = null; switch (instructionType) { case BattleInstructionType.Move: ret = BattleMove.Deserialize(byteArray, ref index); break; case BattleInstructionType.StopMove: ret = BattleStopMove.Deserialize(byteArray, ref index); break; case BattleInstructionType.NoTargetSkill: ret = BattleNoTargetSkill.Deserialize(byteArray, ref index); break; case BattleInstructionType.UnitTargetSkill: ret = BattleUnitTargetSkill.Deserialize(byteArray, ref index); break; case BattleInstructionType.AreaTargetSkill: ret = BattleAreaTargetSkill.Deserialize(byteArray, ref index); break; default: break; } if (null != ret) { ret.SceneUnitId = sceneUnitId; } return(ret); }