You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE4委托构造函数未按预期工作 所有武器子类均加载到相同网格

问题原因及修复方案

核心触发原因

问题的根因是基类AWeapon_core构造函数中,资源查找对象被声明为了static类型:

// 错误写法,static修饰导致只初始化一次
static ConstructorHelpers::FObjectFinder<USkeletalMesh> WEAPON_MESH(*(mk_weapon_mesh_path + _path));

C++中被static修饰的局部变量,只会在函数第一次被调用时执行初始化逻辑,后续所有调用都会直接复用第一次生成的变量值。你第一个实例化的武器子类(比如AK47)加载的网格会被永久存储在这个静态变量中,后续创建其他武器子类时,不会再按照传入的新路径执行资源查找,直接复用了第一次加载的网格,所以所有武器都显示为同一个模型。

修复方法

直接去掉static修饰符即可,修改后的构造函数代码如下:

AWeapon_core::AWeapon_core(FString _path)
{
    m_skeletal_mesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Weapon_mesh"));
    // 去掉static,每次实例化都会按照传入路径执行新的资源查找
    ConstructorHelpers::FObjectFinder<USkeletalMesh> WEAPON_MESH(*(mk_weapon_mesh_path + _path));

    if (WEAPON_MESH.Succeeded())
        m_skeletal_mesh->SetSkeletalMesh(WEAPON_MESH.Object);
}

其他可排查点

如果修改后仍然存在问题,可以检查以下边缘问题:

  • 确认所有武器子类构造函数传入的资源路径确实不同,没有拼写错误指向同一资源
  • 你提供的代码中基类头文件定义的路径常量名为mk_default_path,但cpp中使用的是mk_weapon_mesh_path,如果该变量不是全局常量而是成员变量,这里存在笔误,会导致路径拼接错误
  • 确认没有蓝图层或者其他运行时代码覆盖了骨骼网格体组件的赋值

内容的提问来源于stack exchange,提问作者Game_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:06:04