x


Unity crashes when building after "baking" custom nav mesh.

I have a game where units need to run around small spherical planetoids and I created an a star algorithm that uses waypoints placed all around the planet. The game runs fine when testing in the editor but crashes when I try to build it. The annoying thing is it will build every once in a while after I mess with different things but then only works for a couple builds before it starts crashing again. I wrote a custom class for the waypoints that is Serializable and each waypoint has an adjacency list of neighboring waypoints (I set this to SerializeField and it worked for a while). If anyone can explain why this is happening it would be greatly appreciated. More info can be provided on request.

Waypoint.cs: The script attached to each waypoint.


 /// <summary>
 /// A node of the nav mesh.
 /// </summary>
 [Serializable]
 public class Waypoint : MonoBehaviour
 {
     /// <summary>All the waypoint's neighbors.</summary>
     [SerializeField]
     public Waypoint[] wpList;
     /// <summary>Distance to all the waypoint's neighbors.</summary>
     public float[] distList;  
 
 
     /// <summary>
     /// Find the connections to the closets waypoints.
     /// </summary>
     public void Bake(float castRadius, float checkRadius)
     {
         // temp list of adjecent waypoints
         List<Waypoint> conWP = new List<Waypoint>();
         List<float> conDist = new List<float>();
 
         // run through all the waypoints
         GameObject[] brothers = GameObject.FindGameObjectsWithTag("Waypoint");
         foreach (GameObject next in brothers)
         {
             // stop if self
             if (next == gameObject)
             {
                 continue;
             }
 
             // raycast to next
             RaycastHit[] rayInfo = Physics.SphereCastAll(transform.position, castRadius, next.transform.position-transform.position, checkRadius);
 
             // sort by shortest distance
             var orderedInfo =
                     from w in rayInfo
                     orderby w.distance
                     select w;
             
             // run through all the objects the raycast hit
             foreach (RaycastHit info in orderedInfo)
             {
                 // if hit itself continue
                 if (info.collider.gameObject == gameObject)
                 {
                     continue;
                 }
 
                 // connected to the target object
                 if (info.collider.gameObject == next)
                 {
                     conWP.Add(info.collider.GetComponent<Waypoint>());
                     conDist.Add(info.distance);
                     break;
                 }
                 else
                 {
                     break;
                 }
             }
         }
 
         // set list
         wpList = conWP.ToArray();
         distList = conDist.ToArray();
     } // End Bake
 
 } //  End Waypoint Class
more ▼

asked Mar 09, 2013 at 06:07 PM

yeagz7 gravatar image

yeagz7
93 10 1776 34

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Solved this by instead of each waypoint keeping a gameobject reference to its neighbors it instead says their ID and looks it up in a table when it needs to get the reference.

more ▼

answered Aug 21, 2013 at 08:25 PM

yeagz7 gravatar image

yeagz7
93 10 1776 34

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

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

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x979
x420
x342
x67
x65

asked: Mar 09, 2013 at 06:07 PM

Seen: 996 times

Last Updated: Aug 21, 2013 at 08:25 PM