文章目录
UE4问题总览
注释:本篇章用于记录开发中遇到的一些问题,下次遇到解决起来更快,此篇章会动态的更新,以前遇到的问题就不加了,想起来了再加(主要是懒)
1.调用SetInputMode之后遇到的一系列问题:
设置成UIOnly之后鼠标无法隐藏:
鼠标显示隐藏默认调用的是Windows的API:
在这里有俩处引用
第一处在AutomatedApplication文件中:class FAutomatedCursor: public ICursor中有
另一个在SlateApplication文件中:
这里的注释说的是如果以前光标是隐藏的,那么这里做显示处理,方便用户交互
我这里处理这个问题的方式是获取我自定义的鼠标样式,然后设置它的RenderOpacity,如果没有自定义鼠标样式的朋友,此处就爱莫能助了,如果有好办法的朋友,请留言
设置InputModeGameAndUI后,隐藏鼠标就不会立刻生效
这里具体的源码我没去查,但是也是采用了偷懒的方式,手动的去设置了鼠标位置
2.UE4UMG按钮在短时间多次点击时候Click事件没来(引擎没发送)
替换成Released做暂时处理
3.LevelSequence动态生成的,而且在调用loadingStreamingLevel之类的异步跳关卡的操作之后没法播放
只需要重新bind一下就行了
4.调用UI上调用 SetFocus之后 如果按键没有松开状态不对
本篇用的增强输入,但原理都一致,都继承自PlayerInput
调用一下它的按键刷新就行,具体原理就不过多解释了(毕竟也是调试半下午源码的结果,不想再去打断点了)
void UUIGameInstanceSubsystem::RefreshEnhancedInputKeys(const UObject* WorldContextObject)
{
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(WorldContextObject, 0);
if (PlayerController == nullptr)
{
return;
}
if (const UEnhancedInputLocalPlayerSubsystem* EnhancedInputLocalPlayerSubsystem = Cast<UEnhancedInputLocalPlayerSubsystem>(
USubsystemBlueprintLibrary::GetLocalPlayerSubSystemFromPlayerController(PlayerController, UEnhancedInputLocalPlayerSubsystem::StaticClass())))
{
EnhancedInputLocalPlayerSubsystem->GetPlayerInput()->FlushPressedKeys();
}
}