public static UInt32 QuickCompute(byte[] data, SlicingType sType) { slicer.InitCrc(); using (var mStream = new MemoryStream(data)) { switch (sType) { case SlicingType.SliceBy8: return(slicer.UnsafeDoSb8(mStream)); case SlicingType.SliceBy32: return(slicer.DoSb32(mStream)); default: case SlicingType.NormalSpeed: return(slicer.DoSarwate(mStream)); } } }
/// ----------------------------------------------------------------------------------------------------------- /// <summary> /// 绘制窗口布局 /// </summary> /// ----------------------------------------------------------------------------------------------------------- void OnGUI() { if (!Application.isPlaying) { GUILayout.Label("配置选项", EditorStyles.boldLabel); EditorGUILayout.Space(); baseTerrain = (Terrain)EditorGUILayout.ObjectField(lable1, baseTerrain, typeof(Terrain), false); EditorGUILayout.Space(); excusuibType = (SlicingType)EditorGUILayout.EnumPopup(lable3, excusuibType); EditorGUILayout.Space(); TerrainPatchPath = EditorGUILayout.TagField(lable4, TerrainPatchPath); EditorGUILayout.Space(); if (GUILayout.Button(lable5)) { string sceneName = UtilityTools.GetFileName(EditorApplication.currentScene); TerrainPatchPath = "Assets/TerrainPatch/" + sceneName + "/TearrinData"; } EditorGUILayout.Space(); IsOverWrite = EditorGUILayout.Toggle(lable6, IsOverWrite); EditorGUILayout.Space(); IsSmoothEdge = EditorGUILayout.Toggle(lable7, IsSmoothEdge); EditorGUILayout.Space(); IsCopyNegtion = EditorGUILayout.Toggle(lable8, IsCopyNegtion); EditorGUILayout.Space(); IsCopyDetail = EditorGUILayout.Toggle(lable9, IsCopyDetail); /// 开始分割地形 if (GUILayout.Button("开始分割地形")) { if (baseTerrain == null) { this.ShowNotification(new GUIContent("base terrain is null ")); return; } ClearHistoryCache(); /// 计算一些参数 baseData = baseTerrain.terrainData; int nSize = (int)excusuibType; _newTerrainWide = nSize; _newTerrainHeight = nSize; _newHeightMapResolution = (baseData.heightmapResolution - 1) / nSize + 1; _newAlphaMapResolution = baseData.alphamapResolution / nSize; _newBaseMapResolution = baseData.baseMapResolution / nSize; _newDetailResolution = baseData.detailResolution / nSize; if (CheckConfigError()) { SlicingTerrainData(); } if (IsSmoothEdge) { SmoothPatchEdges(); } SetNeighbors(); this.Close(); } } }