Подтвердить что ты не робот

Как вы динамически выполняете квадроциклы в UE4?

Есть несколько ручных волновых ответов для этого на answer.unrealengine.com, но они, похоже, не имеют никаких подробностей или примеров.

В частности, и в деталях, если вы хотите реализовать набор динамических текстурированных квадратов, которые отображаются в 3D-игровом мире, как бы вы это сделали?

В случае использования рассмотрите 2dish-скроллер, который использует анимацию Spriter. 2D-анимации загружаются из XML достаточно легко, но как вы затем визуализируете этот 2D-набор текстурированных, повернутых и масштабированных квадроциклов на сцене?

4b9b3361

Ответ 1

Проблема, с которой вы сталкиваетесь, касается нереста сетки или получения правильной ориентации? (то есть ортогональной проекции, обращенной к камере)

Спасти сетку достаточно просто, можно сделать либо с помощью чертежей, либо с помощью кода.

В "Чертежах" вы должны установить определенные предварительные условия, а затем выбрать, чтобы создавать игроков на основе условий. Фактическое решение для кодирования будет выглядеть примерно одинаково.

Если это касается ориентации, то этот ответ поможет вам, найденному на форумах UnrealEngine:

https://answers.unrealengine.com/info/62126/how-do-i-render-a-dynamic-mesh-with-orthographic-p.html

EDIT:

После многократного вытягивания волос и просмотра серфинга, здесь код, который заставлял работать.

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 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;
};

Окончательный вывод в редакторе выглядит так:

Славный куб, порожденный кодом!

Я установил его так, чтобы экземпляр моего класса "DynamicMeshSpawner" появлялся каждый раз, когда я нажимал "P" на клавиатуре. Когда экземпляр этого класса создается, он вызывает конструктор, который порождает куб с применяемым материалом. Я использовал экземпляр экземпляра класса в BluePrints, используя SpawnActor node.

Выполнено в плане уровня

Условия, которые вам требуются для нерестилища, очевидно, будут зависеть от приложения.

Этот метод работает для обычных материалов, но не для экземпляров материалов. Я считаю, что вам нужно будет внести изменения в тип TheMaterial, вызов ConstructorHelper и литье из ссылки на материал в TheMaterial, чтобы заставить его функционировать.

Я уверен, что это будет работать и с анимированными материалами, а это значит, что 2D-анимацию нужно будет преобразовать в какой-то материал.

Возможно, ссылка ниже поможет.

https://forums.unrealengine.com/showthread.php?6744-Flipbook-material-to-recreate-an-animated-gif

ИЗМЕНИТЬ 2:

Ниже приведено очень хорошее множество примеров того, как процедурно создавать объекты в Unreal. Оставляя его здесь для потомков и в случае, если кто-нибудь придет посмотреть.

https://github.com/SiggiG/ProceduralMeshes/