Navmesh Add doesn't seem to work across multiple Recast Graphs?

I have been trying to use the Navmesh Add component to bridge a gap between my randomly generated dungeons doors, and I can’t seem to get it to work.

Unity_xTMPaAZptn

https://media2.giphy.com/media/FEjY8nVOFAze8ZfO0e/giphy.gif

As you can see, it can navigate to the end of one graph, but then stops because it can’t traverse to the other one using the Navmesh Add bridge that I made. I want this to be dynamic because some of these doors can be walls instead, it’s random.

I’ve tried using this component to traverse one raycast graph, and it seems to work (though its a bit finicky/glitchy tbh).

But trying to go across two diff recast graphs doesnt seem to work, even with the layermasks appropriately setup. (I noticed cut seems to work and make the right meshes, and add does seem to try to attach meshes together but idk it’s really hard to tell).

EDIT: It does seem to attach both meshes, but navigation still doesnt work
https://media2.giphy.com/media/tOdEkHH9QeaIKMc2DJ/giphy.gif?cid=790b7611c885a0e907060f2f69d297a4c10668426a34690b&rid=giphy.gif&ct=g

I don’t know what to do short of combining all the recast graphs for each room together into a single one once it loads. I’m already doing a lot of stuff like that just to get procedural terrain + recastgraphs to work, but this is getting me stuck. I’m not even sure links work across multiple recast graphs, I was having a lot of trouble with that as well.

my main question is: Is this feature broken? or am I doing something wrong?

Hi

It is not intended to be able to connect two separate navmeshes. You can connect two navmeshes using the NodeLink2 component, but I would recommend trying to use a single graph instead. A single graph is almost always preferable.

How do you go about combining multiple recast graphs into one? Is there functionality for this, if not, can you tell how you would go about doing something like this? I think I know how the matrices would work, but not sure about actually adding nodes properly to a recast graph.

Also I have a performance question, I’m wondering if having one large graph will impact performance because there are more nodes to traverse when pathfinding, rather than having it secluded to a bunch of smaller recast graphs?

It’s possible by saving/loading tiles. I followed this: Navmesh "Chunks" - #4 by joshcamas

The part that’s not covered is removing tiles. There’s a list of tiles that you can get when loading in a chunk – just use that to clear tiles.

However, I ran into a separate issue. There’s an internal tile limit, and our game is multiplayer. A* Pathfinding internally stores tiles/nodes in a 2D grid, so chunks can’t exist in separate grid spaces without generating all tiles in between. So I can’t use this :sob: but maybe you can.

Going to use this later when I implement chunk loading internally.

I see. I am a bit confused here, I see a lot of info about “replacing” tiles rather than specifically adding tiles to the recast graph.

Is it just a weird naming convention? It would be great to figure out if there’s an API for doing stuff like this. Also my grid spaces aren’t guaranteed to be evenly tiled, so idk if I can use this? I’m like half asleep so hard to reason about it, maybe it’ll be clearer in the morning. If you can provide more detailed explanation as to how to combine two recast graphs into one, I would appreciate it greatly!

These graphs are added procedurally. If we could have them as one graph we would but from what I understand its not possible.

How can we add two recast and point graphs together into one? (Each room has recast and point graphs as they all have verticality/jump points)

Hi

You can connect two recast graphs using multiple NodeLink2 components.

But generally, if your level is procedurally generated, would it not be possible to create a single recast graph to cover the whole level and scan that?

There’s some functionality for replacing existing tiles in a recast graph with a custom mesh. It’s mostly for internal use, but some users use it for various custom things.

This would be far too slow and inefficient. The voxel size is very high and it takes multiple minutes to even scan one room chunk.

We have already generated and cached, and then have it reloading the nodes into a recast graph at runtime, including the necessary matrix transformations to put graph at the right place… so procedurally generating these assets while not having it scan works great.

I will do this, but I’m wondering if you have a way of joining multiple recast graphs together?

This would be ideal, if I can load all these cached recast graphs we have, and then combine them into one on the data level.

The basic idea is this:

  1. Pre-generate all recast graphs per level chunk and save to cache (DONE)
  2. Once the level generates and places the chunks, load the saved recast graph cache (DONE)
  3. Combine all the recast graphs into a single recast graph by moving around the data from the loaded caches. (NOT DONE - HOW DO YOU DO THIS?)
  4. Now that these are all joined together, you can run navmesh add calls to join rooms together based on existence of a door or not, allowing AI to go through said door.

Obviously I can substitute the nodelink2 here… but I would like to avoid using links in this situation, as I think it would be better to have a single RecastGraph in my scene. (You seem to recommend this as well?)

All I’m asking is you point me to the right direction on how to connect all these graphs together into a single RecastGraph.

Is this internal method the right way to go about it? If so, can you provide a short code/pseudocode example of how you would take 2 RecastGraphs… say:

var RecastGraph1;
var RecastGraph2;

void Start()
{
    Join(RecastGraph1,RecastGraph2);
}

void Join(RecastGraph r1, RecastGraph r2)
{
  // How would you go about doing this?  Since the source is open, I'm just wondering if you had to do this with ur code, where would you start?
  // Do you create a new recast graph and then try to "ReplaceTiles" while providing tile data from r1 and r2?

}

A more detailed response would be very much appreciated @aron_granberg.
I’m planning on documenting how to pre-generate and load + combine recast graphs with the community afterwards, and even providing a route on integrating such a feature directly into your codebase afterwards.

I know a lot of people want to do similar things with this, as that is why Unity created NavMeshSurface to be used alongside prefabs. I’d like for this to have the same, and am more than willing to implement it functioning.

I did some experiments with this locally, and yes, it’s not a trivial problem.
I’ve written some code to make this easier and I’ll soon release it to the beta version.

Essentially, it consists of these building blocks:

  1. recastGraph.SerializeTiles, which takes a recast graph and serializes some tiles into a byte array.
  2. recastGraph.DeserializeTiles which loads tiles from a byte array and places the tiles at a specified tile offset (resizing the graph if necessary)

Together, they should make it possible to create a component that can hold this data in a prefab and allow it to replace the relevant part of the navmesh when the prefab is instantiated.
It will require your rooms to be aligned to recast tile boundaries, though. Will this work for you do you think?

Ok, so the functionality I’m trying to achieve needs these new functions you’ll be pushing out to beta and isn’t possible with the functions I presently have?

The first function I think I am already kind of using with saving out the RecastGraph to a file.
I think this may also save out the NodeLink3s? not 100% sure if that is even necessary to save out or if that matters but I use both the RecastGraph and NodeLinks for jumping within the game.

These sound essential to completing this implementation. Luckily the room chunks & bounds are grid based for the purposes of the procedural generation.

Please let me know as soon as this is available, have never accessed the beta branch associated with this asset.

Thanks a lot for the response, eagerly awaiting those functions.

@aron_granberg

I’ve almost gotten the exact functionality I need… here is what I did, and if you scroll to the bottom you can see the specific issues I’m left with… ISSUE A is not really an issue, it’s more of a note as I feel like I did some magic number shit to get it to work. Hopefully this is enough info, sorry if the code is messy I was trying to bruteforce the issue.

  1. Load all saved and cached RecastGraphs (THIS WORKS)
    Note: this functionality is working great. We can now save RecastGraphs, assign them to RoomChunks, generate them at Runtime anywhere, and place their appropriate graph at the approrpiate location/rotation.
//Once generated by the "SaveCache" button, we assign asset to room.
public TextAsset AStarCache; 
//We save both starting pos and rotation after caching 
//so we align the graph properly once the rooms are generated and placed randomly
public Vector3 startingPosition; 
public Vector3 startingRotation;

if (AStarCache == null) return;
AstarPath.active.data.DeserializeGraphsAdditive(AStarCache.bytes);

//Create the reposition matrix properly using relative values, so we can put the graph anywhere.
Matrix4x4 graphMatrix = Matrix4x4.identity;
graphMatrix *= Matrix4x4.Translate(transform.position);
graphMatrix *= Matrix4x4.Rotate(transform.rotation);
graphMatrix *= Matrix4x4.Translate(-transform.position);
graphMatrix *= Matrix4x4.Translate(transform.position - startingPosition);

var graphs = AstarPath.active.graphs;

int pointGraphIndex = graphs.Length - 1;
int recastGraphIndex = graphs.Length - 2;

if (graphs[recastGraphIndex] is RecastGraph)
{
    var g = graphs[recastGraphIndex] as RecastGraph;
    g.RelocateNodes(graphMatrix);
}

if (graphs[pointGraphIndex] is PointGraph)
{
    var g = graphs[pointGraphIndex] as PointGraph;
    g.RelocateNodes(graphMatrix);
    g.Scan();
    g.RebuildNodeLookup();
    g.RebuildConnectionDistanceLookup();
    g.ConnectNodes();
}
  1. Create a ‘MasterGraph’, this is where we will try to merge all other RecastGraphs into.
masterGraph = AstarPath.active.data.AddGraph(typeof(RecastGraph)) as RecastGraph; //This will be the main graph with all merged stuff.
  1. Go through all the other RecastGraphs calculate total bounds around the entire dungeon.
Bounds b = new Bounds();
bool boundsEmpty = true;

float minCellSize = Mathf.Infinity;

recasts = new List<RecastGraph>();

for (int i = 0; i < AstarPath.active.data.graphs.Length - 1; i++) //The final graph will be ours, that's why we do -1.
{
    if (AstarPath.active.data.graphs[i] is RecastGraph)
    {
        var g = AstarPath.active.data.graphs[i] as RecastGraph;
        var bounds = g.GetTileBounds(new IntRect(0, 0, g.tileXCount-1, g.tileZCount-1));

        if (boundsEmpty)
        {
            b = bounds;
            boundsEmpty = false;
      }
        else
        {
            b.Encapsulate(bounds);
        }

        if (g.cellSize < minCellSize)
        {
            minCellSize = g.cellSize;
        }

        recasts.Add(g);
    }
}

masterGraph.cellSize = minCellSize;
  1. Then we use the total bounds to calculate how many tiles should be within it. I think I copied a lot of this code from RecastGenerator.InitializeTileInfo.
//Based on the calculated bounds, let's calculate how many tiles we need to fill that
// Voxel grid size
int totalVoxelWidth = (int)(b.size.x / masterGraph.cellSize + 0.5f);
int totalVoxelDepth = (int)(b.size.z / masterGraph.cellSize + 0.5f);

int tileSizeX;
int tileSizeZ;

if (!masterGraph.useTiles)
{
    tileSizeX = totalVoxelWidth;
    tileSizeZ = totalVoxelDepth;
}
else
{
    tileSizeX = masterGraph.editorTileSize;
    tileSizeZ = masterGraph.editorTileSize;
}

// Number of tiles
int tileXCount = (totalVoxelWidth + tileSizeX - 1) / tileSizeX;
int tileZCount = (totalVoxelDepth + tileSizeZ - 1) / tileSizeZ;

if (tileXCount * tileZCount > NavmeshBase.TileIndexMask + 1)
{
    throw new System.Exception("Too many tiles (" + (tileXCount * tileZCount) + ") maximum is " + (NavmeshBase.TileIndexMask + 1) +
                               "\nTry disabling ASTAR_RECAST_LARGER_TILES under the 'Optimizations' tab in the A* inspector.");
}

//Based on this, let's make the master graph big enough to contain all these.
masterGraph.tileXCount = tileXCount;
masterGraph.tileZCount = tileZCount;

Debug.Log($"CREATING GRAPH WITH X {tileXCount} Z {tileZCount}");

//Initialize the tile array:
masterGraph.InitializeTiles();

masterGraph.FillWithEmptyTiles();

NOTE: InitializeTiles is a function I made/made public in RecastGraph as I couldn’t find one to reset that array. Also “FillWithEmptyTiles” was not public.

public void InitializeTiles()
{
  tiles = new NavmeshTile[tileXCount * tileZCount];
}
  1. Next we have to move the MasterGraph so it appears in the right place.
//The issue here is that the graph is the right size, but it's not aligned properly.
//To align this properly, we need to shift it's current bounds to the calculated world bounds.
Bounds nb = masterGraph.GetTileBounds(new IntRect(0, 0, masterGraph.tileXCount-1, masterGraph.tileZCount-1));

Vector3 boundDiff = b.center - nb.center;

Matrix4x4 graphMatrix = Matrix4x4.identity;
//Addressing strange vertical offset not being right.. this seems to align it properly.
Vector3 tileOffset = new Vector3(0, (nb.size.y - b.size.y)/2.0f,0); 

graphMatrix *= Matrix4x4.Translate(boundDiff + tileOffset);

masterGraph.RelocateNodes(graphMatrix);

  1. Setup the TriangleMeshHolder so it doesn’t error out & break when trying to add triangles to a specific graph.
TriangleMeshNode.SetNavmeshHolder(AstarPath.active.data.GetGraphIndex(masterGraph), masterGraph);
  1. Now that everything is aligned properly, we can loop through all the tiles in each of the RecastGraph that we are merging, and then find their appropriate tile within the ‘MasterGraph’, and move the vertices.
//----------------------------------
//Now we have a graph that is the right size, and placement
//We need to loop through all the recast graphs again, and place their tile data into this larger tilemap
//--------------------------------

AstarPath.active.AddWorkItem((context) =>
{
    masterGraph.StartBatchTileUpdate();
    foreach (RecastGraph rg in recasts)
    {
        for (int x = 0; x < rg.tileXCount; x++)
        {
            for (int z = 0; z < rg.tileZCount; z++)
            {
                //Given that the main graph bounds are aligned properly now
                //We need to convert the tile position from it's space to masterGraphs space.
                //To do this we want to convert this tile from local into world first.
                var tile = rg.GetTile(x, z);
                var tileB = rg.GetTileBounds(x, z, 1, 1);
                //Bounds is in world space, so we can use that to convert into master graph local space.
                var masterTileLoc = masterGraph.GetTileCoordinates(tileB.center);

                //If this is not out of bounds
                if (masterTileLoc.x >= 0 && masterTileLoc.x < masterGraph.tileXCount && masterTileLoc.y >= 0 &&
                    masterTileLoc.y < masterGraph.tileZCount)
                {
                }
                else continue;

                //Grab and copy the verts so that we can modify them
                Int3[] verts = new Int3[tile.vertsInGraphSpace.Length];
                tile.vertsInGraphSpace.CopyTo(verts,0);

                //ISSUE A
                //Now we gotta move the verts to be 1000 * the world size.  
                //Not sure why exactly but this seems to align things right.
                int xSize = (int) (masterGraph.TileWorldSizeX * 1000);
                int zSize = (int) (masterGraph.TileWorldSizeZ * 1000);
    
                for (int i = 0; i < verts.Length; i++)
                {
                    verts[i].x -= (xSize * x);
                    verts[i].z -= (zSize * z);
                }

                //Let's replace the info.
                masterGraph.ReplaceTile(masterTileLoc.x, masterTileLoc.y, verts, tile.tris);
            }
        }
    }
    masterGraph.EndBatchTileUpdate();
});
  1. Finally, we destroy/remove the old RecastGraphs as a clean-up.
//Clean up all the old graphs.
foreach (RecastGraph r in recasts)
{
    AstarPath.active.data.RemoveGraph(r);
}

That being said, there are some major issues that I’m not sure how to fix properly.

ISSUE A: The issue with the vertices not being properly offset when placed within the tiles.
This is what it looks like if I don’t do that step:


One thing to note is that it definitely seems to be a vert issue, not that the data is being placed in the wrong tile. So I move them with this function:

int xSize = (int) (masterGraph.TileWorldSizeX * 1000);
int zSize = (int) (masterGraph.TileWorldSizeZ * 1000);

for (int i = 0; i < verts.Length; i++)
{
    verts[i].x -= (xSize * x);
    verts[i].z -= (zSize * z);
}

Which seems to make it appear accurately:

Not necessarily an issue needing solving, I’m just wondering if this a bad solution? or I’m doing something wrong? I wanna outline that I did this because it may affect ISSUE B

ISSUE B: This one is the most confusing, I seem to have figured out how to displace the map to make sure it generates properly without any strange offsetting issues (You have to displace the rooms by multiples of masterGraph.TileWorldSizeX). However, now that everything looks right, the pathfinding cant seem to calculate past the tile the entity is on… It seems to not be able to recognize that there is a path available n due to that doesn’t calculate.

image

Do you see what’s going on? It seems to be able to path find but only if the entity is within a tile or two? I don’t know why it’s not working…

ISSUE C: My final issue is rotation. When transferring rotated tiles over, it does really fucky stuff. It’s as if the vertices need to be rotated and then transferred? I don’t know.

image
image

Comparison between the graph when not rotated:
image

Vs when it is rotated:
image

SUMMARY
@aron_granberg If it’s possible, could you look through and see if I’m doing something blatantly wrong that is causing my issues?

I think I’ve done a lot to make everything work correctly, the last bit is just trying to figure out why the hell the AI is not moving properly… maybe I forgot to call a crucial function that sets up some sort of underlying map?? Idk.

Here is the code if you want to look through in a more readable fashion… it’s messy as I’m brute forcing this… I’m gonna keep trying things out but I feel like I’m working in the dark a bit.

One more thing! There seems to be a difference in how the graphs look before & after moving them to a new recast.

Before:

Affter:

This seems potentially the culprit. You can clearly see that there is considerably more graph detail in the RecastGraph I loaded originally in Step 1 of the previous post. Then when I transfer that data over to the new graph, all that added complexity is gone, the graph looks considerably simpler.

I think this may be the issue… am I missing data from somewhere though? Where is all that added complexity coming from?

EDIT
Tried checking if any of the stuff inside of the tile is different (in size… same amount of verts/tris/etc…) and there was no difference I could see?

Tile is the original RecastGraph Tile data…
TileM is the MasterGraph tiledata after the source RecastGraph tile was transferred to it.

Seems identical… I don’t know.

EDIT
Also, I tried rebuilding the bbTree within the node:

var tileM = masterGraph.GetTile(masterTileLoc.x, masterTileLoc.y);

tileM.bbTree.RebuildFrom(tileM.nodes);

No dice… same behaviour of not being able to navigate farther than a tile.

Ok that discrepancy I found between how the two graphs look is exactly the issue.

There isn’t connections made between the various tiles in the masterGraph.EndBatchTileUpdate(); step. It’s reporting that it had connected like 56 tiles, vs the 1200 connections from the original RecastGraph… which explains everything.

The tiles transferred properly, but clearly there is an issue with how the vertices within the tiles are aligned to the tile itself, which is causing NavMeshBase.ConnectTiles() to fail in connecting it.

I don’t quite understand why because the tiles look absolutely perfectly transferred… But maybe my magic numbers are biting me in the ass? It’s possible the issue has to do with how the Y position of the graph wasn’t aligned properly to the tile either, idk if that’s important or not…

EDIT

There is a small gap between the tiles… this must be what’s causing it not to connect.

image

I don’t know what number to use to get these right…hmm

OK.

I got it working. I don’t think it’s still quite perfectly accurate, but in this hunk of code, where I adjust vertices from the previous RecastGraph before I call ReplaceTile with the new vertices on the MasterGraph, I changed the magic number from 1000 to 1000.1 lol:

magicNumber = 1000.1f;

int xSize = (int)(masterGraph.TileWorldSizeX * magicNumber);
int zSize = (int)(masterGraph.TileWorldSizeZ * magicNumber);

for (int i = 0; i < verts.Length; i++)
{
    verts[i].x -= (xSize * x);
    verts[i].z -= (zSize * z);
}

This seems to create almost the exact amount of connections, which results in the bot being able to traverse. One thing to note however, the actual visual display of the RecastGraph doesn’t seem to be accurate? Idk if it’s just not updating or wtf is going on here.

Looks like I got it working…
gif
Being able to use navmesh add between our rooms for bridging gaps when doors are open/closed is working!!! And now I am using 1 recastgraph for the entire map… which I hope will add to the performance. (Does this affect anything? vs having many RecastGraphs?)

That being said I really do need to address the magic number issue… there is still a discrepancy between the amount of connections made in the old graph vs the master graph, which speaks to something being off… also magic numbers would be better left out this code lmao.

If you can please advise as to what number to use to fix this, or potentially advise as to how to move the vertices properly… I know you said you have a solution in beta, but I did all this work because it’s really slowing down production on my end, and I needed the solution asap. If this works, it can save the upgrade hassle and using “beta” code is not great for our game atm. (Though we would highly benefit from the increased scanning speed).

@aron_granberg
Ideally, figuring out how to transplant the vertices properly would also address the issue of the rotation… as my room chunks can rotate in the generation (90 degree intervals, the tiles will still align properly). Once all that is done I can finally move on… from the basic pathfinding after multiple months of dealing with it.

Let me know if you have any ideas please!

Hi

I’ve been working on my solution for the last few days. It’s almost there.
If you can wait until tomorrow, I can probably release a beta update with the changes there. It should make what you are trying to do significantly simpler.

The beta is for the most part more robust than the released version. There are a few parts that are more in flux that may be less stable, but for the most part is has received way more bugfixes and stability improvements.

Ok that’s great. I can wait until tomorrow.

However, will this solution include support for rotating?

I am asking because I’m unsure if this offset you’re talking about will be position + rotation?

@aron_granberg

Uh… Is it no longer possible to access / edit the source with this? All I see is this and I can’t modify the code?:

I really need to be able to modify the source as the project develops to perfectly suit my game. Is this project not open source?

EDIT

Looks like I needed to move it to the packages folder so I can access it… still annoying though cause when you press f12 in visual studio on a function it goes to the metadata not the actual code. But workable.

EDIT

Weird… the version that is downloaded in beta seems to be wrong from what the latest version is?

image

I don’t see any update button or anything like that… did I do something wrong?

Hi

A package cannot be edited when imported using the package manager sadly. However, as you already figured out, you can move the package into your Assets folder to get that working.

Not sure why it has downloaded version 4.3.49 for you instead of the latest one. Which version of Unity are you using? The latest version requires Unity 2020.3 or higher.

You can also download the latest version as a regular UnityPackage here from this page, if you click on the “Show Older Versions” button: A* Pathfinding Project. However, then you have to manage all dependencies yourself, which Unity doesn’t make easy.


I have implemented my solution now and I have uploaded version 4.3.53 which contains the new NavmeshPrefab component.
Take a look at the documentation here: NavmeshPrefab - A* Pathfinding Project

Let me know how it works for you. You’ll be literally the first person to try it out (except me, of course). I think everything should work, but let me know if it doesn’t fit your workflow.

Yes, it supports rotations.

So far it looks like the scanning is working, and it’s reproducing the right behaviour.

However as soon as I run the game, I start getting strange Burst related errors?

I tried re-installing multiple times, don’t know what is going on. Is it possible that the burst dependancy was not updated before u pushed to beta? This error only appears at runtime supposedly.

InvalidOperationException: Handle is not initialized.
System.Runtime.InteropServices.GCHandle.Free () (at <695d1cc93cca45069c528c15c9fdd749>:0)
Pathfinding.Drawing.CommandBuilder.DiscardAndDisposeInternal () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/CommandBuilder.cs:223)
Pathfinding.Drawing.DrawingManager.OnDisable () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingManager.cs:305)

A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details.

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'Pathfinding.CalculateContour_00000714$BurstDirectCall' threw an exception. ---> System.InvalidOperationException: Burst failed to compile the function pointer `Void CalculateContour(JobCalculateContour*)`
  at Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) [0x00131] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:364 
  at Unity.Burst.BurstCompiler.CompileILPPMethod (System.RuntimeMethodHandle burstMethodHandle, System.RuntimeMethodHandle managedMethodHandle, System.RuntimeTypeHandle delegateTypeHandle) [0x0008f] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:170 
  at Pathfinding.NavmeshCutJobs+CalculateContour_00000714$BurstDirectCall.Constructor () [0x00000] in <41efbea05d9044569009f4efebacbdb1>:0 
  at Pathfinding.NavmeshCutJobs+CalculateContour_00000714$BurstDirectCall..cctor () [0x00000] in <41efbea05d9044569009f4efebacbdb1>:0 
   --- End of inner exception stack trace ---
  at $BurstDirectCallInitializer.Initialize () [0x00000] in <41efbea05d9044569009f4efebacbdb1>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in <695d1cc93cca45069c528c15c9fdd749>:0 
   --- End of inner exception stack trace ---
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at UnityEditor.EditorAssemblies.ProcessInitializeOnLoadMethodAttributes () [0x00047] in <bfe26bbc7be749c7bb22d52435e15888>:0 
UnityEditor.EditorAssemblies:ProcessInitializeOnLoadMethodAttributes ()

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'Try_000009A0$BurstDirectCall' threw an exception. ---> System.InvalidOperationException: Burst failed to compile the function pointer `Int32 Try(IntPtr, Block ByRef)`
  at Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) [0x00131] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:364 
  at Unity.Burst.BurstCompiler.CompileILPPMethod (System.RuntimeMethodHandle burstMethodHandle, System.RuntimeMethodHandle managedMethodHandle, System.RuntimeTypeHandle delegateTypeHandle) [0x0008f] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:170 
  at Unity.Collections.AllocatorManager+StackAllocator+Try_000009A0$BurstDirectCall.Constructor () [0x00000] in <8d277e54f1884e52bda3113236704cf7>:0 
  at Unity.Collections.AllocatorManager+StackAllocator+Try_000009A0$BurstDirectCall..cctor () [0x00000] in <8d277e54f1884e52bda3113236704cf7>:0 
   --- End of inner exception stack trace ---
  at $BurstDirectCallInitializer.Initialize () [0x00000] in <8d277e54f1884e52bda3113236704cf7>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in <695d1cc93cca45069c528c15c9fdd749>:0 
   --- End of inner exception stack trace ---
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at UnityEditor.EditorAssemblies.ProcessInitializeOnLoadMethodAttributes () [0x00047] in <bfe26bbc7be749c7bb22d52435e15888>:0 
UnityEditor.EditorAssemblies:ProcessInitializeOnLoadMethodAttributes ()

InvalidOperationException: Burst failed to compile the function pointer `Boolean AnyBuffersWrittenTo(Unity.Collections.LowLevel.Unsafe.UnsafeAppendBuffer*, Int32)`
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:364)
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Boolean isFunctionPointer) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:239)
Unity.Burst.BurstCompiler.CompileFunctionPointer[T] (T delegateMethod) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:220)
Pathfinding.Drawing.DrawingData+BuilderData..cctor () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingData.cs:541)
Rethrow as TypeInitializationException: The type initializer for 'BuilderData' threw an exception.
Pathfinding.Drawing.DrawingData+BuilderDataContainer.Reserve (System.Boolean isBuiltInCommandBuilder) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingData.cs:683)
Pathfinding.Drawing.CommandBuilder..ctor (Pathfinding.Drawing.DrawingData gizmos, Pathfinding.Drawing.DrawingData+Hasher hasher, Pathfinding.Drawing.RedrawScope frameRedrawScope, Pathfinding.Drawing.RedrawScope customRedrawScope, System.Boolean isGizmos, System.Boolean isBuiltInCommandBuilder, System.Int32 sceneModeVersion) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/CommandBuilder.cs:96)
Pathfinding.Drawing.DrawingData.GetBuiltInBuilder (System.Boolean renderInGame) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingData.cs:1086)
Pathfinding.Drawing.DrawingManager.OnEnable () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingManager.cs:248)
UnityEngine.GameObject:AddComponent()
Pathfinding.Drawing.DrawingManager:Init() (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingManager.cs:181)
UnityEditor.EditorAssemblies:ProcessInitializeOnLoadMethodAttributes()

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'Execute_0000014F$BurstDirectCall' threw an exception. ---> System.TypeInitializationException: The type initializer for 'JobWireMesh' threw an exception. ---> System.InvalidOperationException: Burst failed to compile the function pointer `Void Execute(MeshData ByRef, Pathfinding.Drawing.CommandBuilder ByRef)`
  at Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) [0x00131] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:364 
  at Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Boolean isFunctionPointer) [0x0001f] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:239 
  at Unity.Burst.BurstCompiler.CompileFunctionPointer[T] (T delegateMethod) [0x0000c] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:220 
  at Pathfinding.Drawing.CommandBuilder+JobWireMesh..cctor () [0x00000] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Drawing\CommandBuilder.cs:1387 
   --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegateInternal(System.Delegate)
  at System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate (System.Delegate d) [0x0000e] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) [0x000a1] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:299 
  at Unity.Burst.BurstCompiler.CompileILPPMethod (System.RuntimeMethodHandle burstMethodHandle, System.RuntimeMethodHandle managedMethodHandle, System.RuntimeTypeHandle delegateTypeHandle) [0x0008f] in C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.unity.burst@1.6.6\Runtime\BurstCompiler.cs:170 
  at Pathfinding.Drawing.CommandBuilder+JobWireMesh+Execute_0000014F$BurstDirectCall.Constructor () [0x00000] in <183d011932d34b5da8bb04b274557e3c>:0 
  at Pathfinding.Drawing.CommandBuilder+JobWireMesh+Execute_0000014F$BurstDirectCall..cctor () [0x00000] in <183d011932d34b5da8bb04b274557e3c>:0 
   --- End of inner exception stack trace ---
  at Pathfinding.Drawing.CommandBuilder.Initialize$JobWireMesh_Execute_0000014F$BurstDirectCall () [0x00000] in <183d011932d34b5da8bb04b274557e3c>:0 
  at $BurstDirectCallInitializer.Initialize () [0x00000] in <183d011932d34b5da8bb04b274557e3c>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in <695d1cc93cca45069c528c15c9fdd749>:0 
   --- End of inner exception stack trace ---
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 
  at UnityEditor.EditorAssemblies.ProcessInitializeOnLoadMethodAttributes () [0x00047] in <bfe26bbc7be749c7bb22d52435e15888>:0 
UnityEditor.EditorAssemblies:ProcessInitializeOnLoadMethodAttributes ()

InvalidOperationException: Burst failed to compile the function pointer `Int32 Try(IntPtr, Block ByRef)`
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:364)
Unity.Burst.BurstCompiler.CompileILPPMethod (System.RuntimeMethodHandle burstMethodHandle, System.RuntimeMethodHandle managedMethodHandle, System.RuntimeTypeHandle delegateTypeHandle) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:170)
Unity.Collections.AllocatorManager+StackAllocator+Try_000009A0$BurstDirectCall.Constructor () (at <8d277e54f1884e52bda3113236704cf7>:0)
Unity.Collections.AllocatorManager+StackAllocator+Try_000009A0$BurstDirectCall..cctor () (at <8d277e54f1884e52bda3113236704cf7>:0)
Rethrow as TypeInitializationException: The type initializer for 'Try_000009A0$BurstDirectCall' threw an exception.
$BurstDirectCallInitializer.Initialize () (at <8d277e54f1884e52bda3113236704cf7>:0)

InvalidOperationException: Burst failed to compile the function pointer `Void CalculateContour(JobCalculateContour*)`
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:364)
Unity.Burst.BurstCompiler.CompileILPPMethod (System.RuntimeMethodHandle burstMethodHandle, System.RuntimeMethodHandle managedMethodHandle, System.RuntimeTypeHandle delegateTypeHandle) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:170)
Pathfinding.NavmeshCutJobs+CalculateContour_00000714$BurstDirectCall.Constructor () (at <41efbea05d9044569009f4efebacbdb1>:0)
Pathfinding.NavmeshCutJobs+CalculateContour_00000714$BurstDirectCall..cctor () (at <41efbea05d9044569009f4efebacbdb1>:0)
Rethrow as TypeInitializationException: The type initializer for 'Pathfinding.CalculateContour_00000714$BurstDirectCall' threw an exception.
$BurstDirectCallInitializer.Initialize () (at <41efbea05d9044569009f4efebacbdb1>:0)

InvalidOperationException: Burst failed to compile the function pointer `Void Execute(MeshData ByRef, Pathfinding.Drawing.CommandBuilder ByRef)`
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:364)
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Boolean isFunctionPointer) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:239)
Unity.Burst.BurstCompiler.CompileFunctionPointer[T] (T delegateMethod) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:220)
Pathfinding.Drawing.CommandBuilder+JobWireMesh..cctor () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/CommandBuilder.cs:1387)
Rethrow as TypeInitializationException: The type initializer for 'JobWireMesh' threw an exception.
System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate (System.Delegate d) (at <695d1cc93cca45069c528c15c9fdd749>:0)
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:299)
Unity.Burst.BurstCompiler.CompileILPPMethod (System.RuntimeMethodHandle burstMethodHandle, System.RuntimeMethodHandle managedMethodHandle, System.RuntimeTypeHandle delegateTypeHandle) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:170)
Pathfinding.Drawing.CommandBuilder+JobWireMesh+Execute_0000014F$BurstDirectCall.Constructor () (at <183d011932d34b5da8bb04b274557e3c>:0)
Pathfinding.Drawing.CommandBuilder+JobWireMesh+Execute_0000014F$BurstDirectCall..cctor () (at <183d011932d34b5da8bb04b274557e3c>:0)
Rethrow as TypeInitializationException: The type initializer for 'Execute_0000014F$BurstDirectCall' threw an exception.
Pathfinding.Drawing.CommandBuilder.Initialize$JobWireMesh_Execute_0000014F$BurstDirectCall () (at <183d011932d34b5da8bb04b274557e3c>:0)
$BurstDirectCallInitializer.Initialize () (at <183d011932d34b5da8bb04b274557e3c>:0)

InvalidOperationException: Burst failed to compile the function pointer `Boolean AnyBuffersWrittenTo(Unity.Collections.LowLevel.Unsafe.UnsafeAppendBuffer*, Int32)`
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Reflection.MethodInfo methodInfo, System.Boolean isFunctionPointer, System.Object managedFallbackDelegateObj) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:364)
Unity.Burst.BurstCompiler.Compile (System.Object delegateObj, System.Boolean isFunctionPointer) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:239)
Unity.Burst.BurstCompiler.CompileFunctionPointer[T] (T delegateMethod) (at Library/PackageCache/com.unity.burst@1.6.6/Runtime/BurstCompiler.cs:220)
Pathfinding.Drawing.DrawingData+BuilderData..cctor () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingData.cs:541)
Rethrow as TypeInitializationException: The type initializer for 'BuilderData' threw an exception.
Pathfinding.Drawing.DrawingData+BuilderDataContainer.Reserve (System.Boolean isBuiltInCommandBuilder) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingData.cs:683)
Pathfinding.Drawing.CommandBuilder..ctor (Pathfinding.Drawing.DrawingData gizmos, Pathfinding.Drawing.DrawingData+Hasher hasher, Pathfinding.Drawing.RedrawScope frameRedrawScope, Pathfinding.Drawing.RedrawScope customRedrawScope, System.Boolean isGizmos, System.Boolean isBuiltInCommandBuilder, System.Int32 sceneModeVersion) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/CommandBuilder.cs:96)
Pathfinding.Drawing.DrawingData.GetBuilder (System.Boolean renderInGame) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingData.cs:1081)
Pathfinding.Drawing.DrawingManager.GetBuilder (System.Boolean renderInGame) (at Library/PackageCache/com.arongranberg.astar@4.3.53/Drawing/DrawingManager.cs:604)
Pathfinding.RVO.SimulatorBurst.UpdateInternal[T] () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Core/RVO/RVOCoreSimulatorBurst.cs:1197)
Pathfinding.RVO.SimulatorBurst.Update () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Core/RVO/RVOCoreSimulatorBurst.cs:1110)
Pathfinding.RVO.RVOSimulator.Update () (at Library/PackageCache/com.arongranberg.astar@4.3.53/RVO/RVOSimulator.cs:135)

InvalidOperationException: The previously scheduled job RVOQuadtreeBurst:JobBuild writes to the Unity.Collections.NativeArray`1[System.Int32] JobBuild.agents. You are trying to schedule a new job RVOQuadtreeBurst:JobBuild, which writes to the same Unity.Collections.NativeArray`1[System.Int32] (via JobBuild.agents). To guarantee safety, you must include RVOQuadtreeBurst:JobBuild as a dependency of the newly scheduled job.
Unity.Jobs.LowLevel.Unsafe.JobsUtility.Schedule (Unity.Jobs.LowLevel.Unsafe.JobsUtility+JobScheduleParameters& parameters) (at <c62cc0ef748e4107b21e2999fa50d73a>:0)
Unity.Jobs.IJobExtensions.Schedule[T] (T jobData, Unity.Jobs.JobHandle dependsOn) (at <c62cc0ef748e4107b21e2999fa50d73a>:0)
Pathfinding.RVO.SimulatorBurst.UpdateInternal[T] () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Core/RVO/RVOCoreSimulatorBurst.cs:1158)
Pathfinding.RVO.SimulatorBurst.Update () (at Library/PackageCache/com.arongranberg.astar@4.3.53/Core/RVO/RVOCoreSimulatorBurst.cs:1110)
Pathfinding.RVO.RVOSimulator.Update () (at Library/PackageCache/com.arongranberg.astar@4.3.53/RVO/RVOSimulator.cs:135)

Maybe you have some setting enabled in burst that I don’t?

Here are the settings I see:

and here is what it says in the package manaer… says I need to use 1.6.0-pre.2 and then says 1.6.6 is installed. It installs the correct version of burst, even tho the name doesn’t matter, I guess 1.6.6 is the same as 1.6.0-pre.2. I tried removing and installing it manually and that didn’t work either.

image

BTW, it shows no graph in runtime, disappears as soon as I press play. Not even an instantiated prefab, just a prefab sitting in the scene.

Not sure what’s going on, could you double check everything is fine?

I am on the latest LTS version of Unity 2020, 2020.3.35f1. Had to upgrade from 2020.3.23f1 to get the packages loading properly for whatever reason… must’ve been a bug.

EDIT

Oops… the latest was 2020.3.38f1 and now that I upgraded and tested again, I see fewer errors.

C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs(46,7): Burst error BC1022: Accessing a managed array is not supported

 at Pathfinding.RVO.RVOQuadtreeBurst..cctor() (at C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs:46)
 at Pathfinding.RVO.RVOQuadtreeBurst.QueryRec(Pathfinding.RVO.RVOQuadtreeBurst* this, ref Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery query, int treeNodeIndex, Unity.Mathematics.float3 nodeMin, Unity.Mathematics.float3 nodeMax, ref float maxRadius) (at C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs:368)


While compiling job: System.Void Pathfinding.Jobs.JobParallelForBatchedExtensions/ParallelForBatchJobStruct`1<Pathfinding.RVO.Sampled.JobRVOCalculateNeighbours`1<Pathfinding.RVO.XZMovementPlane>>::Execute(T&,System.IntPtr,System.IntPtr,Unity.Jobs.LowLevel.Unsafe.JobRanges&,System.Int32)
at C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs:line 46

C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs(46,7): Burst error BC1360: A static constructor on type `Pathfinding.RVO.RVOQuadtreeBurst` is mixing managed and unmanaged code which is not supported. In order to solve this, please move the managed code or unmanaged code to a different class/struct

 at Pathfinding.RVO.RVOQuadtreeBurst..cctor() (at C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs:46)
 at Pathfinding.RVO.RVOQuadtreeBurst.QueryRec(Pathfinding.RVO.RVOQuadtreeBurst* this, ref Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery query, int treeNodeIndex, Unity.Mathematics.float3 nodeMin, Unity.Mathematics.float3 nodeMax, ref float maxRadius) (at C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs:368)


While compiling job: System.Void Pathfinding.Jobs.JobParallelForBatchedExtensions/ParallelForBatchJobStruct`1<Pathfinding.RVO.Sampled.JobRVOCalculateNeighbours`1<Pathfinding.RVO.XZMovementPlane>>::Execute(T&,System.IntPtr,System.IntPtr,Unity.Jobs.LowLevel.Unsafe.JobRanges&,System.Int32)
at C:\Users\Solom\Documents\RITUAL\Library\PackageCache\com.arongranberg.astar@4.3.53\Core\RVO\RVOQuadtreeBurst.cs:line 46

This is what package manager says:

As you can see, the mathematics version and the burst version doesn’t seem to be accurate.
However I keep trying to downgrade and it won’t let me for whatever reason, stays at burst 1.6.6 and math 1.2.1

Do you think this is the issue… really annoying.

EDIT

Doing some more investigating to see if I can get the right versions of burst installed (math still won’t downgrade because that burst 1.6.0 pre 2 depends on math 1.2.1).

I uninstalled AStar, which let me install the right version of burst:

As you can see that version of burst uses mathematics 1.2.1 apparently.

Mathematics is used by Universal RP & Burst.

I tried to see if maybe the URP is the dependency that is forcing mathematics to not use 1.1.0:
image

But no, it only requires 1.1.0…

So basically there’s a weird dependency discrepancy here…
The version of Burst reported is the one forcing math to be 1.2.1
But ur dependancies in AStar is asking for 1.1.0…

It may not be what’s causing issues, I just found it strange, because your dependencies should accomodate for this?

As you can see, prior to installing AStar, this is what it looks like, it recognizes I have the right burst installed.

Then as soon as I install it, it seems to update burst to 1.6.6…

I don’t get it. Tried as much as I could and still get those errors and it breaks the ability to have those graphs show up at runtime.

Another thing I find strange about AStars dependencies asking for math 1.1.0 is that Burst hasn’t used that math version since Burst 1.3.3.

Honestly I don’t know much about dependencies and package manager, just trying to provide as much data as possible.