private void BuildCompactField() { Heightfield hf = mBuildContext.Heightfield; CompactHeightfield chf = CompactHeightfield.Build(mBuildContext , hf , mConfig.WalkableHeight , mConfig.WalkableStep); if (CanDispose(NMGenAssetFlag.Heightfield)) { hf.RequestDisposal(); mBuildContext.Heightfield = null; } if (chf == null) { FinalizeAbort("Aborted at compact heightfield build."); return; } if (chf.SpanCount < 1) { FinalizeNoResult("Complete at compact heightfield build. No spans."); return; } mBuildContext.CompactField = chf; // Note: Post process is done before eroding the walkable area // so that the processors can stamp additional obstructions into // the heightfield. if (PostProcess() && PostCompactFieldCheck()) { if (mConfig.WalkableRadius > 0) { chf = mBuildContext.CompactField; chf.ErodeWalkableArea(mBuildContext, mConfig.WalkableRadius); mBuildContext.Log("Eroded walkable area by radius: " + mConfig.walkableRadius , this); } mBuildContext.Log("Built compact heightfield. Spans: " + chf.SpanCount, this); mState = NMGenState.RegionBuild; } }