• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by dls7470 · Jul 31, 2018 at 09:36 PM · save dataassetdatabase

Saving a ScriptableObject with complex fields

have a class that inherits from ScriptableObject with a few fields that can't be serialized and one that can be. In another script I create an instance of the ScriptableObject, set all of its fields and then save it using UnityEditor.AssetDatabase.CreateAsset(string path). I have a final script with a serialized field of the ScriptableObject.

When adding the newly saved ScriptableObject to the third script and attempting to read data from it, the List and the Dictionary are both set to null, while the Sprite retains the value it was set to.

Is there any way to save the List and Dictionary to the .asset file?

My code is as follows:
The ScriptableObject:

 public class MyScriptableObject : ScriptableObject
 {
     public Dictionary<string, Sprite> sprites;
  
     public Sprite sprite;
 }

Where I save the ScriptableObject through code:

 MyScriptableObject myObject = (MyscriptableObject)ScriptableObject.CreateInstance("MyScriptableObject");
  
 Dictionary<string, Sprite> sprites = new Dictionary<string, Sprite>();
  
 //loadedSprites is a [SerializeField] List<Sprite> present in this class
 for(int i = 0; i < loadedSprites.Cout; i++)
 {
     sprites[i + ""] = loadedSprites[i];
 }
 myScriptableObject.sprites = sprites;
  
 myScriptableObject.sprite = loadedSprites[0];

Where I attempt to read the saved ScriptableObject elsewhere:

 //loadedMyScriptableObject is a [SerializeField] MyScriptableObject present in this class
 //and I drag the saved asset onto this script
  
 //when this code is run, loadedMyScriptableObject.sprites is null,
 //but loadedMyScriptableObject.sprite is what it was set to in the previous code
 List<Sprites> sprites = loadedMyScriptableObject.sprites;
 Sprite sprite = loadedMyScriptableObject.sprite;

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

86 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Prevent changes in ScriptableObject type Asset in Editor. Dont save it. 0 Answers

Can you save variables one second ago and then use it to make an "if" statement? 3 Answers

Saving input from user in series of scenes,Saving input from user for a series of scenes 1 Answer

Using save options to create saves for toggle buttons, but won't compile! 1 Answer

Tell me how to open these files on android 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges