【问题标题】:How to get list of StaticMesh from path?如何从路径中获取静态网格列表?
【发布时间】:2015-04-07 19:02:29
【问题描述】:

我正在尝试从特定路径获取 Staticmesh 列表并将 Staticmesh 设置为 RootComponent。请帮助解决这个问题。代码如下;

 TArray<UObject*> MeshAssets;    
 EngineUtils::FindOrLoadAssetsByPath(TEXT("/Game/StarterContent/Meshs/"), MeshAssets, EngineUtils::ATL_Regular);
 StaticMeshComponent->SetStaticMesh(MeshAssets.GetData);
 StaticMeshComponent->AttachTo(RootComponent);

错误是

错误 2 错误 C3867: 'TArray::GetData': 函数调用缺少参数列表;使用 '&TArray::GetData' 创建一个 指向成员的指针

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

    StaticMeshComponent-&gt;SetStaticMesh(MeshAssets.GetData);

    您正在调用一个没有( ) 和可能参数的函数。

    StaticMeshComponent-&gt;SetStaticMesh( MeshAssets.GetData( ) );

    应该取决于是否还必须有任何参数。

    【讨论】:

      【解决方案2】:

      您的代码存在一些问题:

      • 您的数组是 UObject* 类型,但您的组件需要类型为 UStaticMesh* 的对象。 SetStaticMesh 方法不将 UObject* 作为参数。
      • 您只能将阵列中的一项设置为组件的网格,例如MeshAssets[0]。
      • GetData 是一种方法,而不是变量。如果你想使用它,你必须调用 MeshAssets.GetData()。

      所以,你的代码应该看起来更像这样:

      TArray<UObject*> MeshAssets;
      EngineUtils::FindOrLoadAssetsByPath(TEXT("/Game/StarterContent/Meshs/"), MeshAssets, EngineUtils::ATL_Regular);
      for (auto asset : MeshAssets) {
          UStaticMesh* mesh = Cast<UStaticMesh>(asset);
          if (mesh != nullptr) {
              // do something with the mesh, create a component with it, etc.
          }
      }
      

      【讨论】:

      • 你可能想要包含一个非 >= c++11 版本:)
      • 我应该改变哪一部分?我的印象是如果不支持 C++11 功能就无法编译 UE4,也许我错了。据此:docs.unrealengine.com/latest/INT/Programming/Development/… 引擎代码应该支持诸如 auto 关键字之类的东西。
      • 糟糕,他们升级到 Visual Studio 13
      • 谢谢,现在编译成功了,但是无法获取网格。我认为程序流程无法进入 for 循环部分。如何检查 MeshAssets 是否包含一些网格???
      • 可以在for循环上设置断点,然后在调试器中查看MeshAssets的值。当然,您还应该确保目录存在并且里面确实有资产。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多