I'm having an intermittent issue serializing a ScriptableObject. It seems to be having issues serializing an Enum in certain cases.
Here's the error I'm getting:
Code: Select all
InvalidCastException: Specified cast is not valid.
ES3Types.ES3Type_enum.Write (System.Object obj, ES3Writer writer) (at Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs:23)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:198)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:286)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:276)
ES3Types.ES3UserType_CardData.WriteScriptableObject (System.Object obj, ES3Writer writer) (at Assets/Easy Save 3/Types/ES3UserType_CardData.cs:25)
ES3Types.ES3ScriptableObjectType.WriteUnityObject (System.Object obj, ES3Writer writer) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ScriptableObjectType.cs:26)
ES3Types.ES3UnityObjectType.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs:45)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:219)
ES3.Serialize[T] (T value, ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:779)
ES3File.Save[T] (System.String key, T value) (at Assets/Plugins/Easy Save 3/Scripts/ES3File.cs:154)
ES3.Save[T] (System.String key, T value, ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:100)
GameState.SaveGridObject (System.Int32 objectIndex) (at Assets/Scripts/Serialization/GameState.cs:86)
GameState.Save () (at Assets/Scripts/Serialization/GameState.cs:38)
GameStateManager+<CaptureGameStateNextUpdate>d__3.MoveNext () (at Assets/Scripts/Serialization/GameStateManager.cs:25)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <9baebf9af86541678fd15bfdbf5f26eb>:0)
Code: Select all
writer.WriteProperty("Targeting", instance.Targeting, ES3Type_enum.Instance);
Code: Select all
using System.Collections.Generic;
using UnityEngine;
using Sirenix.OdinInspector;
using UnityEngine.AddressableAssets;
/// <summary>
/// Class should be attatched to a card. Class defines unique properties for a card.
/// Class's inspector provides tools to create nested scriptable objects that define behavior for card
/// Class provides method for creating a Card object from CardData
/// </summary>
[InlineEditor] [CreateAssetMenu(menuName = "ScriptableObjects/CardData")]
public class CardData : NestedScriptableObject
{
[HideIf("@UICardPrefab != null")]
public GameObject UICardPrefab;
public string CardName;
public int Cost;
public AssetReference CardImage;
[MultiLineProperty]
public string RulesText;
public CardColor CardColor;
[EnumToggleButtons]
public enum TargetingType { targeted, self, all }
public TargetingType Targeting;
[NestedScriptableObjectField, BoxGroup("Targeting", VisibleIf = "@Targeting == TargetingType.targeted")]
public GridShape Range;
[NestedScriptableObjectField, BoxGroup("Targeting")]
public GridShape AreaOfEffect;
[BoxGroup("Targeting")]
public GridTarget AITarget;
[NestedScriptableObjectList]
public List<CardEffect> CardEffects = new List<CardEffect>();
......
Any suggestions of how I might sort out this issue would be greatly appreciated!
Edit: I've found another context that the error seems to be occoring in - serializing an image? The hideFlags enum is causing the error in this case, but it is likewise solved by adding an entirely unrelated CardEffect
Code: Select all
nvalidCastException: Specified cast is not valid.
ES3Types.ES3Type_enum.Write (System.Object obj, ES3Writer writer) (at Assets/Plugins/Easy Save 3/Scripts/Types/Primitive Types/ES3Type_enum.cs:23)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:198)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:286)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:276)
ES3Types.ES3Type_Image.WriteComponent (System.Object obj, ES3Writer writer) (at Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_Image.cs:45)
ES3Types.ES3ComponentType.WriteUnityObject (System.Object obj, ES3Writer writer) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs:31)
ES3Types.ES3UnityObjectType.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs:45)
ES3Types.ES3UnityObjectType.WriteUsingDerivedType (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs:115)
ES3Types.ES3UnityObjectType.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs:28)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:219)
ES3Types.ES3ListType.Write (System.Object obj, ES3Writer writer, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs:29)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:202)
ES3Writer.Write (System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:161)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:262)
ES3Types.ES3Type_GameObject.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:66)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:219)
ES3Types.ES3ListType.Write (System.Object obj, ES3Writer writer, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs:29)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:202)
ES3Writer.Write (System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:161)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:262)
ES3Types.ES3Type_GameObject.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:49)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:219)
ES3Types.ES3ListType.Write (System.Object obj, ES3Writer writer, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs:29)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:202)
ES3Writer.Write (System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:161)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:262)
ES3Types.ES3Type_GameObject.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:49)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:219)
ES3Types.ES3ListType.Write (System.Object obj, ES3Writer writer, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs:29)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:202)
ES3Writer.Write (System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:161)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:262)
ES3Types.ES3Type_GameObject.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:49)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:219)
ES3.Serialize[T] (T value, ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:779)
ES3File.Save[T] (System.String key, T value) (at Assets/Plugins/Easy Save 3/Scripts/ES3File.cs:154)
ES3.Save[T] (System.String key, T value, ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:100)
GameState.SaveGridObject (System.Int32 objectIndex) (at Assets/Scripts/Serialization/GameState.cs:73)
GameState.Save () (at Assets/Scripts/Serialization/GameState.cs:38)
GameStateManager+<CaptureGameStateNextUpdate>d__3.MoveNext () (at Assets/Scripts/Serialization/GameStateManager.cs:25)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <9baebf9af86541678fd15bfdbf5f26eb>:0)