C++攀岩(上下左右移动)

前面我们完成了组件的绑定和判断条件后,我们就可以开始写攀岩的具体功能了。

首先当我们攀岩时,character应该是处于一个缩着的状态,那我们的碰撞范围也要相应的变小。

重载我们的OnMovementModeChanged,从CharacterMovementComponent中调用,通知角色移动模式已经改变。

virtual	void OnMovementModeChanged(EMovementMode PreviousMovementMode, uint8 PreviousCustomMode) override; 
DECLARE_DELEGATE(FOnEnterClimbState)
DECLARE_DELEGATE(FOnExitClimbState)
FOnEnterClimbState OnEnterClimbStateDelegate;
FOnExitClimbState OnExitClimbStateDelegate;
void UCustomMovementComponent::OnMovementModeChanged(EMovementMode PreviousMovementMode, uint8 PreviousCustomMode)
{
	if (IsOrNotClimbingModel())
	{
		bOrientRotationToMovement = false;//将我们的旋转给取消(character的旋转取决于加速度的方向)
		CharacterOwner->GetCapsuleComponent()->SetCapsuleHalfHeight(48.f);//将我们碰撞胶囊体范围变为一半

		OnEnterClimbStateDelegate.ExecuteIfBound();
	}

	if (PreviousMovementMode == MOVE_Custom && PreviousCustomMode == ECustomMovementMode::MOVE_Climb)//当之前的模式为custom时
	{
		bOrientRotationToMovement = true;
		CharacterOwner->GetCapsuleComponent()->SetCapsuleHalfHeight(96.f);

		const FRotator DirtyRotation = UpdatedComponent->GetComponentRotation();//重置旋转
		const FRotator CleanStandRotation = FRotator(0.f, DirtyRotation.Yaw, 0.f);
		UpdatedComponent->SetRelativeRotation(CleanStandRotation);
		StopMovementImmediately();//立即停止运动

		OnExitClimbStateDelegate.ExecuteIfBound();
	}
	Super::OnMovementModeChanged(PreviousMovementMode, PreviousCustomMode);
}

重载运动更新

void UCustomMovementComponent::PhysCustom(float deltaTime, int32 It
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值