UE4 安卓触摸事件相关问题

UE4在安卓端获取输入信息时候,似乎会把触摸事件和PC端的鼠标事件弄混在一起,导致出现一些奇怪的问题。

1. /* 安卓端会把触摸事件读取成PC端的鼠标事件,因为Turn和LookUp在PC端开发时候一般都绑定在鼠标X轴,Y轴上,

* 所以这里要对安卓端做一些特殊处理。

*/

#if !PLATFORM_ANDROID

  PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);

  PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);

#endif

 

2. 在列表中放置按钮时候因为需要把按钮的 ClickMethod设置为 PreciseClick,这样才能在左键拖动鼠标时候滑动列表。对应的在移动端设备中则应该修改TouchMethod为 PreciseTap,这样才能滑动列表,但是同理因为安卓端的问题,该处地方 ClickMethod 不能为PreciseClick,改为 DownAndUp就好。

如若不然,可能会导致个别奇怪问题,比如某个地方的按钮不能接收到ClickEvent。

 

3.在PlayerController的InputTouch函数中获取到的TouchLocation时,TouchBegin和TouchMove消息获取的位置比TouchEnd的位置大1.5倍。而且通过PlayerInputComponent绑定的TouchEnd消息不能触发。

 

bool AMyPlayerController::InputTouch(uint32 Handle, ETouchType::Type Type, const FVector2D& TouchLocation, float Force, FDateTime DeviceTimestamp, uint32 TouchpadIndex)
{
#if PLATFORM_ANDROID
    FVector2D EndTouchLocation = TouchLocation;
    //end消息在android下存在问题,需要乘以1.5倍
    if (Type == ETouchType::Ended)
    {
       EndTouchLocation *= 1.5f;
    }
#endif
   ...
}//本文为CSDN博主执手画眉弯原创,未经允许不得转载!
bool AMyCharacter::EnableTouchscreenMovement(class UInputComponent* PlayerInputComponent)
{
	if (FPlatformMisc::SupportsTouchInput() || GetDefault<UInputSettings>()->bUseMouseForTouch)
	{
		PlayerInputComponent->BindTouch(EInputEvent::IE_Pressed, this, &AMyCharacter::BeginTouch);

#if !PLATFORM_ANDROID
		//安卓设备接收不到结束点击事件
		PlayerInputComponent->BindTouch(EInputEvent::IE_Released, this, &AMyCharacter::EndTouch);
#endif

		//Commenting this out to be more consistent with FPS BP template.
		PlayerInputComponent->BindTouch(EInputEvent::IE_Repeat, this, &AMyCharacter::TouchUpdate);
		return true;
	}

	return false;
}//本文为CSDN博主执手画眉弯原创,未经允许不得转载!

注:EnableTouchscreenMovement函数在重载的SetupPlayerInputComponent函数中调用。

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4中的触摸屏(touch)事件可以分为单指触摸和双指触摸两种。 对于单指触摸事件,当用户在触摸屏上用单个手指进行触摸时,可以触发一系列的单指触摸事件。比如,当手指接触触摸屏时,可以触发"TouchBegan"事件,表示触摸开始;当手指在触摸屏上滑动时,可以触发"TouchMoved"事件,表示触摸移动;当手指离开触摸屏时,可以触发"TouchEnded"事件,表示触摸结束。通过单指触摸事件,开发者可以根据用户的操作来实现各种交互效果,比如拖拽、缩放等。 对于双指触摸事件,当用户在触摸屏上用两个手指进行触摸时,可以触发一系列的双指触摸事件。常见的双指触摸事件包括双指捏合、双指旋转等。比如,当两个手指接触触摸屏时,可以触发"TouchStarted"事件,表示双指触摸开始;当两个手指在触摸屏上移动时,可以触发"TouchMoved"事件,表示双指触摸移动;当两个手指离开触摸屏时,可以触发"TouchEnded"事件,表示双指触摸结束。通过双指触摸事件,开发者可以实现双指缩放、双指旋转等效果。 在UE4中,可以通过监听触摸事件并编写相应的逻辑来实现单指和双指触摸的功能。通过获取触摸点的位置信息、移动距离等参数,可以实现各种交互效果。同时,UE4还提供了一些内置函数和工具,用于处理触摸事件的便捷操作和处理。开发者可以根据项目需求来选择适合的触摸事件相关功能,提升游戏的交互性和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值