Crea una lista permanente con SaveGame
¿Por qué almacenar datos y FGuid en lugar de Actor?
Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.
Poner el actor de combate en SaveGame no significa que el mismo personaje regresará en la próxima ejecución. Dado que el Actor es actualmente un objeto en el mundo, debe convertirse en datos puros que puedan almacenarse.
En ProjectTB, personajes de la listaFTBRosterUnitDataGuárdalo como
USTRUCT(BlueprintType)
struct FTBRosterUnitData
{
GENERATED_BODY()
UPROPERTY()
FGuid UnitInstanceId;
UPROPERTY()
ETBUnitClass UnitClass;
UPROPERTY()
int32 Level = 1;
UPROPERTY()
int32 Experience = 0;
UPROPERTY()
TArray<FName> AcquiredTraitIds;
};
Distinguir entre clases e instancias.
Incluso si la clase de espadachín es la misma, el nivel, el equipo y las características de cada personaje son diferentes. FGuidUsando , puedes encontrar un personaje específico nuevamente incluso si el orden de disposición cambia.
UnitClass: ¿Qué tipo de unidad es?
UnitInstanceId: ¿Quién es este personaje?
Cuando comienza una batalla, se genera un actor usando datos guardados, y cuando la batalla termina, el estado del actor superviviente se refleja en los datos de la lista.
La muerte permanente se salva al instante
En ProjectTB, cuando un aliado muere, se elimina de la lista y de la lista de selección y se guarda inmediatamente. Esto se debe a que si guardas solo al final de la batalla, la muerte se puede revertir al abandonar la partida a la fuerza.
Por el contrario, si hay demasiados puntos de guardado, el acceso al disco se vuelve frecuente. Determinar puntos importantes de cambio de estado yCaptureSaveGame()La creación de datos guardados en la ruta reduce las omisiones.
La clave del diseño de SaveGame no es guardar el objeto tal como está. Los datos mínimos necesarios para configurar el juego nuevamente se almacenan con una identificación estable.