Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

World Building EasyRoads3D v3 - the upcoming new road system

Discussion in 'Tools In Progress' started by raoul, Feb 19, 2014.

  1. CitrioN

    CitrioN

    Joined:
    Oct 6, 2016
    Posts:
    66
    Hi Raoul,

    I got some questions regarding the road shape. I noticed that if I have more than 2 nodes for the road shapes in the road type profile editor the option to create a new connection prefab in the material tab becomes unavailable. I assume this is because the crossing generation currently does not support road shapes other than flat roads? If that is the case, is this type of support planned to be added? It would be a shame if we can't use crossing for custom road shapes.
    upload_2022-12-5_20-27-36.png

    I also noticed that if I create my roads with a road shape consisting of 4 nodes they look normal. I use 4 nodes so I can give my roads some depth in order to not have to align the terrain to the roads with easy roads but instead use the snap to terrain feature and prevent terrain poking through by having the road thick enough.
    As soon as I create and connect crossing via the scripting API the road will no longer have those 4 nodes but reverts back to 2 nodes. What I found is also that my roads with a custom shape does not allow the connection of crossings when I attempt to do it manually but will do so via the API call. This however has the result I explained with the nodes being removed.

    Here are some screenshots to visualize what I try to explain:

    upload_2022-12-5_20-21-19.png
    Road with 4 nodes to simulate road depth

    upload_2022-12-5_20-21-48.png
    Same road after connecting it to a crossing using the API. Notice that the depth is gone. I also checked the generated mesh to see if is the geometry for the additional nodes is indeed gone.

    upload_2022-12-5_20-26-12.png
    Road depth up close for reference

    EDIT:
    Additional Information
    I tried to fake the depth by keeping the 2 node road shape and elevate it above the terrain and use a side object instead for the sides. This does work when not snapping the road to the terrain. If I try road snapping with a shape based side object the side object will be all over the place. It looks like the side object will not stay connected to the road shape as seen in this image where the side object is floating above the road or sometimes below the road depending on the actual vertex positioning from the snapping process.
    upload_2022-12-5_21-46-0.png

    Kind regards,
    CitrioN
     
    Last edited: Dec 5, 2022
  2. LittleWhite114

    LittleWhite114

    Joined:
    Apr 29, 2019
    Posts:
    9
    Yes,you're right,it's still created at runtime.I want to make a game that players can generate map by themselves,so I need provide a function that creates roads at runtime.
    Is there any possible that I can create a prefab that contains RoadNetwork,so I can prepare for it first?
    Thank you very much
     
  3. Adunato

    Adunato

    Joined:
    Nov 3, 2018
    Posts:
    28
    Thanks for the support with the Beta download.

    I tried the v3.3 from the website (which resolved some other issues btw) but the "EasyRoads3Dv3: valid road types for the involved road objects are required for Flex Connectors." when trying to use InsertFlexConnector is still there.

    You mentioned checking the road type in the inspector. What game object should I check this on? I can't see any road type on the actual road objects.
     
  4. Zaddo

    Zaddo

    Joined:
    May 19, 2012
    Posts:
    76
    Hi Raoul,

    I just upgraded from 2020.3 to 2021.3.15f1 and I have started getting these errors.
    Assertion failed on expression: 'GPUWidth == m_DataWidth'
    etc

    I am on v3.2.2f1 and my project is URP. I don't think it is breaking anything. But they are annoying. Can they just be ignored?

    In your post above you say you are working on a fix for Unity 2022. But will you have a fix for Unity 2021?
     
    Last edited: Dec 6, 2022
  5. MrTimcakes

    MrTimcakes

    Joined:
    Jan 8, 2016
    Posts:
    11
    Hey Raoul,

    Hopefully a quick one for you here. How can I limit the amount of spawned side objects per marker?
    I've got a checkpoint side object I'd like to manually place for specific road markers, by increasing the distance between objects I can limit the spawn count to 2, one at the start and one at the end, how can I remove the one at the end? In other instances, it might be that I'd like two but I'd like to adjust their x&y positions independently Is there a way to do that or would it be easier to add another road marker?

    Cheers, Tim
     
  6. Adunato

    Adunato

    Joined:
    Nov 3, 2018
    Posts:
    28
    I found the road type field in the settings tab and it's not set. When setting it manually in the editor for each road it works so it seems that the issue is in relation to the runtime creation of the roads.

    To create a road I have followed the template in runtimeScript.cs:
    - create a new ERRoadType (including calling Update())
    - pass it to roadNetwork.CreateRoad()

    The issue is that once the road has been created, if I interrogate its roadtype I get null (
    road.gameObject.GetComponent<ERModularRoad>().GetRoadType()).

    I debugged the GetRoadType() method and it can't find a matching ID for the road type assigned to the road in the stored roadTypes (baseScript.roadTypes). The new road type is actually stored in roadTypes but the id is a double which has some decimal difference (1670399368.5009687 != 1670399368.5029635). I can see the ID is assigned during
    ERRoadType creation which for some reason ends up being a decimal value
    DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds.

    Any thoughts? :-D
     
  7. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi CitrioN,

    This is v3.3 beta.

    That is correct, the built-in connection prefab system is for standard 2 node flat road objects.

    The v3.3 Flex Connector does support custom road shapes.

    Is Flex Connector code used to connect the roads? Are road types reset? Can you check that in the Inspector?

    What you are looking for should be possible with the v3.3 custom road shape options but with the latest versions supporting side objects on crossings this is indeed an alternative.

    What side object settings are used?

    I just tested this with a shape type of side object with the outer node snapping to the terrain. It works well on crossings.

    shape--so.jpg

    Best regards,
    Raoul
     
  8. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi LittleWhite114,

    That is exactly what I suggested in my previous posts. Please try it.

    Create the road network with the road type presets and side object presets inside the Unity editor and use this scene at runtime with this road network object already present. As mentioned the ERRoadNetwork constructor will create a reference to this road network object. The same API code can be used.

    Thanks,
    Raoul
     
    LittleWhite114 likes this.
  9. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello Adunato,

    When testing the API code in the Unity editor the road network object can be selected in the hierarchy. This should show the road network objects in the same way as when the creating the road objects manually.

    Selecting a road object in the scene, for example by clicking one of the blue marker handles, will show all settings in the Inspector including the assigned road type, The "Road Type" dropdown near the top.

    Thanks,
    Raoul
     
  10. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello Zaddo,

    Unity often throws warnings when upgrading a project. Usually this is not critical especially when clearing the console also removes this message. And often in these cases, restarting Unity will no longer show this message.

    There are no known issues for Unity 2021, so please let me know if you do actually see something not working well.

    Thanks,
    Raoul
     
    Zaddo likes this.
  11. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Tim,

    So the situation is that a specific side object is active on for example marker 1, it will be inactive on marker 2 and only one instance should be spawned at the start?

    By default indeed the distance between spawned objects will be averaged over the length so the first instance appears at the start and the last at the end. The control for this is "Average by Road Length" just below "Distance between Objects". This is by default active

    So if you do not want the instance at the end then you can try deactivating "Average by Road Length" and indeed set the Distance between Objects at a large value.

    Let me know if you are looking for something else.

    Thanks,
    Raoul
     
  12. LittleWhite114

    LittleWhite114

    Joined:
    Apr 29, 2019
    Posts:
    9
    Yes!It works!Thank you very much!
     
    raoul likes this.
  13. Rivax95

    Rivax95

    Joined:
    Oct 17, 2017
    Posts:
    6
    Hi guys how to enabled urp support ?
     
  14. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Rivax95,

    Which packages do you have imported? Did you also import the demo package?

    URP is material / shader related, these SRP support packages are located in

    /Assets/EasyRoads3D/SRP Support packages/

    When materials appear in pink can you try manually importing the respective package located in this folder?

    That will update all road network materials that use custom shaders. Materials that use Unity built-in shaders can be updated using the Unity built-in render pipeline conversion tool.

    Also note that URP and HDRP support was added in v3.2. All road network assets used in the v3.2 demo scene will update. Assets used in the older v3.1 demo scene will still appear in pink. It is a matter of assigning one of the new road shaders to these assets if you want to use them.

    Let me know if you need further help with this.

    Raoul
     
  15. CitrioN

    CitrioN

    Joined:
    Oct 6, 2016
    Posts:
    66
    Hello Raoul,

    I see. Didn't know that the flex connector does work with custom road shapes. I'll give that a try.

    When using the flex connector code the road types are persistent. If I use a regular connection prefab the road types are reset and I can also not select one from the dropdown either. Is this intended behaviour?

    This works for me as long as I don't use road.SnapToTerrain(true, snapOffset).
    Without snapping the sideobject does for the most part stick to the road vertices. It has some trouble in connections.
    If I snap the road to the terrain however, the sideobject will be all over the place and not at all be connected to the road making it unusable for this situation as seen below in the comparison.

    upload_2022-12-9_18-39-29.png
    Road sideobject to simulate thickness properly sticking to the road mesh (no snapping to terrain)

    upload_2022-12-9_18-40-7.png
    Same road with sideobject not at all connected to the road or closely following its shape after snapping the road to the terrain

    In your screenshot your sideobjects are all white. If I try to have that too by using an all white material for my sideobject I do get lots of black artifacts. Any idea why that is?

    upload_2022-12-9_18-42-52.png
    Side object settings I use. I also tried disabling 'Clamp to Road Geometry' and enable 'Snap to Terrain' without success.

    You mention only the outer node being snapped to the terrain. How is this done? I can't find a way to only snap specific nodes?

    Kind regards,
    CitrioN
     
  16. Rivax95

    Rivax95

    Joined:
    Oct 17, 2017
    Posts:
    6
    Hi Rivax95,

    Which packages do you have imported? Did you also import the demo package?

    All except addon. i imported easy road v3 last update and example scenes.
    URP is material / shader related, these SRP support packages are located in

    /Assets/EasyRoads3D/SRP Support packages/
    i importeds and not changes, i looking all pink

    When materials appear in pink can you try manually importing the respective package located in this folder?
    How?, i dont understand.
    Manually, one to one model change for the ER Road material, is the only material that works well it seems.


    That will update all road network materials that use custom shaders. Materials that use Unity built-in shaders can be updated using the Unity built-in render pipeline conversion tool.
    I don't know the tool, can you guide me about it?

    Also note that URP and HDRP support was added in v3.2. All road network assets used in the v3.2 demo scene will update. Assets used in the older v3.1 demo scene will still appear in pink. It is a matter of assigning one of the new road shaders to these assets if you want to use them.
    i directly download latest version is my first time with this assets

    Let me know if you need further help with this.

    Raoul
    I think so, I'm going to need your help, I feel very lost with this, even though the asset is very complete and responds to all my needs, I need to test it thoroughly to verify that it is suitable for a mobile game


    Sorry for my low inglis, im spanish
     
    Last edited: Dec 9, 2022
  17. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello CitrioN,

    What is the shape setup of the specific road type and what is the shape setup of the connection prefab?

    When this is the same then the road type should not reset. There are no known situations like that, but I will test.

    My apologies, Yesterday I was under the impression that you were using the "Follow Terrain Contours" option. That will snap the main road spline to the terrain and the left and right side of the road will still be generated as usual. Side objects like I mentioned will snap to the terrain on the outside.

    Now I see that road.SnapToTerrain(true, snapOffset) is used. This will actually snap the road sides to the terrain.

    Just to know how to test this, which snapOffset value is used? A value of 0 will snap the edges to the terrain, using a side object on top of that for the road edges will probably not have the desired effect.

    Thanks,
    Raoul
     
  18. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello Rivax95,

    For road materials in the package using EasyRoads3D shaders it should not be necessary to assign shaders all road materials should update after importing the repsective URP package.

    Which URP version do you use?

    Which exact URP package did you import?

    Can you give an example of a material name that appears in pink?

    Was an URP package actually imported? To do this, just click the URP package that matches your URP version best in the specific folder from inside the Unity editor.

    The render pipeline converter tool is covered in the Unity docs:

    https://docs.unity3d.com/Packages/c...versal@12.0/manual/features/rp-converter.html

    Let me know if you need further help with this.

    Thanks,
    Raoul
     
  19. Rivax95

    Rivax95

    Joined:
    Oct 17, 2017
    Posts:
    6




    when imported demo urp scene all fixed except props they still look pink
    Look at, name material is standard
     
    Last edited: Dec 10, 2022
  20. kopanz

    kopanz

    Joined:
    Dec 6, 2016
    Posts:
    82
    How can I minimise the separation between the road geometry and the bridge mesh ? I have a custom physics engine. Not using built-in physics system. So this is a huge issue for me.
    easyRoadsBridge.JPG
     
  21. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Rivax95,

    So the first two screenshots were taken before importing the demo URP package. And after importing the URP package the pink road objects render well as seen in the 4th screenshot.

    The other screenshots, the props that you mention, use Unity built-in shaders.

    Did you check the link in my previous email? It shows the quick steps to convert these materials to URP. These steps are missing in your post.

    https://docs.unity3d.com/Packages/c...versal@12.0/manual/features/rp-converter.html

    The palm trees use shaders that are not upgradable. At the end EasyRoads3D is not a vegetation material asset. For the palm trees you can look at other vegetation shaders that support URP.

    Thanks,
    Raoul
     
    Last edited: Dec 11, 2022
  22. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello Kopanz,

    Is the bridge side object auto generated based on the terrain profile or auto activated on road markers?

    When manually activated on road markers, the terrain will be adjusted relative to the marker positions. So adjusting the start / end offsets of the bridge to cover these marker positions should fix that.

    Actually these offset values should also cover the terrain cell heightmapscale as an extra safe margin.

    These values can be set in the Side Object Manager as default offset values. And after this can be fine tuned for each individual bridge if necessary.

    Thanks,
    Raoul
     
    kopanz likes this.
  23. kopanz

    kopanz

    Joined:
    Dec 6, 2016
    Posts:
    82
    I'm manually activating bridges where necessary by checking them on from markers. Not using automatic bridge generating.

    Thanks :)

    Adjusting the start / end offsets fixed it. Thanks again.
     
    Last edited: Dec 10, 2022
    raoul likes this.
  24. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    With focus on the Scene View window, Ctrl + H toggles on / off the display of slider handles at the start and end of side object sections. That can be used to tweak these offsets directly in the scene instead of in the Inspector.

    Thanks,
    Raoul
     
    kopanz likes this.
  25. CitrioN

    CitrioN

    Joined:
    Oct 6, 2016
    Posts:
    66
    Hello Raoul,

    This could definitely be the problem in my case. I have only tried it with the default road that I added 2 nodes to. With the API call I added the Default T Crossing to that road. That crossing does of course not match the node setup by default.

    Am I understanding it correctly from your reply that I would need to make a custom crossing model with the same node setup in a modeling software as the road has to make it connect and retain the shape?

    I assume there is no custom shape editor for dynamic crossings prefabs within the asset that I am unaware of?

    I'm using road.SnapToTerrain(true, snapOffset because the follow terrain contours option does not ensure that the terrain won't show through the road. I tried offsets of 0, 0.1, 0.15 and 0.2.

    This does have the desired effect of having the terrain not show through but side objects that should keep it's connection to the road shape will break for me as shown in the images of my previous post.

    Kind regards,
    CitrioN
     
  26. marcell123455

    marcell123455

    Joined:
    Jun 18, 2014
    Posts:
    270
    Hi @raoul ,

    I am thinking about start using flex connectors, but how advanced are the sideobject generation options for flex connectors?

    For example: Will procedural mesh SO like walls generate at the corners of the intersection or bridge bases? Is there a option to automaticly place traffic lights / stop signs at the right corner at each connection end? Right now, I also have multiple Mesh Object SOs that spawn waypoints for my traffic for each road. Is there a way to have them continue on intersections? Is it possible to have automatically generate markers like pedestrian pathways at each intersection road end? Does the lastest asset store version support flex connectors yet?

    thanks!
     
  27. marcell123455

    marcell123455

    Joined:
    Jun 18, 2014
    Posts:
    270
    OK quick look at the website answers most of my questions, but not all.
     
  28. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello CitrioN,

    I just tested this using the assets in the main EasyRoads3D Pro package.

    I added two road objects to the scene and the connection prefab "Default T Crossing".

    Using ConnectToStart() in the ERRoad class all appears to work well, the road types are still assigned to both road objects.

    Looking at your post mentioning the default road and the "Default T Crossing" this seems a similar setup?

    With regard to your question, in order to connect a road object to a connection object both shapes should match when the road object is already attached to a connection on the other end.

    When the road shapes do not match and the road object is not yet connected to the other end, the road object will inherit the shape of the connection object. In that case the original road type is no longer valid, so it will be reset.

    That is how the system works, but I still do not know if that is what happens on your end because you mention that the default road types and the "Default T Crossing" are used here?

    Yes, I can recreate this. SnapToTerrain() was added upon request. It will deactivate terrain deformation to match the road shapes and snap the the road objects to the terrain instead. For this to have good results, more smooth terrains with no abrupt height changes are needed, that is why this option is only available through the scripting API.

    And I see that the the side object spline data is set before snapping the vertices. I will make a note to change this.

    Best regards,
    Raoul
     
  29. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi @marcell123455,

    Side object generation is also optimized for Flex Connectors.



    This is a Flex Connector, the guardrails and walls are also generated on the Flex Connector.

    Not yet, but options for props like Traffic Lights / Stop signs is on the list.

    v3.3 includes new road type features, among which the option to set lane info, the number of lanes and the direction. This will generate lane data, also on connectors.

    The v3.3 beta package on our website includes a simple AI script showing how to access this data. In the beta scene objects follow the road network, also on connectors.

    The Asset Store version is v3.2 which does not support Flex Connectors. The demo package on the Asset store does already use the v3.3 beta, the dynamic built-in connectors in the v3.2 demo scene are all Flex Connectors.

    But it is recommended to use the beta version on our website, it will always be up to date and the demo scene shows more beta features.

    A v3.2 update with support for Unity 2022.2 will follow next week.

    After that a new v3.3 beta update will be prepared which will also be part of the Asset Store package.

    Thanks,
    Raoul
     
    marcell123455 likes this.
  30. CitrioN

    CitrioN

    Joined:
    Oct 6, 2016
    Posts:
    66
    This does explain the behaviour I experience. I do indeed use the default road but added 2 nodes. So you could consider it no longer the default road as I modified it to have a different shape. Your explanation of the shape being inherited by the connection object explains it why my roads turned flat after connecting it to the 'Default T Crossing' as that one has a flat road shape. I will instead create a custom crossing prefab matching the road shape of the road type and will try that. Thanks for the rundown of how things work internally.

    I see. The SnapToTerrain() method is a really good addition as it allows the skipping of terrain alignment.
    It would make a massive difference if the side object vertices are snapped to the road mesh after the snapping of the road vertices to the terrain. Thanks for looking into that. Maybe when calling SnapToTerrain() a refresh on the relevant sideobjects data could be a solution to ensure connectivity between the sideobject vertices and the new updated road vertices.

    Kind regards,
    CitrioN
     
  31. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi CitrioN,

    Since you are already using v3.3 custom road shape features, it seems ideally you would want to make this work with the v3.3 Flex Connector.

    This should work well in the Unity editor. If this is not the case when creating the Flex Connector via API than that should be fixed. I will do some tests with 4 node road shapes.

    Best regards,
    Raoul
     
  32. CitrioN

    CitrioN

    Joined:
    Oct 6, 2016
    Posts:
    66
    Hello Raoul,

    the road shape with the flex connector does indeed work correctly via the API.

    Kind regards,
    CitrioN
     
    raoul likes this.
  33. roach_779

    roach_779

    Joined:
    Aug 2, 2012
    Posts:
    37
    Does anybody know why side objects, like bridges, not showing up in my scene? I have both the pro and demo package installed, and when I open Demo Scene v3.2+, all the assets are there. But my scene only have default roads available.
     
  34. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi roach_779,

    Was this scene/ road network created before looking at the v3.2+ demo scene?

    EasyRoads3D road type and side object presets are stored in the project folder. To avoid that this data is overwritten when importing the demo package, the demo package presets are separately stored in another asset /Assets/EasyRoads3D/ERDemoPresets

    There are two ways to add these presets to the project presets data.

    The easiest way is by opening "Demo Scene v3.2+", select the road network object and deselect it. This will update the project file with all presets part of the road network in the open scene. That is also how your own road type and side object presets will become available in other scenes.

    When creating a new road network, you will be asked if you want to import all available road types and side object presets.

    When indeed the road network in your scene was already created before opening the v3.2 demo scene, then look in the EasyRoads3D toolbar in the Inspector in General Settings > Road Types and in the Side Object Manager tab.

    For both there are button options respectively "Add Project Road Types" and "Add Project Side Objects". This will open a window with all available presets. They can all be imported or a selection can be imported.

    The other way to add these presets to the project is by pressing "Import Road Types" resp. "Import Side Objects" in the same Road Type and Side Object Manager sections. A window will appear. Look in the project folder for /Assets/EasyRoads3D/ERDemoPresets. Drag and drop this asset in the window. The same presets will appear, they can all be imported, or a selection can be imported.

    Let me know if you need further help with this.

    Raoul
     
  35. MrTimcakes

    MrTimcakes

    Joined:
    Jan 8, 2016
    Posts:
    11
    Hey,

    Average by Road Length is a step in the right direction. However, I can't control "start offset" if there's a checkpoint side object for the previous node, so the only way to alter the distance between them is with "Distance between objects" but that's shared for all instances of the side object not locally for each road marker.

    Perhaps side objects aren't the tool I should be using. I want to manually place checkpoints on my closed track for players to drive their vehicles through to score points. I thought side objects would be good because they'd spawn along the road path and I could adjust their X, Y to place them and keep the normal of the track at that point. Perhaps I need a script to store a list of checkpoints with their position along the track and their X offset, though this way if I ever alter the track it will mess up the locations of all checkpoints after that point as they'll be based off distance and not road node markers.
     
  36. roach_779

    roach_779

    Joined:
    Aug 2, 2012
    Posts:
    37
    It worked. Thanks!
     
    raoul likes this.
  37. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Tim,

    The suggestion was indeed a workaround. Side objects are generated along the road or road sections. It seems you are looking for a way to spawn single instances at specific positions.

    From your previous post I took it that there should only be one instance at the start. That will work when the side object will only be active on one marker after another, not on two consecutive active markers.

    But it is still not entirely clear how this will work because you mention that these checkpoint positions are based on distance, not on road node markers. So perhaps what you are looking for is possible through the side object system. Or are these distances not fixed or random? And are you more looking for a way to spawn these single objects just at very specific positions?

    You could indeed create your own "side object" script. The scripting API gives access to both marker positions and all spline points at the center and the left and right road side. The script can automatically run through callbacks so the spawned objects update after each road object update.

    Thanks,
    Raoul
     
  38. MrTimcakes

    MrTimcakes

    Joined:
    Jan 8, 2016
    Posts:
    11
    Hey,

    When I said about being placed by distance, I was evaluating if I made my own script to place them I assumed I'd store their distance along the road path. But I thought that would have the side effect of if I altered the shape of the road, that would alter the overall length of the road and so any checkpoints placed downstream would effectively be moved. I'd need some way to store a parent road marker to then add an offset for fine-tuning.

    Right now I'll place all checkpoints manually, but I do like the idea from the side object manager of auto-generating when the road bend threshold exceeds a certain value. Handy for automatically adding a checkpoint to apexes.

    As a side note, updating to Unity 2022.2.0f1 seems to have destroyed compatibility with ER3D . The custom inspectors don't render properly.
    Code (CSharp):
    1. Instance of ERRoadNetworkObjectEditor couldn't be created. The script class needs to derive from ScriptableObject and be placed in the Assets/Editor folder.
    EDIT: Reloading unity fixed this :)
     
  39. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Tim,

    Yes, if that is relevant here, the auto generate options for side objects based on rules might also be an option. This will generate the side object based on the set rules instead of marker position specific.

    Regarding the spoiler, indeed the custom Inspector should work fine in Unity 2022.2.0f1.

    But you may experience other issues in Unity 2022.2.0f1, especially scene view operations related.

    An update is ready and will soon be available on the Asset Store.

    Thanks,
    Raoul
     
  40. Adunato

    Adunato

    Joined:
    Nov 3, 2018
    Posts:
    28
    Hi @raoul,

    Still experimenting with InsertFlexConnector as part of v3.3.

    Overall it's sort of working but I'm not clear on how it's supposed to behave in relation to the modification of connected roads

    I invoke the method as follows:
    Code (CSharp):
    1. road1.InsertFlexConnector(road1MarkerPosition, road2, road1MarkerIndex);
    This is the structure of the roads before invoking InsertFlexConnector. road1 -> longer one, road2 -> shorter one

    upload_2022-12-14_14-22-6.png

    Below is the result. I can see that the longer road (road1 in the code snippet) has been split into two and the points connected to the intersection have been pushed to the sides, which makes sense. But the connected road (road2) has one of the makers removed which seems strange. Is this how this is supposed to work?

    upload_2022-12-14_14-23-48.png

    For clarity, the debug lines and numbers a bespoke debug overlay mapping the markers in each road in the network.
     
  41. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Adunato,

    Just in case:

    Code (csharp):
    1. road1.InsertFlexConnector(road1MarkerPosition, road2, road1MarkerIndex);
    public ERConnection InsertFlexConnector(Vector3 position, ERRoad road2, int markerIndex)

    Position is where the Flex Connector will be inserted, markerIndex is the marker index of road2 that should be attached to the Flex Connector. In your code road1MarkerPosition and road1MarkerIndex seems to point to road1.

    In any case, road markers of road2 that will be close to the Flex Connector will be removed. In your situation however the original marker 3 is removed which is at a safe distance from the inserted Flex Connector.

    I did a quick test with a 5 marker road object like in your example. I cannot recreate this. In my case road2 still counts 5 markers.

    One thing that does need optimization is actually marker positioning on road1. When the Flex Connector insert position is further away from the road1 markers, the nearest road 1 markers will be repositioned. In that case it is better to keep this marker at the same position. That will be part of the next v3.3 beta.

    Thanks,
    Raoul
     
  42. big_3

    big_3

    Joined:
    Apr 20, 2016
    Posts:
    86
    I just updated to Unity 2022.2.0f1 and ER3D has some issues for me.

    Will there be an updated version of v3.3 beta to support this new Unity version?

    Thanks
    Jus
     
  43. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello Jus,

    Please check my latest posts of earlier today.

    If it is urgent I can already send the update.

    Thanks,
    Raoul
     
  44. big_3

    big_3

    Joined:
    Apr 20, 2016
    Posts:
    86
    Hello Raoul,

    that would be great. Sent you an e-mail.

    Thanks
    Jus
     
  45. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hello Jus,

    I received the email and I just sent the v3.3 beta update for Unity 2022.2. Sometimes emails with this type of attachments do not arrive. In that case, let me know.

    Thanks,
    Raoul
     
  46. Adunato

    Adunato

    Joined:
    Nov 3, 2018
    Posts:
    28
    Hey @raoul,

    Thanks for the detailed answer, much appreciated.

    So, there were few issues at play most of which were my fault, sorry about that:
    - The missing marker turned out to be a bug on my end :oops:
    - Your clarification on the API did the trick for some obvious issues I was having in passing the wrong marker index. It may be obvious to everybody else but I think calling markerIndex road2MarkerIndex may be clearer.
    - Finally I was having issues with misplaced markers after InsertFlexConnector, I assume in reference to your last point above. I resolved this by saving the marker positions of road2 prior to the call and then restoring them right after.

    Now it all seems to work and it's looking great thanks to the beauty of flex connectors.
     
    raoul likes this.
  47. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi Adunato,

    Glad to hear this is working now.

    And thank you for the feedback, and this is still v3.3 beta, the docs will be updated with clear info.

    Thanks,
    Raoul
     
  48. roach_779

    roach_779

    Joined:
    Aug 2, 2012
    Posts:
    37
    How do I retain the road network but use finalize terrain function? I'm not finished building the road, but I would like to get some of the looks of the finalized terrain. Also, is there a way to get a hard left or right L shape turn?
     
  49. raoul

    raoul

    Joined:
    Jul 14, 2007
    Posts:
    6,612
    Hi roach_779,

    There are two road network states, "Edit Mode" and "Build Mode". The road network is created in "Edit Mode", the terrain is adjusted in "Build Mode", the middle mountain tab in the Inspector > Build Terrain(s).

    It is possible so switch back and forth between Edit Mode and Build Mode at any time.

    The "Finalize" option will remove all editor script from the road network. It is optional and should generally only be used just before the final project build and with the road network in "Build Mode".

    That can be done with the "Circular" Control Type. The control type can be set per road marker in the Marker Settings in the Inspector. The default control type is "Spline Controller".

    This is a typical marker setup for L type of turns.

    EasyRoads3D-Circular.jpg

    Thanks,
    Raoul
     
  50. marcell123455

    marcell123455

    Joined:
    Jun 18, 2014
    Posts:
    270
    Hi @raoul,

    I want to report a bug. I downloaded the lastest 3.3 beta to get used to it, however:

    I installed it in a clean 2020.3.33f1 project and imported all avaible road types at the first popup. I set the default road to "primary road". Now I place a loop (1st image) and connect the penultimate node(2nd Image). The resulting connection is only a T crossing and spits out errors.


    ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <695d1cc93cca45069c528c15c9fdd749>:0)
    EasyRoads3Dv3.OOOOCDCOCO.OOOCOCCQOQ (EasyRoads3Dv3.ERModularRoad roadScr, System.Collections.Generic.List`1[UnityEngine.Vector3]& tmpNodes, System.Collections.Generic.List`1[T] splineStrength, EasyRoads3Dv3.ERCrossingPrefabs prefabInstance, System.Int32 connectionSegment, UnityEngine.Vector3& connectionDir, UnityEngine.Vector3& lastForward, System.Int32 startEnd) (at <012a86992fee4231aaa148a7d401de14>:0)
    EasyRoads3Dv3.ERModularRoad.OQCDQDDQDO (System.Collections.Generic.List`1[T] markersExt, System.Single faceDist, System.Boolean ignorePrefabAlignment, System.Collections.Generic.List`1[System.Single]& tValues, System.Collections.Generic.List`1[System.Single]& markerDistances, System.Boolean forceAutoRotate, System.Collections.Generic.List`1[System.Single]& rotationArray, System.Collections.Generic.List`1[System.Single]& bendAngles) (at <012a86992fee4231aaa148a7d401de14>:0)
    EasyRoads3Dv3.ERModularRoad.OCQOCOQOCD (System.Boolean ignorePrefabAlignment, System.Boolean forceAutoRotate) (at <012a86992fee4231aaa148a7d401de14>:0)
    EasyRoads3Dv3.OOOOCDCOCO.OCOQQOQQCD (EasyRoads3Dv3.ERModularRoad scr, UnityEngine.Vector3 OOOOOOCQDC, EasyRoads3Dv3.ERCrossingPrefabs ODODCDDQDD, System.Int32 targetElement, System.Boolean reverse, System.Boolean uvReverse, System.Boolean forceAutoRotate) (at <012a86992fee4231aaa148a7d401de14>:0)
    EasyRoads3Dv3Editor.EROCOQQDOODCEditor.OCODQCDDCC (EasyRoads3Dv3.ERModularBase scr, EasyRoads3Dv3.ERCrossingPrefabs[] dynPrefabs, EasyRoads3Dv3.ERCrossingPrefabs[] custPrefabs, System.String[] dynPrefabStrings, System.String[] custPrefabStrings, EasyRoads3Dv3.ERModularRoad otherRoad, UnityEngine.Vector3 pos, System.Int32 el, System.Boolean rFlag, System.Int32& snapRoads, System.Int32& insertMarker, System.Boolean& noRoom) (at <6127f4a95bd343a99fe6a134925d8508>:0)
    EasyRoads3Dv3Editor.OQCDDQDOQQ.OOCQDOOOQD (EasyRoads3Dv3.ERModularBase scr, EasyRoads3Dv3.ERCrossingPrefabs[] dynPrefabs, EasyRoads3Dv3.ERCrossingPrefabs[] custPrefabs, System.String[] dynPrefabStrings, System.String[] custPrefabStrings, EasyRoads3Dv3.ERModularRoad otherRoad, UnityEngine.Vector3 pos, System.Int32 el, System.Boolean rFlag, System.Boolean sFlag, System.Int32& snapRoads, System.Int32& otherMarker, System.Boolean& noRoom) (at <6127f4a95bd343a99fe6a134925d8508>:0)
    EasyRoads3Dv3Editor.OOQQCODQCO.OnSceneGUI () (at <6127f4a95bd343a99fe6a134925d8508>:0)
    System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
    System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    UnityEditor.SceneView.CallOnSceneGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.SceneView.HandleSelectionAndOnSceneGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.SceneView.OnGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition, UnityEngine.Rect viewRect) (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.DockArea.DrawView (UnityEngine.Rect viewRect, UnityEngine.Rect dockAreaRect) (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.DockArea.OldOnGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEngine.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 parentTransform, UnityEngine.Rect clippingRect, System.Boolean isComputingLayout, UnityEngine.Rect layoutSize, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect clippingRect, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.SendEventToIMGUIRaw (UnityEngine.UIElements.EventBase evt, System.Boolean canAffectFocus, System.Boolean verifyBounds) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.SendEventToIMGUI (UnityEngine.UIElements.EventBase evt, System.Boolean canAffectFocus, System.Boolean verifyBounds) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.HandleEvent (UnityEngine.UIElements.EventBase evt) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.CallbackEventHandler.HandleEventAtTargetPhase (UnityEngine.UIElements.EventBase evt) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.MouseCaptureDispatchingStrategy.DispatchEvent (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcher.ApplyDispatchingStrategies (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel, System.Boolean imguiEventIsInitiallyUsed) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcher.ProcessEvent (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcher.ProcessEventQueue () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcher.OpenGate () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcherGate.Dispose () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcher.ProcessEvent (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.EventDispatcher.Dispatch (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel, UnityEngine.UIElements.DispatchMode dispatchMode) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.BaseVisualElementPanel.SendEvent (UnityEngine.UIElements.EventBase e, UnityEngine.UIElements.DispatchMode dispatchMode) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIElementsUtility.DoDispatch (UnityEngine.UIElements.BaseVisualElementPanel panel) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIElementsUtility.UnityEngine.UIElements.IUIElementsUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr, System.Boolean& eventHandled) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIEventRegistration.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIEventRegistration+<>c.<.cctor>b__1_2 (System.Int32 i, System.IntPtr ptr) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.GUIUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr, System.Boolean& result) (at <eae229a4813f4c22acf1ca5f77cc5794>:0)
    ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <695d1cc93cca45069c528c15c9fdd749>:0)
    EasyRoads3Dv3Editor.OOQQCODQCO.OnSceneGUI () (at <6127f4a95bd343a99fe6a134925d8508>:0)
    System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
    System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    UnityEditor.SceneView.CallOnSceneGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.SceneView.HandleSelectionAndOnSceneGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.SceneView.OnGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition, UnityEngine.Rect viewRect) (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.DockArea.DrawView (UnityEngine.Rect viewRect, UnityEngine.Rect dockAreaRect) (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.DockArea.OldOnGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEngine.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 parentTransform, UnityEngine.Rect clippingRect, System.Boolean isComputingLayout, UnityEngine.Rect layoutSize, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.GUIUtility:processEvent(Int32, IntPtr, Boolean&)
    GUI Error: You are pushing more GUIClips than you are popping. Make sure they are balanced.
    UnityEngine.GUIUtility:processEvent (int,intptr,bool&)
    ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <695d1cc93cca45069c528c15c9fdd749>:0)
    EasyRoads3Dv3Editor.OOQQCODQCO.OnSceneGUI () (at <6127f4a95bd343a99fe6a134925d8508>:0)
    System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
    System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <695d1cc93cca45069c528c15c9fdd749>:0)
    UnityEditor.SceneView.CallOnSceneGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.SceneView.HandleSelectionAndOnSceneGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.SceneView.OnGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition, UnityEngine.Rect viewRect) (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.DockArea.DrawView (UnityEngine.Rect viewRect, UnityEngine.Rect dockAreaRect) (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEditor.DockArea.OldOnGUI () (at <3371b3e2e5754acd87e600e068350da5>:0)
    UnityEngine.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 parentTransform, UnityEngine.Rect clippingRect, System.Boolean isComputingLayout, UnityEngine.Rect layoutSize, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect clippingRect, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.IMGUIContainer.DoIMGUIRepaint () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIR.RenderChainCommand.ExecuteNonDrawMesh (UnityEngine.UIElements.UIR.DrawParams drawParams, System.Single pixelsPerPoint, System.Exception& immediateException) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    Rethrow as ImmediateModeException
    UnityEngine.UIElements.UIR.RenderChain.Render () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIRRepaintUpdater.Update () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.VisualTreeUpdater.UpdateVisualTreePhase (UnityEngine.UIElements.VisualTreeUpdatePhase phase) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.Panel.UpdateForRepaint () (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.Panel.Repaint (UnityEngine.Event e) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIElementsUtility.DoDispatch (UnityEngine.UIElements.BaseVisualElementPanel panel) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIElementsUtility.UnityEngine.UIElements.IUIElementsUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr, System.Boolean& eventHandled) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIEventRegistration.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.UIElements.UIEventRegistration+<>c.<.cctor>b__1_2 (System.Int32 i, System.IntPtr ptr) (at <f79d3e63281a46a1a061d66eff76f483>:0)
    UnityEngine.GUIUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr, System.Boolean& result) (at <eae229a4813f4c22acf1ca5f77cc5794>:0)

    I hope this info was useful ;)