有一些在answers.unrealengine.com上关于这个问题的泛泛而谈的回答,但它们似乎缺乏任何细节或示例。
具体而言,如果您想要实现一组在3D游戏世界中渲染的动态纹理四边形,应该如何做到呢?请提供详细说明。
例如,考虑一个使用Spriter动画的2D侧卷游戏。可以轻松从XML加载2D动画,但如何在场景中动态地呈现这组纹理、旋转和缩放的2D四边形呢?
有一些在answers.unrealengine.com上关于这个问题的泛泛而谈的回答,但它们似乎缺乏任何细节或示例。
具体而言,如果您想要实现一组在3D游戏世界中渲染的动态纹理四边形,应该如何做到呢?请提供详细说明。
例如,考虑一个使用Spriter动画的2D侧卷游戏。可以轻松从XML加载2D动画,但如何在场景中动态地呈现这组纹理、旋转和缩放的2D四边形呢?
您面临的问题是生成网格还是获取正确方向?(例如正交投影,面向相机)
生成网格很容易,可以通过蓝图或代码实现。
在蓝图中,您需要设置某些前提条件,然后根据条件选择生成角色。实际编码解决方案看起来也差不多。
如果涉及方向,则 UnrealEngine 论坛上的这个答案会对您有所帮助:
编辑:
经过长时间的折腾和文档查阅,这是让事情正常运行的代码。
ADynamicMeshSpawner::ADynamicMeshSpawner()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// Using a SphereComponent is not particularly necessary or relevant, but the cube refused to spawn without a root component to attach to, or so I surmise. Yay Unreal. =/
USphereComponent* CubeComponent = CreateDefaultSubobject<USphereComponent>(TEXT("RootComponent"));
RootComponent = CubeComponent;
CubeComponent->InitSphereRadius(40.0f);
CubeComponent->SetCollisionProfileName(TEXT("Pawn"));
// Create and position a mesh component so we can see where our cube is
UStaticMeshComponent* CubeVisual = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("VisualRepresentation"));
CubeVisual->AttachTo(RootComponent);
static ConstructorHelpers::FObjectFinder<UStaticMesh> SphereVisualAsset(TEXT("StaticMesh'/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube'"));
if (SphereVisualAsset.Succeeded())
{
CubeVisual->SetStaticMesh(SphereVisualAsset.Object);
CubeVisual->SetRelativeLocation(FVector(-200.0f, 0.0f, 100.0f));
CubeVisual->SetWorldScale3D(FVector(2.0f));
}
// Create a material to be applied on the StaticMeshComponent
static ConstructorHelpers::FObjectFinder<UMaterial> Material(TEXT("Material'/Game/StarterContent/Materials/M_Tech_Hex_Tile_Pulse.M_Tech_Hex_Tile_Pulse'"));
if (Material.Object != NULL)
{
TheMaterial = (UMaterial*)Material.Object;
}
CubeVisual->SetMaterial(0, TheMaterial);
}
头文件看起来像这样:
UCLASS()
class MYPROJECT_API ADynamicMeshSpawner : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ADynamicMeshSpawner();
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
// Pointer to the material that needs to be used
UMaterial* TheMaterial;
};
你需要生成的物品所需的条件显然取决于应用程序。
这种方法适用于普通材质,但不适用于材质实例。我相信你需要更改TheMaterial的类型,ConstructorHelper调用以及从材质引用到TheMaterial的转换才能使其正常工作。
我相信这也适用于动画材质,这意味着2D动画需要转换为某种材质。
也许下面的链接会有帮助。
https://forums.unrealengine.com/showthread.php?6744-Flipbook-material-to-recreate-an-animated-gif
编辑2:
以下是一组非常好的示例,展示了如何在虚幻引擎中程序化地创建对象。为了保存记录和方便寻找,将其留在这里。