[UE4]使用PlayerController获取鼠标点击时的坐标

1,获取鼠标在当前场景中坐标系统的中的position,加入场景地图的范围是一千平方米,那么这个position的范围也是1000米x1000米。

注册鼠标事件

FInputActionBinding &action1 = InputComponent->BindAction("SetDestination", IE_Pressed, this, &AHPlayerController::OnSetDestinationPressed);

函数实现MoveToMouseCursor(),此函数放在PlayerController::PlayerTick()内调用,重写下PlayerTick():

void AHPlayerController::MoveToMouseCursor()
{
    // Trace to see what is under the mouse cursor
    FHitResult Hit;
    GetHitResultUnderCursor(ECC_Visibility, false, Hit);
 
    if (Hit.bBlockingHit)
    {
        // We hit something, move there
        SetNewMoveDestination(Hit.ImpactPoint);
    }
}

2,获取鼠标再显示屏内的坐标系统的position。假如屏幕分辨率是1280x720,那么这个position的范围就是(0, 0)到(1280, 720)。PlayerController::GetMousePosition()。

AHPlayerController* PC = ...
 
float LocX = 0;
float LocY = 0;
PC->GetMousePosition(LocX, LocY);

3,触屏设备上获取场景内点击的position,其范围与第1种情况相同。

注册touch事件

InputComponent->BindTouch(EInputEvent::IE_Pressed, this, &AHPlayerController::MoveToTouchLocation);

函数实现:

void AHPlayerController::MoveToTouchLocation(const ETouchIndex::Type FingerIndex, const FVector Location)
{
    FVector2D ScreenSpaceLocation(Location);
 
    // Trace to see what is under the touch location
    FHitResult HitResult;
    GetHitResultAtScreenPosition(ScreenSpaceLocation, CurrentClickTraceChannel, true, HitResult);
    if (HitResult.bBlockingHit)
    {
        // We hit something, move there
        SetNewMoveDestination(HitResult.ImpactPoint);
    }
}

 

posted on 2018-03-23 20:35  一粒沙  阅读(3135)  评论(0编辑  收藏  举报