跳转到内容

SusMinimap

SusMinimap

通用小地图 — 瓦片网格、自由贴图或节点图;单位 / POI 标记、缩放、战争迷雾、摄像机视锥。

SusGame · 原子(商业)

在 Playground 中打开

SusGame · Molecules

属性

名称类型默认值
RenderModeProp<string>"grid"
MapWidthProp<int>30
MapHeightProp<int>30
MinimapTextureProp<Texture2D>null
ShowGridProp<bool>true
CurrentFloorLevelProp<int>0
ShowPlayerProp<bool>false
PlayerPositionProp<Vector2>new Vector2(0.5f, 0.5f)
PlayerForwardProp<Vector2>new Vector2(0f, 1f)
PlayerModeProp<string>"center"
ViewConeAngleProp<float>70f
CameraTextureProp<Texture2D>null
ShowCameraIndicatorProp<bool>true
CameraBoundsProp<MinimapCameraRect>new MinimapCameraRect()
ZoomProp<float>1f
ZoomCenterProp<Vector2>new Vector2(0.5f, 0.5f)
FollowCameraProp<bool>true
MinZoomProp<float>0.5f
MaxZoomProp<float>3f
ZoomStepProp<float>0.25f
ShowZoomControlsProp<bool>false
RotationModeProp<string>"north-up"
ShowCompassProp<bool>false
ShowEdgeIndicatorsProp<bool>true
MaxEdgeIndicatorsProp<int>6
LabelModeProp<string>"selected"
MaskShapeProp<string>"square"
FrameVisibleProp<bool>true
FrameTitleProp<string>""
ShowFogOfWarProp<bool>false
FogMaskProp<Texture2D>null
InteractiveProp<bool>true
AutoResizeProp<bool>true
MinSizeProp<float>128f
MaxSizeProp<float>512f
MapBoundsProp<MinimapBounds>new MinimapBounds()

插槽

名称
(默认)
frameOverlay
cornerTopLeft
cornerTopRight
cornerBottomLeft
cornerBottomRight

事件

名称字段载荷
CellClickedOnCellClickedVector2
UnitClickedOnUnitClickedint
PoiClickedOnPoiClickedstring
NodeClickedOnNodeClickedstring
ZoomChangedOnZoomChangedfloat

样式钩子

USS 类契约 — 无需改 C# 即可覆盖外观。状态通过这些类切换:

  • sus-minimap
  • sus-minimap__camera
  • sus-minimap__compass
  • sus-minimap__compass-label
  • sus-minimap__compass-label--e
  • sus-minimap__compass-label--n
  • sus-minimap__compass-label--s
  • sus-minimap__compass-label--w
  • sus-minimap__container
  • sus-minimap__corner
  • sus-minimap__corner--bl
  • sus-minimap__corner--br
  • sus-minimap__corner--tl
  • sus-minimap__corner--tr
  • sus-minimap__edge-counter
  • sus-minimap__edge-indicator
  • sus-minimap__edge-layer
  • sus-minimap__fog
  • sus-minimap__frame
  • sus-minimap__label
  • sus-minimap__node
  • sus-minimap__node--appear
  • sus-minimap__node--current
  • sus-minimap__node-icon
  • sus-minimap__node-label
  • sus-minimap__nodes
  • sus-minimap__overlay-slot
  • sus-minimap__player-arrow
  • sus-minimap__player-cone
  • sus-minimap__player-layer
  • sus-minimap__poi
  • sus-minimap__poi--kind-loot
  • sus-minimap__poi--kind-objective
  • sus-minimap__poi--pulse
  • sus-minimap__poi-icon
  • sus-minimap__poi-label
  • sus-minimap__pois
  • sus-minimap__terrain
  • sus-minimap__title
  • sus-minimap__unit
  • sus-minimap__unit--kind-loot
  • sus-minimap__unit--kind-objective
  • sus-minimap__unit--selected
  • sus-minimap__unit-dir
  • sus-minimap__unit-hp
  • sus-minimap__unit-hp-fill
  • sus-minimap__units
  • sus-minimap__zoom-btn
  • sus-minimap__zoom-controls
  • sus-minimap--fit
  • sus-minimap--frame-visible
  • sus-minimap--free
  • sus-minimap--grid
  • sus-minimap--interactive
  • sus-minimap--mask-circle
  • sus-minimap--mask-square
  • sus-minimap--node

用法

选择 RenderModegrid | free | node),然后从 C# 填充列表属性(TerrainData / MinimapTexture / NodeData+EdgeData)。标记和点击由列表驱动 — 不是 XML 列表。

csharp
var map = new SusMinimap();
map.RenderMode.Value = "grid";
map.MapWidth.Value = 30;
map.MapHeight.Value = 30;
map.MaskShape.Value = "circle";
map.FrameTitle.Value = "Floor 1";
map.ShowGrid.Value = true;
map.Interactive.Value = true;

map.TerrainData.Value = new List<SusMinimap.MinimapCell>
{
    new() { X = 0, Z = 0, Type = 1, FloorLevel = 0, Visibility = 2 },
};
map.UnitData.Value = new List<SusMinimap.MinimapUnitMarker>
{
    /* … */
};

map.OnCellClicked += cell => { /* Vector2 grid coords */ };
map.OnUnitClicked += idx => { /* marker index */ };
map.OnPoiClicked += id => { /* … */ };
map.OnNodeClicked += id => { /* … */ };
map.OnZoomChanged += z => { /* … */ };

// Helpers
// map.FocusOn(new Vector2(0.5f, 0.5f), zoom: 1.5f);
// map.ResetZoom();
// map.RegenerateTerrainTexture();
xml
<template>
  <sus:SusMinimap :RenderMode="Mode.Value"
                  :MapWidth="W.Value"
                  :MapHeight="H.Value"
                  :ShowGrid="Grid.Value"
                  :CurrentFloorLevel="Floor.Value"
                  :MaskShape="Mask.Value"
                  :FrameVisible="Frame.Value"
                  :FrameTitle="Title.Value"
                  :ShowFogOfWar="Fog.Value"
                  :Interactive="Ix.Value"
                  :Zoom="Zoom.Value"
                  :MinZoom="MinZ.Value"
                  :MaxZoom="MaxZ.Value"
                  :FollowCamera="Follow.Value"
                  :ShowCameraIndicator="Cam.Value"
                  :AutoResize="Auto.Value"
                  :MinSize="MinS.Value"
                  :MaxSize="MaxS.Value"
                  @cell-clicked="OnCell"
                  @unit-clicked="OnUnit"
                  @poi-clicked="OnPoi"
                  @node-clicked="OnNode"
                  @zoom-changed="OnZoom" />
</template>

<script>
public Prop<string> Mode = new("grid");
public Prop<int> W = new(30);
public Prop<int> H = new(30);
public Prop<bool> Grid = new(true);
public Prop<int> Floor = new(0);
public Prop<string> Mask = new("circle");
public Prop<bool> Frame = new(true);
public Prop<string> Title = new("Floor 1");
public Prop<bool> Fog = new(false);
public Prop<bool> Ix = new(true);
public Prop<float> Zoom = new(1f);
public Prop<float> MinZ = new(0.5f);
public Prop<float> MaxZ = new(3f);
public Prop<bool> Follow = new(true);
public Prop<bool> Cam = new(true);
public Prop<bool> Auto = new(true);
public Prop<float> MinS = new(128f);
public Prop<float> MaxS = new(512f);
void OnCell(Vector2 cell) { /* … */ }
void OnUnit(int index) { /* … */ }
void OnPoi(string id) { /* … */ }
void OnNode(string id) { /* … */ }
void OnZoom(float z) { /* … */ }
// Fill TerrainData / UnitData / PoiData / NodeData / EdgeData /
// MinimapTexture / FogMask / CameraBounds / MapBounds from C#.
</script>
Prop / API作用
RenderModegrid | free | node
MapWidth · MapHeight网格尺寸(默认 30
TerrainDataList<MinimapCell> — 网格瓦片(会重新生成贴图)
MinimapTexture预制贴图(free / 跳过生成)
ShowGrid · CurrentFloorLevel网格外观 / 多楼层
UnitData · PoiData标记列表
NodeData · EdgeData图(node 模式)
CameraTexture · ShowCameraIndicator · CameraBounds · FollowCamera视锥
Zoom · ZoomCenter · MinZoom · MaxZoom缩放
MaskShapesquare | circle
FrameVisible · FrameTitle边框外观
ShowFogOfWar · FogMask战争迷雾遮罩
Interactive点击 / 缩放输入
AutoResize · MinSize · MaxSize宿主尺寸限制
MapBounds世界边界(free 世界↔小地图)
default / frameOverlay / corner* 插槽覆盖层内容
RegenerateTerrainTexture · FocusOn · ResetZoom · Toggle辅助方法
OnCellClicked · OnUnitClicked · OnPoiClicked · OnNodeClicked · OnZoomChanged事件

模式

RenderMode来源
gridTerrainData 格子 → 生成的贴图
freeMinimapTexture(+ MapBounds
nodeNodeData + EdgeData(嵌套的 MinimapNodeState / MinimapEdgeState

嵌套类型位于 SusMinimap 上(MinimapCellMinimapUnitMarkerMinimapPOIMarkerMinimapNodeMinimapEdgeMinimapBoundsMinimapCameraRect)— 字段请参见 .sharq

备注

  • HUD 外观包装器(占位符 / 尺寸):SusHudMinimapFrame — 通过 SetContent 或默认插槽注入该原子组件。
  • 列表 / 贴图 / 边界属性由 C# 驱动;XML 绑定上面的标量外观属性。
  • ComponentApi 提取可能会遗漏没有 [CreateProperty] 的列表属性 — 请以表格 / .sharq 为准。