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 /
  • Help Room /
avatar image
0
Question by danipren · Mar 20, 2016 at 03:15 PM · gameobjectlistadd

null referance when adding to a list please help

i have a small piece of code that just wont work whatever way ive tried it, its probably really simple but pulling my hair out now lol so any help appreciated

the issue is when looping through i want to add the objects to a new list but everytime i do i get a null referance exception

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 public class TileGenerator : MonoBehaviour {
 
     public TerrainTiles[] terrainTiles;
     public List<Zone> weightedTiles;
     float totalWeight;
 
     [System.Serializable]
     public struct TerrainTiles{
         public string name;
         public TerrainTile[] tiles;
     }
 
     [System.Serializable]
     public struct TerrainTile{
         public GameObject tile;
         public int weight;
     }
 
     [System.Serializable]
     public struct Zone{
          public List<GameObject> tiles;
     }
     public void SetTileWeights()
     {
         List<Zone> weights = new List<Zone> ();
         for (int i = 0; i < terrainTiles.Length; i++) 
             {
                 weights.Add (new Zone ());
                 for (int j = 0; j < terrainTiles [i].tiles.Length; j++) 
                     {
                         List<GameObject> go = new List<GameObject> ();
                         for (int k = 0; k < terrainTiles [i].tiles [j].weight; k++) 
                             {
                                 GameObject tmpTile = terrainTiles [i].tiles [j].tile;
                                 go.Add (tmpTile);
                                 Debug.Log (weights.Count + "     " + i);
                             }
                         weights [i].tiles.AddRange (go);
                     }
             }
     }
 
 
     public GameObject GetTile(int zone){
         return weightedTiles [zone].tiles [Random.Range (0, weightedTiles [zone].tiles.Count)];
     }
 }
 

the line weights[i].tiles.addRange(go) is the one throwing the error and i cant figure out for the life of me why?

again any help appreciated

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
0

Answer by elenzil · Mar 20, 2016 at 03:46 PM

it's because Zone is a struct, and as such its members are not automatically initialized. so tiles is null in there.

change this:

 weights.Add (new Zone ());

to something like this:

 Zone z = new Zone();
 z.tiles = new List< GameObject >();
 weights.Add(z);

also, in the general advice department, there are a couple ways to figure out these types of issues when they come up. one is to use the debugger in MonoDevelop, stick a breakpoint on the line w/ the problem, and then inspect all the variables involved.

another is to just add print statements. eg, if your problem line is weights[i].tiles.addRange(go), then print out weights. is it null ? if not then print out weights[i]. is it null ? if not, then print out weights[i].tiles, and so on.

Comment
Add comment · 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

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

47 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

Related Questions

List().Add freezes Unity 0 Answers

assign objects to strings from SQLite table 0 Answers

Getting objects out of a list and then comparing them 0 Answers

Adding to list, how to fix NullReferenceException 1 Answer

How to delete an object if there is another object of the same type at that position ? 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