UE4 动作映射

1.在项目设置中映射按键

2.在MyCharacter.h头文件中,声明添加映射按键相应的函数

	void press();
	void release();

private:
	bool isMousePressed = false;
	void moveForward(float value);
	void moveRight(float value);
	void lookUp(float value);
	void lookRight(float value);
	float LocX = 0;
	float LocY = 0;

3.在MyCharacter.cpp文件中,定义相应函数

void AMyCharacter::moveForward(float value)
{
	// 明确哪个方向是“前进”,并记录玩家试图向此方向移动。  
	FVector driection = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
	AddMovementInput(driection, value);
}

void AMyCharacter::moveRight(float value)
{
	// 明确哪个方向是“向右”,并记录玩家试图向此方向移动。
	FVector driection = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
	AddMovementInput(driection, value);
}

void AMyCharacter::lookUp(float value)
{	
	if(isMousePressed)

	AddControllerYawInput(value);
}

void AMyCharacter::lookRight(float value)
{	
	if (isMousePressed)
	AddControllerPitchInput(value);
}

void AMyCharacter::press()
{
	isMousePressed = true;
	
	//鼠标左键点击时,隐藏光标
	FSlateApplication::Get().GetPlatformApplication()->Cursor->Show(false);

	//获取鼠标最开始的位置
	GetWorld()->GetFirstPlayerController()->GetMousePosition(LocX, LocY);
}

void AMyCharacter::release()
{
	isMousePressed = false;
	//鼠标左键松开时,显示光标
	FSlateApplication::Get().GetPlatformApplication()->Cursor->Show(true);

	//设置鼠标最开始的位置
	//GetWorld()->GetFirstPlayerController() 代表playercontroller

	FViewport* v = CastChecked<ULocalPlayer>(GetWorld()->GetFirstPlayerController()->Player)->ViewportClient->Viewport;
	int intX = (int)LocX;
	int intY = (int)LocY;
	v->SetMouse(intX, intY);
}

或:

void AMyCharacter::MoveForward(float amount)
{
    // Controller控制器当前拥有该actor。例如如果当前角色死了,actor不存在了,此时Controller控制器没有拥有任何一个actor,那么如果我们还想去控制它,就会出错。
    // 如果控制器没有拥有actor或者移动量是0,不能进入该函数。
    if (Controller && amount)
    {
        // GetActorForwardVector()取得角色向前的向量
        FVector fwd = GetActorForwardVector();
        // 我们调用AddMovementInput来在‘fwd’向量的方向上移动角色‘amount’个单位
        AddMovementInput(fwd, amount);
    }
}
void AMyCharacter::MoveBack(float amount)
{
    if (Controller && amount)
    {
        // GetActorForwardVector()取得角色向前的向量,加上负号,该向量就向后,所以取得了角色向后的向量
        FVector back = -GetActorForwardVector();
        AddMovementInput(back, amount);
    }
}
注:这种方法不需要在项目设置里设置1和-1

4.绑定映射

// 游戏开始时被调用以绑定设备输入功能
void AMyCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
	Super::SetupPlayerInputComponent(InputComponent);

	// 设置“移动”绑定。 
	InputComponent->BindAxis("MoveForward", this, &AMyCharacter::moveForward);
	InputComponent->BindAxis("MoveRight", this, &AMyCharacter::moveRight);
	InputComponent->BindAxis("LookUp", this, &AMyCharacter::lookUp);
	InputComponent->BindAxis("LookRight", this, &AMyCharacter::lookRight);
	
	InputComponent->BindAction("Press", EInputEvent::IE_Pressed, this, &AMyCharacter::press);
	InputComponent->BindAction("Press", EInputEvent::IE_Released, this, &AMyCharacter::release);
	
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页