Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 Swiftpaw · Aug 19, 2012 at 05:41 PM · serializationserializecustom class

Serialization of custom class

I'm working on rolling my own pathfinding solution using a grid of nodes. Currently it works but I want to change it so that I don't have to recalculate walkabaility of nodes for static obstacles each time at startup.

I know unity cannot serialize multidimensional arrays so my solution was to move the node array to its own class with an indexer to access the one-dimensional array as if it were 2D. I've done that and it still works when I run the method to initialise the grid. However, entering play mode (or calling it during play mode and exiting to edit mode) clears all the data.

Clearly i'm doing something wrong, I used a similar approach once before on a simple tile based map successfully, so any insight would be appreciated. Here is the relevant code stripped out:

 // Grid class that should serialize
 [System.Serializable]
 public class Grid
 
 {
 
     public Node[] nodes;
 
     public int numNodes;
 
 
 
     public Grid (int gWidth)
 
     {
 
         nodes = new Node[gWidth*gWidth];
 
         numNodes = gWidth;
 
         
 
     }
 
 
 
     public Node this[int x, int y] {
 
         get { return nodes[y*numNodes+x]; }
 
         set { nodes[y*numNodes+x] = value; }
 
     }
 
 }
 
 
 
 // main class that uses the grid, stripped down to relevant parts
 
 public class MainClass
 
 {
 
     [HideInInspector]
 
     public int width, height;
 
     [HideInInspector]
 
     public float rawWidth, rawHeight;
 
     [HideInInspector]
 
     public float nodeSize; // size one node, or square, covers.
 
     
 
     public int subDivs; // number of nodes in one column or row of the grid
 
     public Vector3 topLeft, bottomRight; // top left and bottom right corners of the grid in world coords
 
     public Grid grid;
 
 
 
     public void InitGrid ()
 
     {
 
         //calculate width and height
 
         rawWidth = Mathf.Abs (topLeft.x - bottomRight.x);
 
         rawHeight = Mathf.Abs (topLeft.z - bottomRight.z);
 
         nodeSize = rawWidth / subDivs;
 
         grid = new Grid (subDivs);
 
         width = subDivs;
 
         height = subDivs;
 
         for (int i = 0; i < width; i++) 
 
         {
 
             for (int k = 0; k < height; k++)
 
             {
 
                 grid[i,k] = new Node();
 
                 grid[i,k].position = new Vector3 (i * nodeSize + (nodeSize / 2), 0, k * nodeSize + (nodeSize / 2));
 
                 grid[i,k].isWalkable = true;
 
             }
 
         }
 
     }    
 
 }

Sorry for the lengthy formatting, not sure why it's inserting so much white space, it doesn't exist in my code file.

Comment
Add comment · Show 2
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 Demigiant · Aug 19, 2012 at 05:51 PM 1
Share

Should be serialized correctly, afaik. Did you set the Node class as System.Serializable also?

avatar image Swiftpaw · Aug 19, 2012 at 05:58 PM 0
Share

EDIT: Yeah that was the problem, I hadn't set up the node to serialize properly. Thanks for pointing my silliness out!

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by Swiftpaw · Aug 19, 2012 at 06:17 PM

Answering my own question here to sum it all up. I hadn't properly marked my Node class with [System.Serializable], oops! Thanks for pointing it out Izitmee.

Comment
Add comment · Show 2 · 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 Demigiant · Aug 19, 2012 at 06:58 PM 0
Share

Ehe serialization is so messy sometimes. Glad you got it ;)

avatar image zombience · Oct 16, 2012 at 03:08 PM 0
Share

hah, came here because I was making the same mistake. Sometimes the simplest problems are the most frustrating!

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

10 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

Related Questions

Serialize the text 2 Answers

Serialized data show information after load 0 Answers

List of ScriptableObjects lost on project reload 1 Answer

How to serialized a variable in a c# method? 1 Answer

Is there a serialization class similar to JsonUtility but for Byte Serialization. 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