No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

. Ahora tendrás acceso a lo mismo con lo que trabaja el equipo de Epic Games.
vamos a partir de los recursos en FBX de uno de los proyectos de ejemplo que viene con el UE4. Esto es exactamente lo que nos daría nuestro equipo de diseño. Puedes bajar los recursos aquí: No tienes permiso para ver los enlaces. Para poder verlos
Registrate o Conectate.




, ahora vamos a importarlo en el proyecto. En el Panel de la esquina inferior izquierda del Editor tendemos el Content Browser. En este panel es donde tendremos organizados todos los recursos de nuestro juego. Da clic en el Botón New y selecciona New Folder y dale un nombre a la carpeta, por ejemplo "Character". Hecho esto tendremos una nueva carpeta en el Content Browser, entra en ella, selecciona Import y busca el FBX del personaje: Hero.FBX (los FBX de las animaciones los vamos a importar más tarde). Recuerda que en este FBX lo que tenemos es el modelo 3D del personaje con su esqueleto. Al dar en OK nos sale la ventana FBX Import de UE4 y ya automáticamente seleccionado Skeletal Mesh.


//AUE4DemoGameMode.h
#pragma once
#include "GameFramework/GameMode.h"
#include "UE4DemoGameMode.generated.h"
UCLASS()
class AUE4DemoGameMode : public AGameMode
{
GENERATED_UCLASS_BODY()
};
//AUE4DemoGameMode.cpp
#include "UE4Demo.h"
#include "UE4DemoGameMode.h"
#include "UE4DemoPlayerController.h"
AUE4DemoGameMode::AUE4DemoGameMode(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
PlayerControllerClass = AUE4DemoPlayerController::StaticClass();
}



... como notarás no hay ningún cambio, seguimos teniendo control gracias al PlayerController por defecto pero no tenemos nuestro personaje ni nada. Bien, el problema es que nos faltaron algunas cosillas.
AUE4DemoGameMode::AUE4DemoGameMode(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
PlayerControllerClass = AUE4DemoPlayerController::StaticClass();
//Obtiene en PlayerPawnBPClass.Object la referencia al HeroCharacterBlueprint creado y configurado desde el Editor
static ConstructorHelpers::FObjectFinder<UClass> PlayerPawnBPClass(TEXT("Class'/Game/Character/HeroCharacterBlueprint.HeroCharacterBlueprint_C'"));
//Inicializa el atributo DefaultPawnClass con el HeroCharacterBlueprint creado y configurado desde el editor
if (PlayerPawnBPClass.Object != NULL)
{
DefaultPawnClass = PlayerPawnBPClass.Object;
}
}
. Bien, vamos a solucionar este asunto configurando temporalmente una cámara estática en nuestro juego.
/** Metodo heredado de la clase AActor se llama automaticamente por el motor cuando comienza el juego. */
void AUE4DemoPlayerController::BeginPlay()
{
//Llamamos el Begin Play de la clase padre
Super::BeginPlay();
//Recorremos todos los Actores en el Level mediante el TActorIterator
//TActorIterator es un iterator parametrizado que nos permite recorrer todos los actores en el level
for (TActorIterator<ACameraActor> It(GetWorld()); It; ++It)
{
//Obtenemos el actor actualmente en el loop. Como solo tenemos un solo ACameraActor en el Level, el iterator solo iterará una vez
ACameraActor* _mainCamera = *It;
//Configuramos el nuevo punto de vista del juego con la camara.
//SetViewTargetWithBlend puede recibir más parametros, pero tienen valores por defecto, y de momento no necesitamos modificarlos.
this->SetViewTargetWithBlend(_mainCamera);
}
}
) ... aquí podemos agregar variables, eventos del sistema, funciones de clases especificas etc. En fin, todo, o casi todo lo que haces en C++ lo podrás hacer en el Blueprint Editor.
. Ya te digo, es decisión tuya implementar lo que quieras en el Blueprint Editor o en C++ tu mismo le iras encontrando las ventajas y desventajas a cada método según lo que quieras hacer.
nos entregó además del modelo con su esqueleto en FBX las animaciones de caminar y reposo, también en formato FBX listas para importarlas. Pues vamos a ello. Abre el Editor en el Content Browser crea una nueva carpeta, yo le pondré Animations. Aquí tendremos todas las animaciones que importemos. Entra a la carpeta e importa los dos FBX Walk.FBX e Idle.FBX. Al seleccionarlas verás que por defecto en la ventana de FBX Import sale seleccionado Animations. Más abajo tiene la opción que permite ya en el momento de la importación seleccionar el esqueleto al que están asociadas estas animaciones. Da clic ahí y selecciona Hero_Skeleton por último da clic en Import.






UCLASS()
class AHeroCharacter : public ACharacter
{
GENERATED_UCLASS_BODY()
protected:
/**
* Se llama cuando el motor detecta la entrada configurada para 'MoveForward'.
* En este caso cuando el usuario toca la tecla W o S del teclado
*/
void MoveForward(float Value);
/**
* Se llama cuando el motor detecta la entrada configurada para 'MoveRight'.
* En este caso cuando el usuario toca la tecla A o D del teclado
*/
void MoveRight(float Value);
/**
* Metodo de la clase APawn que permite configurar los 'binding' de los controles
* Es llamado automaticamente por el Engine
*/
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) OVERRIDE;
};
#include "UE4Demo.h"
#include "HeroCharacter.h"
AHeroCharacter::AHeroCharacter(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
}
void AHeroCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
//Le dice al motor que cuando detecte las entrada de tipo MoveForward que llame al metodo AHeroCharacter::MoveForward
InputComponent->BindAxis("MoveForward", this, &AHeroCharacter::MoveForward);
//Le dice al motor que cuando detecte las entrada de tipo MoveRight que llame al metodo AHeroCharacter::MoveRight
InputComponent->BindAxis("MoveRight", this, &AHeroCharacter::MoveRight);
}
/**
* Se llama cuando se detecta la entrada de tipo MoveForward (Cuando el usuario toca las teclas W o S).
* Determina la dirección en la que está el personaje y le aplica un movimiento (positivo o negativo) en esa dirección
*
* @param Value Value es igual a 1 cuando se detecta W y -1 cuando se detecta S
*/
void AHeroCharacter::MoveForward(float Value)
{
if ((Controller != NULL) && (Value != 0.0f))
{
//Obtiene la rotacion actual
const FRotator Rotation = Controller->GetControlRotation();
// Crea el vector de direccion a partir de hacia donde está rotado y aplica el movimiento
const FVector Direction = FRotationMatrix(Rotation).GetUnitAxis(EAxis::X);
AddMovementInput(Direction, Value);
}
}
/**
* Se llama cuando se detecta la entrada de tipo MoveForward (Cuando el usuario toca las teclas A o D).
* @param Value Value es igual a 1 cuando se detecta D y -1 cuando se detecta A
*/
void AHeroCharacter::MoveRight(float Value)
{
if ( (Controller != NULL) && (Value != 0.0f) )
{
//Determina la dirección del movimiento hacia los lados. Notar que solo nos intereza la rotacion en el eje Y
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0);
// Crea el vector de la dirección y aplica el movimiento
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
AddMovementInput(Direction, Value);
}
}
AHeroCharacter::AHeroCharacter(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
//Por defecto esta propiedad viene en true para el Character.
//Pero en nuestro modelo de desplazamiento, no queremos que el personaje rote en base a la rotación del Controller.
bUseControllerRotationYaw = false;
//Configuración del componente CharacterMovement
//Al estar en true habilita para que el character se rote en la dirección del movimiento al comenzar el movimiento.
CharacterMovement->bOrientRotationToMovement = true;
//Factor de rotación para la propiedad anterior.
CharacterMovement->RotationRate = FRotator(0.0f, 540.0f, 0.0f);
//Bajamos un poco el valor por defecto de MaxWalkSpeed para que el personaje camine un poco más lento.
CharacterMovement->MaxWalkSpeed = 400.0f;
}




No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.Gracias por aceptarme. Un saludo a todos