2026-05-06 15:07:56 +02:00

68 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UMA.CharacterSystem;
using UMA;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.Serialization.Formatters.Binary;
public class SaveAndLoadSample : MonoBehaviour
{
public DynamicCharacterAvatar Avatar;
public UMARandomAvatar Randomizer;
public Button LoadButton;
public bool useAvatarDefinition;
public bool useCompressedString;
public string saveString;
public string avatarString;
public string compressedString;
public int saveStringSize;
public int avatarStringSize;
public int compressedStringSize;
public int asciiStringSize;
public int binarySize;
public void GenerateANewUMA()
{
Randomizer.Randomize(Avatar);
Avatar.BuildCharacter(false);
}
public void SaveUMA()
{
avatarString = Avatar.GetAvatarDefinitionString(true);
saveString = Avatar.GetCurrentRecipe();
compressedString = Avatar.GetAvatarDefinition(true).ToCompressedString("|");
asciiStringSize = Avatar.GetAvatarDefinition(true).ToASCIIString().Length;
binarySize = BinaryDefinition.ToBinary(new BinaryFormatter(), Avatar.GetAvatarDefinition(true)).Length;
saveStringSize = saveString.Length * 2;
avatarStringSize = avatarString.Length * 2;
compressedStringSize = compressedString.Length * 2; // utf-16
LoadButton.interactable = true;
}
public void LoadUMA()
{
if (string.IsNullOrEmpty(saveString))
return;
if (useCompressedString)
{
AvatarDefinition adf = AvatarDefinition.FromCompressedString(compressedString, '|');
Avatar.LoadAvatarDefinition(adf);
Avatar.BuildCharacter(false); // don't restore old DNA...
}
else if (useAvatarDefinition)
{
Avatar.LoadAvatarDefinition(avatarString);
Avatar.BuildCharacter(false); // We must not restore the old DNA
}
else
{
Avatar.LoadFromRecipeString(saveString);
}
}
}