Hey, sorry for not replying earlier but I completely missed your comments. Next time you might want to reach me on Discord as I get notified much quicker there.
Good job on making it work for you though!
Hey, did you go through the tutorial in the docs? https://ondrejnepozitek.github.io/Edgar-Unity/docs/examples/enter-the-gungeon/
Hey, I would like to port the asset to Godot at some point, but I’m not sure about the current asset ecosystem and whether users are willing to pay for assets. I’m still waiting for the official Godot asset store to be released. Unfortunally, the efforts would be probably too big for me to port it and maintain it just for fun.
Do you have any specific requirements for this? What’s your goal? One approach that is sometimes useful is to manually mark places where it’s valid to spawn something. You can use empty game objects to mark suitable places and then later pick some of these places and spawn some decorations/enemies there. That way, you have complete control over where things can spawn and you can also randomize. The downsize is that you have to mark these positions manually when creating room templates.
Hey, I’m not sure what center of a room means here because rooms can have various shapes so it might be harder to compute the center. But what you can do is, for example, get all the floor tiles that are in the room and you can spawn something on them. If you wanted to do that, you’d have to create a post-processing task which gets an instance of the generated level. From there, you can get a list of all the rooms in the level (represented by the RoomInstanceGrid2D class). Inside that, you have the RoomTemplateInstance property which is a reference to the prefab from which the room was made. There you can find the Floor tilemap and get all the tiles inside it. You can use these floor tile positions as a base for your spawn behaviour.
Does that help?
Hello! If I understand your use case correctly, you are randomly picking a random Input setup class and you want to get the computed level description. As this is not a mainstream use case, I would propose the following solution. Instead of using the DungeonGeneratorInputBaseGrid2D
class directly, make a child class instead, something like MyCustomInputBaseGrid2D
and on this class, you can add a custom public MyGetLevelDescription()
method that calls the protected method. Then, in your RiftGeneratorInputSetup
, instead of referencing DungeonGeneratorInputBaseGrid2D
, you would reference MyCustomInputBaseGrid2D
so that you could call MyGetLevelDescription()
directly.
Let me know if it helps.
Hello and sorry for the unpleasant surprise! Last week, I finally decided to get rid of the alpha/beta status of Edgar and released an official “2.0.0” version, and also was able to release it on the Unity Asset store.
The good news is that right now, the asset is in a “new releases” sale on the Unity Asset Store for $20, you can find it here.
Let me know if that works for you!
Sure, look at this docs page: https://ondrejnepozitek.github.io/Edgar-Unity/docs/generators/dungeon-generator/#call-the-generator-from-a-script
And you can also change any of the properties that are exposed in the inspector.
Hello! I think that the problem might be caused by the fact that tilemaps are merged into a set of large shared tilemaps after a level is generated. So if you add some custom components to your room template tilemaps, they’ll be lost after you generate a level. Please take a look at this docs page. You can use the FromExample
mode to tell the generator which tilemap structure you want.
Hello, I think that what you’re observing is not a bug within Edgar, but maybe you’re expecting the generated level to have some properties that it doesn’t have. Please check that the layermask is correctly configured after you generate a level. Internally, Edgar uses only built-in Unity tilemaps so you should get the same results as if you prepare a replica of a simple generated level in your test environment. You can also generate a single Edgar level directly in the Editor (not in Play mode) and see what are the differences between this level and your test environment.
Unfortunately, I don’t have any experience with raycasts in Unity so I don’t know about any specific “gotchas” that may be the cause of your problem.
Hello and thanks for your support!
And yes, it’s possible to have unique rooms. There are basically two possible approaches:
Good!
It should be relatively easy to implement the random choice of level graphs if you use custom inputs as described here: https://ondrejnepozitek.github.io/Edgar-Unity/docs/generators/custom-input . But it’s also just a few minutes of coding for me, so I can make it for you if you want.
It seems like the generator thinks that there is a room template without any tiles. Unfortunately, the exception doesn’t contain the room template name, which I should fix in the future.
However, when you open a room template prefab, you should see a status panel in the top-left corner saying whether the room template is valid or not (if you don’t see the status panel, make sure there is the Room Template Settings component attached and that you allow gizmos from that component). If the room template is not valid, there should also be a red warning in the Room Template Settings component. So you should be able to find the wrong room template quite easily.
Let me know if you need any additional help!
Hello, I don’t think that it’s easily possible to save a scene during runtime (not just in Edgar but in Unity in general). So I think your best option is to just freeze the current level (stop enemy movement, etc.) and hide it, then show (or additively load) the challenge level and when it’s completed, destroy the challenge level and unfreeze/show the original level.
For example, if you had the whole level inside a single game object, you could probably just disable it for a while, show another game object with the challenge level, and then go back to the original level.
But I don’t have any personal experience with this.
Is it possible that you’re adding/editing files in the Edgar Examples folder and the package is somehow not included there? If you’re doing that, it’s not a good practice because when I release a new version of the generator, you may lose some of your custom changes if your files are located inside the Edgar folder. You should create your own scene outside of the Edgar folder and add scripts there.
So I’ve done a fair bit of research and it seems like the main problem is with shadows in enclosed areas (which the dungeon is). You can see a discussion here: https://forum.unity.com/threads/script-for-generating-shadowcaster2ds-for-tilemaps.906767/#post-7220347 . And as far as I know, these people do not have a working solution for this. However, someone from Unity replied there that in Unity 2021.2 it should be possible to access collider shape primitives and that it may be easier to fix these problems. I also tried working on my own solution but it’d require quite a lot of polishing and would also probably become obsolete soon as 2021.2 is already in its beta stage. So I’d probably recommend waiting for the new version of Unity where it should be easier to automatically generate the shadow caster shapes.
The first error is because of a missing namespace (“using System.Linq;” I think). I recommend using an IDE that can autofill namespace automatically. I’m using Visual Studio (which also has a free version available) but I think you may be able to achieve similar results vs Visual Studio Code.
The second error is probably also related to a missing namespace (or a package in your project?).
Hello, unfortunately, I have no experience with 2d lights and shadow casters in Unity. But maybe one thing that could help would be to not have these shadow casters attached to the Wall tilemap in individual room templates but rather have them attached to the shared tilemaps where all the room templates are merged into.
After a level is generated, I find all the tiles in individual room templates and combine them into a set of shared tilemap layers. That means that walls from all room templates are merged into a single large tilemap layer. What I propose is to not add shadow casters to walls in room templates but rather add them to the shared tilemaps where corridor connections are already processed. You can first try that manually: generated a level and then inspect the game object in the scene hierarchy, find the shared Walls tilemap layer and add the shadow casters.
I’m not sure how much experience with Edgar you have so feel free to ask additional questions. I may also try these shadow casters myself if you give me some additional instructions on how to do that.
I tried it and it worked. You have to make sure that you’re editing the correct Renderer2D.cs file. The location of the file on my system was “Project root\Library\PackageCache\com.unity.render-pipelines.universal@8.2.0\Runtime\2D”. When you paste the snippet to that file, try to add some debug message to that function to make sure that the Setup function is really called. Then I followed the instructions. I added the Fog of War URP feature to the Forward Renderer and from there I assigned is to the Renderer Features field of the 2D renderer and it worked.
Thanks for your clarification. The problem is that the 2D renderer doesn’t support scriptable render passes which are required for the Fog of War effect to work. You can see a forum thread regarding this issue here - https://forum.unity.com/threads/urp-2d-renderer-custom-feature.778946/. It was created in 2019 and only a month ago someone from Unity replied that “The work on this has officially started.” Even though I have no experience with the 2D renderer, I think that it should be easy to add support for the Fog of War effect once they release a version with custom render passes.
As far as I know, you should be able to use 3D lights in a 2D project without any big problems. From what I can tell, the 2D lights are better optimized for 2D games than 3D lights and they also come with some additional features. But there are people using Edgar with URP, the Forward Renderer and 3D lights and it seems like it works for them.
Also, I would not recommend you to replicate the FOW effect yourself. First, there’s that problem with not supported custom render passes. Second, I spent quite a lot of time on that and it requires you to know some internals of Edgar to do that properly.
Hey! I’m glad you like the asset.
I’m not sure I understand what exactly are you trying to achieve. As far as I know, the fog can work with 2D lighting. Can you please provide some more details? Are you using the builtin render pipeline or LWRP/URP? Which Unity version do you use? Can you show me an illustration of what you want to achieve and what is the current behaviour?