Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • 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
0
Question by Providence4991 · Dec 26, 2015 at 11:14 AM · c#scriptableobjectgenericsclass instance

Null Reference Error With Scriptable Objects

Custom Scriptable Object

  public class GameDataScriptableObject<T>: ScriptableObject,ICSVReader where T : class
     {
     
     public T[] mData;
     public T GetFromId(uint ID)
     {
     for (int i = 0; i < mData.Length; ++i)
     {
     var data = mData as IReturnID;
     if (data.GetID() == ID)
     return mData;
     }
     
     return default(T);
     }
     public GameDataScriptableObject()
     {
     
     }
     public GameDataScriptableObject(T obj)
     {
     
     }
     public void ParseCSV(string data)
     {
     var engine = new FileHelperEngine<T>();
     mData = engine.ReadString(data);
     }
     
     }

 Interface
 public interface ICSVReader
     {
     void ParseCSV(string data);
     }


Helper Function

  public static UnityEngine.Object CreateAsset<T>(string assetFileName) where T : ScriptableObject
     {
         
         var scriptableObject = ScriptableObject.CreateInstance<T>();
         TextAsset csvAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>(TextAssetDataLocation + assetFileName + InputAssetFileExtension);
 if (scriptableObject == null)
             Debug.Log("NULL");
         var parser = scriptableObject as ICSVReader;
         parser.ParseCSV(csvAsset.text);      
         UnityEditor.AssetDatabase.CreateAsset(scriptableObject, AssetDataBaseLocation + assetFileName + AssetFileExtension);
         UnityEditor.AssetDatabase.SaveAssets();
         return scriptableObject;
     }
  


i have written a helper function to create an ScriptableObject from a csv file My problem is.... whenever i call

 CreateAsset<GameDataScriptableObject<EachSkill>>("EnemyData"); // EnemyData is the name of the text file and eachskill is a data structure

i get an error !!!! here "parser.ParseCSV(csvAsset.text);" - > Debug Prints "NULL" which means ScriptableObject.CreateInstance failed... how ever if i have a class like this

 public class EnemyData : GameDataScriptableObject<EachSkill>
 {
 }

and if i call the same function again like this

 CreateAsset<EnemyData >("EnemyData");

It Works Perfectly!!!!!!

What am i doing wrong here? and why is the code behaving like this.? Any sort of help would be really helpful!

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

1 Reply

· Add your reply
  • Sort: 
avatar image
2

Answer by Bunny83 · Dec 26, 2015 at 11:25 AM

ScriptableObjects have the same restriction as MonoBehaviour classes. They must be non generic and each class need to be placed in a file where the file name matches the classname. Otherwise the serialization system in the editor doesn't work.

So you have to create concrete non-generic subclasses for each of your cases.

Comment
Add comment · Show 3 · Share
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
avatar image Providence4991 · Dec 26, 2015 at 03:47 PM 0
Share

@Bunny83 hey thanks for getting back! is there any other way for me to do it? when i read back from the asset file i dont need to save it to something like "EnemyData" but rather i can read it directly into "GameDataScriptableObject>".. why is that!??

avatar image allenallenallen Providence4991 · Dec 26, 2015 at 03:48 PM 0
Share

Use comments and not answers when you don't have an answer!!! Converted to comment.

avatar image Providence4991 allenallenallen · Dec 26, 2015 at 03:51 PM 0
Share

thanks for pointing out... this js my first rodeo. will be careful.

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.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Distribute terrain in zones 3 Answers

Polymorphism with generic ScriptableObjects? 1 Answer

How to serialize a concrete derived class from generic ScriptableObject base 1 Answer

Multiple Cars not working 1 Answer

An OS design issue: File types associated with their appropriate programs 1 Answer


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