Woody_Dark 2024-03-05 18:18 采纳率: 33.3%
浏览 54

关于#c++#的问题:UE5.2.1C++第三人称项目怎么利用纯代码写固定俯视角和wasd移动

UE5.2.1C++第三人称项目怎么利用纯代码写固定俯视角和wasd移动,不需要跳跃

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-03-05 18:18
    关注

    Woody_Dark 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    要在UE5.2.1的C++第三人称项目中实现固定俯视角和WASD移动,你可以按照以下步骤进行操作:

    1. 创建一个C++类,用于处理角色的控制逻辑。你可以选择继承自ACharacter类,这样你就可以使用UE提供的角色控制器。

    2. 在你的C++类中,添加成员变量来保存俯视角度和移动速度等相关参数。例如:

    float CameraPitch;
    float MoveSpeed;
    
    1. 重写角色类的Tick函数,该函数在每一帧都会被调用。在函数内部,你可以通过输入设备获取玩家输入,并更新角色的移动和视角。

    2. Tick函数中,使用GetWorld()->GetFirstPlayerController()->PlayerInput->GetKeyValue方法获取WASD按键的状态,根据按键状态和玩家输入来修改角色的位置。例如:

    float ForwardInputValue = GetWorld()->GetFirstPlayerController()->PlayerInput->GetKeyValue(EKeys::W) - GetWorld()->GetFirstPlayerController()->PlayerInput->GetKeyValue(EKeys::S);
    float RightInputValue = GetWorld()->GetFirstPlayerController()->PlayerInput->GetKeyValue(EKeys::D) - GetWorld()->GetFirstPlayerController()->PlayerInput->GetKeyValue(EKeys::A);
    
    FVector NewLocation = GetActorLocation() + GetActorForwardVector() * ForwardInputValue * MoveSpeed * DeltaTime;
    NewLocation += GetActorRightVector() * RightInputValue * MoveSpeed * DeltaTime;
    
    SetActorLocation(NewLocation);
    
    1. 同样在Tick函数中,使用GetWorld()->GetFirstPlayerController()->PlayerInput->GetMousePosition方法获取鼠标的位置,并根据鼠标位置来更新视角。例如:
    FVector2D MousePosition;
    GetWorld()->GetFirstPlayerController()->PlayerInput->GetMousePosition(MousePosition.X, MousePosition.Y);
    
    CameraPitch += MousePosition.Y * Sensitivity * DeltaTime; // 根据鼠标位置更新俯仰角
    CameraPitch = FMath::Clamp(CameraPitch, MinPitch, MaxPitch); // 对俯仰角进行最小值和最大值限制
    
    FRotator NewRotation = FRotator(CameraPitch, GetActorRotation().Yaw, 0.0f); // 创建新的角度
    GetController()->SetControlRotation(NewRotation); // 更新角度
    
    1. 将创建的C++类设置为角色的控制器类。在UE编辑器的Details面板中,找到Character类的Controller Class属性,并将其设置为你创建的C++类。

    2. 编译并运行项目,你应该能够通过WASD键控制角色的移动,并通过鼠标控制视角的俯仰角度。

    请注意,上述代码仅为示例,实际使用时可能需要根据你的需求进行修改。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月5日