unreal-engine4 - studio - unreal game
¿Cómo haces dinámicamente los quads en UE4? (1)
Hay algunas respuestas rápidas para esto en answers.unrealengine.com, pero parecen carecer de detalles o ejemplos.
Específicamente, y en detalle, si quisiera implementar un conjunto de cuádruples con textura dinámica que se representaron en el mundo de los juegos en 3D, ¿cómo lo haría?
Para el caso de uso, considere un desplazador lateral 2dish que utiliza animaciones Spriter . Las animaciones 2D se cargan de XML con bastante facilidad, pero, ¿cómo se procesa este conjunto 2D de cuadrículas texturadas, rotadas y escaladas dinámicamente en la escena?
¿Es el problema al que se enfrenta la preocupación por generar la malla o por obtener la orientación correcta? (Es decir, proyección ortográfica, frente a la cámara).
La creación de la malla es bastante fácil, se puede hacer ya sea a través de Blueprints o en código.
En Blueprints, establecería ciertas condiciones previas y luego elegiría generar actores según las condiciones. La solución de codificación real se vería muy parecida.
Si se trata de orientación, esta respuesta será de ayuda para usted, que se encuentra en los foros de UnrealEngine:
EDITAR:
Después de mucho esfuerzo para arrancar el cabello y la documentación, aquí está el código que hizo que las cosas funcionaran.
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);
}
El archivo de cabecera se ve así:
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;
};
La salida final se veía así en el editor:
Lo configuro para que se genere una instancia de mi clase ''DynamicMeshSpawner'' cada vez que golpee ''P'' en el teclado. Cuando se crea la instancia de esta clase, llama al constructor, que genera el cubo con el material aplicado. Hice la instancia de clase generando cosas en BluePrints usando el nodo SpawnActor.
Las condiciones que necesita para el desove dependerán obviamente de la aplicación.
Este método funciona para materiales normales pero NO para instancias materiales. Creo que tendrías que hacer cambios en el tipo de TheMaterial, la llamada de ConstructorHelper, y la conversión de la referencia del material en TheMaterial para que funcione.
Estoy seguro de que esto también funcionaría con materiales animados, lo que significa que las animaciones en 2D tendrían que convertirse en un material de algún tipo.
Quizás el siguiente enlace ayude.
https://forums.unrealengine.com/showthread.php?6744-Flipbook-material-to-recreate-an-animated-gif
EDIT 2:
A continuación, encontrará un buen conjunto de ejemplos sobre cómo crear objetos de forma procesal en Unreal. Dejándolo aquí para la posteridad y en caso de que alguien venga a buscarlo.