当前位置: 首页 > wzjs >正文

动态网站 费用网络营销岗位描述的内容

动态网站 费用,网络营销岗位描述的内容,app科技网站建设,北京网页设计模板Slate 焦点、捕获,输入处理与玩家控制器的关系 在虚幻引擎开发中我们必不可少的会接触到键盘输入、鼠标输入、ui上各种焦点问题、鼠标被ui捕获等等 以及与玩家控制器之间的关系(也就是玩家控制器 或者 本地玩家(玩家输入 UPlayerInput&…

Slate 焦点、捕获,输入处理与玩家控制器的关系

在虚幻引擎开发中我们必不可少的会接触到键盘输入、鼠标输入、ui上各种焦点问题、鼠标被ui捕获等等

以及与玩家控制器之间的关系(也就是玩家控制器 或者 本地玩家(玩家输入 UPlayerInput) 是如何拿到输入事件的)

这个问题一直困扰我 我今天就记录一下自己当前浅薄的知识

1、Slate如何绘制到屏幕上

1.首先我们需要知道Slate中的几个基本类型

1.SCompoundWidget(单子控件容器)
  • 定义:只有一个 ChildSlot,可以包裹一个控件(SWidget)
  • 用途:自定义复合控件。
  • 例子:SButton、SScrollBox、SWindow
2.SPanel(多子控件容器)
  • 定义 :可以拥有多个 Slot,每个 Slot 存一个子控件(SWidget)。
  • 用途 :用于布局、排列、聚合多个控件。
  • 例子 :SVerticalBox、SOverlay、SDPIScaler、SConstraintCanvas(大家熟悉的画布面板)
3.SLeafWidget(叶子控件容器)
  • 定义 :没有Slot,也就是没有子控件。
  • 用途 :负责绘制或显示具体内容
  • 例子 :STextBlock、SImage
4.SWidget (控件)
  • Slate控件顶层父类
  • 自定义控件( 一般来说不用它)

2.Slate绘制流程

先来一个简易的类图

在这里插入图片描述

简易的流程图
在这里插入图片描述
在这里插入图片描述

从图上看出来了 slate会从树的顶部 一直往下进行遍历
不断的调用
SWidget::Paint
SWidget::OnPaint

也就是说 你想让ue显示你新写的的Slate UI
你需要添加到某个已经在屏幕上显示的Slate 的控件中的Slot里面就可以了

2.Slate响应输入

Slate响应输入的关键函数都在
FSlateApplication类里面
类似ProcessMouseButtonDownEvent这类函数

1.从鼠标左键开始

Slate响应鼠标按键按下时
会调用到 FSlateApplication::ProcessMouseButtonDownEvent 函数

先来个简易的流程图
在这里插入图片描述

从上图我们看出最关键的地:
FEventRouter::Route <>
FEventRouter::FToLeafmostPolicy 迭代策略系列
控件路径
捕获路径
键盘焦点路径

下面我们就说说这几个路径

2.控件路径

  • 控件路径:主要是用于 在鼠标没有被任何Slate控件捕获的情况下
    我们拥有的Slate控件树从根到最后的叶子的迭代路径
  • 由来:FSlateApplication::Tick 函数中 调用的 SWidget::Paint中调用的FHittestGrid::AddWidget函数中进行添加的
  • 控件需要可视与可交互 才会被收集
  • 当然响应时也做出了可交互的判断

3.键盘焦点路径

  • 键盘输入响应的控件路径
    其实就是FSlateUser::WeakFocusPath
  • 由来:
    这个会在每次调用 FSlateUser::SetFocusPath
    进行设置 一般是1直接调用 FSlateApplication::SetUserFocus
    这个会将当前要设置的焦点控件 从根到自己为止的控件迭代路径 保留到WeakFocusPath
    让键盘输入事件时使用

4.捕获路径

  • Slate控件捕获鼠标时 缓存的控件路径
  • 鼠标事件响应时会做 SlateUser捕获鼠标与否做 控件迭代路径的不同
  • 由来:FSlateApplication::ProcessReply 函数中 FSlateUser::SetPointerCaptor会将捕获的控件为止的路径 保存到FSlateUser::PointerCaptorPathsByIndex
  • 返回的 FReply 也是在FSlateApplication::ProcessReply中进行处理的

3.FSlateApplication::ProcessReply函数

  • 触发这个函数会在引擎的Tick里触发
  • FEventRouter::Route <>中
  • 这个函数处理了FReply
  • FSlateApplication::SetUserFocus
  • FSlateUser::SetPointerCaptor

Tick触发时主要是处理ULocalPlayer::SlateOperations 也是 FReply

好像鼠标移动也会进行处理

4.Slate键盘响应

  • FSlateApplication::ProcessKeyDownEvent
    在这个函数中我们发现 它直接使用了焦点路径进行迭代的
		TSharedRef<FWidgetPath> EventPathRef = SlateUser->GetFocusPath();const FWidgetPath& EventPath = EventPathRef.Get();// Switch worlds for widgets inOnPreviewMouseButtonDown the current pathFScopedSwitchWorldHack SwitchWorld(EventPath);// Tunnel the keyboard eventReply = FEventRouter::RouteAlongFocusPath(this, FEventRouter::FTunnelPolicy(EventPath), InKeyEvent, [] (const FArrangedWidget& CurrentWidget, const FKeyEvent& Event){if (CurrentWidget.Widget->IsEnabled()){const FReply TempReply = CurrentWidget.Widget->OnPreviewKeyDown(CurrentWidget.Geometry, Event);return TempReply;}return FReply::Unhandled();}, ESlateDebuggingInputEvent::PreviewKeyDown);

别看FEventRouter::RouteAlongFocusPath<> 函数不一样 其实也是 FEventRouter::Route <>

5.玩家控制器拿到输入事件

1.玩家控制器的输入事件也是从一个Slate控件传递下来的

只是比我们的UMG创建的SObjectWidget在树中的层级 高了很多

2.玩家控制器只要获取鼠标输入事件他就会进行捕获鼠标 还有焦点
这样的话焦点路径和捕获路径都被设置成当前的Slate控件了 (一般是SViewport类似的)
以后该Slate控件后面的控件都没法拿到输入了

参考:

(6 条消息) UE4-Slate源码学习(二)slate事件触发 - 知乎

虚幻引擎UI组件开发快速入门【UMG/Slate】_umg获取slate-CSDN博客

UE4c++ Slate整套学习流程(源码编译+Slate框架+SlateViewer)_widget reflector-CSDN博客

【UE Slate】 虚幻引擎Slate开发快速入门-CSDN博客
tails/126990479?spm=1001.2014.3001.5506)

【UE Slate】 虚幻引擎Slate开发快速入门-CSDN博客

http://www.dtcms.com/wzjs/409604.html

相关文章:

  • 怎么做自己微信的网站如何快速推广网上国网
  • 多用户商城网站开发百度seo查询系统
  • wordpress相册模板深圳网站优化公司哪家好
  • 企业网站公示怎么做实体店铺引流推广方法
  • 公司网站主页怎么做培训机构管理系统
  • 网站进度条特效上海正规seo公司
  • 公司网站自己可以做吗给公司做网站的公司
  • 广安建设网站平台推广网站
  • 软件工程师是做什么的抖音关键词排名优化
  • 建设公司企业使命泰安网站seo
  • 什么网站做任务今日的最新新闻
  • 职场社交网站怎么做医疗网站优化公司
  • 做个小型购物网站要多少钱合肥seo快排扣费
  • html做网站实战教程建立网站的流程
  • wordpress 修改admin成都seo优化公司
  • 自动做海报的网站品牌推广百度seo
  • 创建公司网站过程用html制作淘宝网页
  • wordpress 4.4.4优化设计四年级上册数学答案
  • 网站的三级页面怎么做安徽网络seo
  • 网站建设中网站需求分析win10优化软件
  • 网站用小程序单页面网站如何优化
  • 做网站排名seo武汉企业网站推广
  • 网站首页设计布局win7优化大师
  • 怎么样购买服务器建设网站seo自动推广软件
  • 松岗专业做网站公司全网推广软件
  • 如何与其他网站做友情链接电商是做什么的
  • 航空港区发改委建设网站短视频营销成功的案例
  • java做的网站phpseo排名啥意思
  • 小白怎么做淘宝客网站搜索引擎推广的方法有哪些
  • 武汉网站关键词公司网站建设费