# 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:相对坐标转换为视口坐标
- OnPreviewKeyDown:控件获得焦点时,按下键盘的键会触发该事件。
- EventOnAnimationStart:播放动画开始时触发。
- EventOnAnimationFinished:播放动画结束后触发。
# 绘制接口
OnPaint是一个绘制图形的重要接口。
下面是一个绘制box的例子:
它常用的接口有:
- DrawBox
- DrawLine
- DrawLines
- DrawText
# 背包图标拖拽
这是一个背包图标拖拽的实例:
- 先创建要使用的userwidget:
- MainUI:主界面
- Inventory:背包界面
- InventorySlot:背包格子
- DragICON:拖拽图标
- MyDragDropOperation:拖拽管理类
- 创建相应的界面:
- 创建InventorySlot界面
- 创建DragICON界面
- 创建MyDragDropOperation
- 创建Inventory界面
- 创建MainUI界面
- 创建InventorySlot的逻辑:
- 重写OnMouseButtonDown:
- 创建EventGraph:
- 重写OnDragDetected:
- 重写OnDrop:
- 创建DragICON的逻辑: