この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: MaxWalkSpeedを変更する方法
SEOタイトル: UE5 Character MaxWalkSpeed 変更完全ガイド

この記事の要点
  • C++: GetCharacterMovement()->MaxWalkSpeed = 600.f;
  • Blueprint: Get Character MovementSet Max Walk Speed ノード
  • 状態別: 通常 / 走り / しゃがみ で 200 / 600 / 1200 のように切替
  • 同時に調整: MaxAcceleration / GroundFriction / BrakingDecelerationWalking
  • マルチプレイ: 値は自動で Replicateされない → Server から RPC か UPROPERTY(Replicated)

UE5 の Character と CharacterMovementComponent

Unreal Engine 5 で「歩く / 走る / ジャンプ」を持つキャラクターは ACharacter を継承し、内部に UCharacterMovementComponent を持っています。歩行速度はこの Component の MaxWalkSpeed プロパティで決まります。

C++ での変更

// MyCharacter.h
UCLASS()
class MYGAME_API AMyCharacter : public ACharacter
{
    GENERATED_BODY()

public:
    AMyCharacter();

    UPROPERTY(EditDefaultsOnly, Category="Movement")
    float NormalWalkSpeed = 400.f;

    UPROPERTY(EditDefaultsOnly, Category="Movement")
    float SprintSpeed = 900.f;

    UPROPERTY(EditDefaultsOnly, Category="Movement")
    float CrouchSpeed = 200.f;

    void StartSprint();
    void StopSprint();
};
// MyCharacter.cpp
#include "MyCharacter.h"
#include "GameFramework/CharacterMovementComponent.h"

AMyCharacter::AMyCharacter()
{
    // コンストラクタで初期値設定
    GetCharacterMovement()->MaxWalkSpeed = NormalWalkSpeed;
    GetCharacterMovement()->MaxAcceleration = 2048.f;
    GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;
    GetCharacterMovement()->GroundFriction = 8.f;

    // しゃがみ系
    GetCharacterMovement()->MaxWalkSpeedCrouched = CrouchSpeed;
    GetCharacterMovement()->bCanWalkOffLedgesWhenCrouching = true;
    GetCharacterMovement()->SetCrouchedHalfHeight(45.f);
}

void AMyCharacter::StartSprint()
{
    GetCharacterMovement()->MaxWalkSpeed = SprintSpeed;
}

void AMyCharacter::StopSprint()
{
    GetCharacterMovement()->MaxWalkSpeed = NormalWalkSpeed;
}

Blueprint での変更

Blueprint Editor 上では以下のノードを使います:

[Input Action: Sprint Started] (Enhanced Input)
        │
        ▼
[Get Character Movement]   ← target: self
        │
        ▼
[Set Max Walk Speed]       ← In Max Walk Speed: 900.0
        │
        ▼

[Input Action: Sprint Completed]
        │
        ▼
[Get Character Movement]
        │
        ▼
[Set Max Walk Speed]       ← In Max Walk Speed: 400.0

または変数化:

Variables:
  Walk Speed:   Float = 400.0  (Default)
  Sprint Speed: Float = 900.0
  Crouch Speed: Float = 200.0

Event BeginPlay:
  Set: Character Movement -> Max Walk Speed = Walk Speed
  Set: Character Movement -> Max Walk Speed Crouched = Crouch Speed

主要プロパティと値の目安

プロパティ説明デフォルト調整目安
MaxWalkSpeed地上の最大移動速度 (cm/s)600歩 200 / 走 600 / ダッシュ 900-1200
MaxWalkSpeedCrouchedしゃがみ中の最大速度300100-250
MaxAcceleration加速度 (cm/s²)2048速度に合わせる
GroundFriction地上摩擦 (大きいほど止まりやすい)83-12 で調整
BrakingDecelerationWalking歩行ブレーキ減速度2048キビキビなら 4000+
JumpZVelocityジャンプ初速700500-1200
AirControl空中での移動制御 (0-1)0.050.2-0.5 で操作性向上
GravityScale重力倍率1.01.5-2.0 で重いキャラ

速度に応じて加速度も連動させる

MaxWalkSpeed だけ上げてもキビキビ動きません。MaxAcceleration を比例させるのが定石:

void AMyCharacter::SetMovementProfile(float NewMaxSpeed)
{
    UCharacterMovementComponent* CMC = GetCharacterMovement();
    CMC->MaxWalkSpeed = NewMaxSpeed;

    // 加速度を速度の 3-4 倍に
    CMC->MaxAcceleration = NewMaxSpeed * 3.5f;

    // 減速も追従
    CMC->BrakingDecelerationWalking = NewMaxSpeed * 3.0f;
}

状態遷移: Walk / Sprint / Crouch

UENUM(BlueprintType)
enum class EMoveState : uint8 { Walk, Sprint, Crouch };

void AMyCharacter::SetMoveState(EMoveState NewState)
{
    UCharacterMovementComponent* CMC = GetCharacterMovement();

    switch (NewState)
    {
    case EMoveState::Walk:
        UnCrouch();
        CMC->MaxWalkSpeed = 400.f;
        break;
    case EMoveState::Sprint:
        UnCrouch();
        CMC->MaxWalkSpeed = 900.f;
        break;
    case EMoveState::Crouch:
        Crouch();
        CMC->MaxWalkSpeed = 200.f;
        break;
    }
}

地形・状態による減速

ぬかるみ / 雪 / 階段 などで速度を変えたい場合:

// 物理マテリアル別に MaxWalkSpeed を倍率調整
void AMyCharacter::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    FFindFloorResult FloorResult;
    GetCharacterMovement()->FindFloor(GetActorLocation(), FloorResult, false);
    UPhysicalMaterial* Phys = FloorResult.HitResult.PhysMaterial.Get();

    float SpeedMultiplier = 1.f;
    if (Phys)
    {
        if (Phys->SurfaceType == SurfaceType1)        SpeedMultiplier = 0.5f; // 雪
        else if (Phys->SurfaceType == SurfaceType2)   SpeedMultiplier = 0.3f; // 泥
    }
    GetCharacterMovement()->MaxWalkSpeed = NormalWalkSpeed * SpeedMultiplier;
}

マルチプレイヤー (Replication) での注意

UE5 のマルチプレイヤーゲームでは、サーバ側で MaxWalkSpeed を変えてもクライアント側に自動同期されません。RPC か Replicated プロパティが必要です:

// 方法1: Server RPC で値を変えるリクエスト
UFUNCTION(Server, Reliable)
void Server_SetSprint(bool bSprint);

void AMyCharacter::Server_SetSprint_Implementation(bool bSprint)
{
    GetCharacterMovement()->MaxWalkSpeed = bSprint ? 900.f : 400.f;
    // CharacterMovementComponent 自体が状態を同期するが、
    // MaxWalkSpeed そのものは Replicated ではない
}

// 方法2: Replicated プロパティ
UPROPERTY(ReplicatedUsing=OnRep_MaxWalkSpeed)
float CurrentMaxWalkSpeed;

UFUNCTION()
void OnRep_MaxWalkSpeed()
{
    GetCharacterMovement()->MaxWalkSpeed = CurrentMaxWalkSpeed;
}

void AMyCharacter::GetLifetimeReplicatedProps(TArray& OutProps) const
{
    Super::GetLifetimeReplicatedProps(OutProps);
    DOREPLIFETIME(AMyCharacter, CurrentMaxWalkSpeed);
}

デバッグと確認

// 画面に現在値を表示
GEngine->AddOnScreenDebugMessage(-1, 0.f, FColor::Green,
    FString::Printf(TEXT("Speed: %.0f / Max: %.0f"),
        GetVelocity().Size2D(),
        GetCharacterMovement()->MaxWalkSpeed));

// コンソールコマンド (UE5 デフォルト)
// ~ キー → コンソール
ShowFlag.PlayerLocation 1
DisplayAll CharacterMovementComponent MaxWalkSpeed

よくある質問・トラブル

症状原因対処
値を変えても速度が変わらないBeginPlay で別の値に上書きされているAnimation Blueprint や Tick での再設定を疑う
移動はするが滑る・止まらないBrakingDeceleration / GroundFriction が低い両方上げる
速度を上げたのに加速が鈍いMaxAcceleration が固定速度に比例させる
マルチで自分は速いが他人は遅いままReplicate されていないServer RPC / Replicated プロパティ
しゃがみで速度変わらないCrouch を呼んでいないCrouch() / UnCrouch() を使う

FAQ

Q: 速度の単位は?
A: cm/s (センチメートル毎秒)。UE のデフォルトスケールでは「1 ユニット = 1 cm」なので、MaxWalkSpeed = 600 は 6 m/s ≒ 速歩 〜 軽いジョギング。

Q: アニメーションが速度に追従しない
A: Animation Blueprint の Blend Space で「Speed」軸を GetVelocity().Size() から取って渡し、ブレンド範囲を MaxWalkSpeed と揃えてください。

Q: 移動入力に対する反応が遅い
A: MaxAcceleration を上げ、UseSeparateBrakingFriction = true + BrakingFriction を大きく。Enhanced Input の Trigger 設定も確認。