Hola comunidad, tengo una duda, quisiera saber si se puede crear un sistema de leveo como la gran parte de juegos que existen ahora al estilo RPG, que se base en ganar experiencia derrotando objetivos AI o completando misiones, y que al subir de nivel aumenten las estadisticas del personaje. Mi objetivo es crear un RPG.
depende de como lo vas a crear que tipo de juego sera si sera en 2d o en 3d. te recomiendo que lo hagas en 3d porque es mas rapido tambien has pensando en la plataforma que usaras si lo haras para moviles o lo haras para pc o consolas aunque claro el unreal engine soporta cada plataforma te recomiendo que veas una primero tambien si tu juego usara funciones de red como registro en linea por lo que tendras que escojer una buena base de datos esta puede ser sql server o postgresql o oracle en el caso de que sea un mmorpg. lo mejor que te recomiendo es que sea un juego sencillo en 2d unreal engine hoy en dia es mucho mas facil que hagas este tipo de juegos en otros engines como unity tienes que programar algunas cosas a mano
Muchas gracias por responder, la idea es que sea en 3D al estilo action rpg en pc offline. Elegi mas unreal por los graficos y parece ser mucho mas prolijo que unity, ademas se programar un poco en C++ pero no mucho, pero es posible crear un sistema de estadisticas y de lvl?. De nuevo gracias.
No tengo mucho tiempo para responder pero puedo darte unas ideas.
Con esto simplemente vas a ir acumulando la exp total de tu personaje.
A su vez necesitas definir cada cuanta experiencia tu personaje sube de nivel. Es decir necesitas mantener esa informacion en algun lugar, hay varias formas de hacer eso. Podes crear una clase del tipo “AActor” llamada "BaseDeDatosNiveles"que pueda ser extendida en blueprint (creas una subclase de BaseDeDatosNiveles). En la clase c++ podes tener una variable del tipo:
////////////////////////////////////
USTRUCT()
struct FLevelData
{
GENERATED_USTRUCT_BODY()
UPROPERTY(EditDefaultsOnly, Category = Niveles)
int32 Lvl; //nivel
UPROPERTY(EditDefaultsOnly, Category = Niveles)
float CantidadDeExpRequerida;
};
UCLASS()
class MY_API ABaseDeDatosNiveles: public AActor
{
GENERATED_UCLASS_BODY()
UPROPERTY(EditDefaultsOnly, Category = Niveles)
TArray<FLevelData> Lvl;
};
//////////////////////////////////////
Cuando crees la subclase en blueprint por ejemplo “BPNivelesDataBase”, vas a poder agregar nueva informacion a al array “Lvl” (directo en BP), Por ejemplo, lvl 1 100 lvl 2 300 , etc.
A su vez, necesitas acumular la xp de tu personaje.
En tu character podes crear una varibale del tipo int32 o float que acumule la “experiencia”.
Por cada enemigo matado/ accion realizada que de experiencia, podes disparar una función en character del tipo:
UPROPERTY(EditDefaultsOnly, Category = atributos)
float ExperienciaAcumulada;
void tupersonaje::SubirExperiencia(float xpGanada){
ExperienciaAcumulada = ExperienciaAcumulada + xpGanada;
//Chequeamos que el personaje haya subido de nivel
ChequearSubirNivel();
}
void tupersonaje::ChequearSubirNivel(){
//Aca tenes que calcular si la experiencia acumulada le sirve para llegar a tal nivel
//esa info podes sacarla de BPNivelesDataBase
//SI detectas que tu personaje sube de nivel podes ejecutar otras funciones que le informen al jugador de su hito etcetc
}
Por ultimo tenes que instanciar ese “BPNivelesDataBase”, podes hacerlo en tu GameMode de la siguiente manera en tu constructor de tu GameMode.cpp:
static ConstructorHelpers::FObjectFinder<UBlueprint> NivelesBlueprint(TEXT("Blueprint'/Game/Blueprints/ETC ETC a tu path donde se encuentra el BP"));
if (NivelesBlueprint.Succeeded())
{
GameNivelesDataBase = (UClass*)NivelesBlueprint.Object->GeneratedClass;
NivelesDB= GameNivelesDataBase ->GetDefaultObject<ABaseDeDatosNiveles>();
}
Recorda crear las variabels correspondientes en tu .h
Ojala te sirva, disculpa la desprolijada, como te decia no tengo mucho tiempo para responder, mas tarde chequeo, cualquier cosa pregunta
PD: si no te gusta la solucion de la base de datos creo que podrias usar una “data table” ( se encuentra en Misellaneous dentro del menu de “add new” en ue4)
PD2: esto no lo chequie, solo escribi una posible solucion, puede llegar a estar algo mal.
Wow, Alex muchas gracias por responder. La verdad lo tomo esta bastante bueno lo que me diste y me va a servir bastante, la voy a empezar a crear y tratar de aplicar, obvio que voy a tardar hasta hacerlo bien bien pero ojala pueda. Donde la desprolijada? bastante bien me lo diste. Ahora busco lo de data table. Gracias de nuevo y saludos desde Argentina!