# UMG入门

# 常用控件

  • Border:它是一个只包含子控件的容器控件,能够使用一张背景图片来包裹它,并调整内边距。
  • Button:按钮控件。关于Visibility注意Not Hit-Testable(Self & All Children)和Not Hit-Testable(Self Only)区别。一个是该控件及其子控件一块不能同鼠标交互,另一个是该控件不能同鼠标交互,但其子控件能同鼠标交互。
  • Image:图像控件。
  • Text,EditableText:文本框。如果想要实现字体换行:
    • Default Wrapping:当文本中有空格会换行。
    • AllowPerCharacterWrapping:每个字母都会直接换行。
  • RichTextBlock:需要设置TextStyleSet,创建DataTable,选择RichTextStyle。
  • Slider:滚动条。
  • ProgressBar:进度条。可以选择使用Marquee跑马灯效果。
  • ExpandableArea:是否显示某个区域。
  • ComboBox:下拉菜单框。
  • SpinBox:输入一个范围的数值。
  • checkbox:勾选框。

# Panel

下面是常用的Panel:

  • CanvasPanel:允许widget在里面以绝对位置摆放,放置锚点,以z-ordered来前后摆放控件。在手动摆放的时候这个控件很友好,在程序化生成控件的时候不太方便。
  • GridPanel:很容易调控其中控件的宽和高。
  • HorizontalBox:水平控制控件。
  • VerticalBox:垂直控制控件。
  • Overlay:允许其中控件在其他控件上叠加。
  • ScaleBox:内部控件按固定宽高比来缩放。
  • ScrollBox:滑条插件,超出内容将使用滚动条隐藏。
  • SizeBox:将内部控件控制在预定大小。
  • UniformGridPanel:将所有子控件所占控件均分。
  • WrapBox:从左到右或从上到下来安排子控件,超出尺寸的控件将安排在下一行。
  • WidgetSwitcher:切换控件。

# 常用接口

  • EventOnTouchStarted:开始触摸屏幕时调用。
  • EventOnTouchMoved:在屏幕上移动时调用。
  • EventOnTouchGesture:捕获手势。
  • EventOnTouchEnded:结束触摸时调用。
  • EventOnRemovedFromFocusPath:当前控件或它的子控件获取焦点时将其加入到FocusPath中,如果它之前不是FocusPath的一部分,则触发该事件。
  • EventOnAddedToFocusPath:当前控件或它的子控件失去焦点时触发该事件,当前控件会从FocusPath中移除。
  • OnMouseButtonDown:如果鼠标点击了这个控件,就会触发,而且事件是会冒泡的。
  • OnMouseMove:如果鼠标在控件上移动触发,事件会冒泡。
  • OnKeyDown:在控件获取焦点时,按下键来触发。
  • OnPreviewMouseButtonDown:当鼠标点击时触发,同上面不同的是它使用的是tunnel而不是冒泡,这个事件发送了就不会发送上面的的事件,还可通过MyGeometry获取:
    • GetAbsoluteSize:获取绝对尺寸
    • AbsoluteToLocal:世界坐标转换为相对坐标,如果MyGeometry是通过slate传过来的,则获取slate下的相对坐标。
    • GetLocalSize:获取相对Size
    • IsUnderLocation:判断是否在某个相对坐标之下
    • LocalToAbsolute:相对坐标转为绝对坐标
    • LocalToViewport:相对坐标转换为视口坐标
    • PreviewMouseButtonDown
  • OnPreviewKeyDown:控件获得焦点时,按下键盘的键会触发该事件。
  • EventOnAnimationStart:播放动画开始时触发。
  • EventOnAnimationFinished:播放动画结束后触发。

# 绘制接口

OnPaint是一个绘制图形的重要接口。

下面是一个绘制box的例子:

DrawBox

它常用的接口有:

  • DrawBox
  • DrawLine
  • DrawLines
  • DrawText

# 背包图标拖拽

这是一个背包图标拖拽的实例:

  1. 先创建要使用的userwidget:
    • MainUI:主界面
    • Inventory:背包界面
    • InventorySlot:背包格子
    • DragICON:拖拽图标
    • MyDragDropOperation:拖拽管理类 CreateUserWidget
  2. 创建相应的界面:
    • 创建InventorySlot界面 CreateInventorySlot
    • 创建DragICON界面 CreateDragICON
    • 创建MyDragDropOperation CreateMyDragDropOperation
    • 创建Inventory界面 Inventory1
    • 创建MainUI界面 MainUI1
  3. 创建InventorySlot的逻辑:
    • 重写OnMouseButtonDown: InventorySlot1
    • 创建EventGraph: InventorySlot2
    • 重写OnDragDetected: InventorySlot3
    • 重写OnDrop: InventorySlot4
  4. 创建DragICON的逻辑:
    • DragICON1