Search Unity

  1. Unity Asset Manager is now available in public beta. Try it out now and join the conversation here in the forums.
    Dismiss Notice

Feedback Project Tiny Feedback after 7DRL

Discussion in 'Project Tiny' started by djsell, Mar 18, 2021.

  1. djsell

    djsell

    Joined:
    Aug 29, 2013
    Posts:
    77
    I recently used Tiny in the 7DRL jam, and I wanted to share my thoughts.

    I didn't actually get as far as I wanted to during the jam and wanted to work on it a bit more before making this post, but I also wanted to get it out there while it's still fresh in my mind. So, the game isn't much of a game at the moment, but you can walk around and kill some crabs.

    Play here: https://dredd422.itch.io/tigras

    I recognize that some of this feedback may not be specific to Tiny and more towards Unity ECS itself.

    UI
    Tiny just added UI support, I thought I'd try it out.

    Canvas
    The lack of Canvas Scaler support makes it difficult to support different resolutions. This is made even worse by a desktop build and a wasm build behaving totally differently as a window is resized. When I was testing, I believe it almost behaved as if the wasm build was using the physical screen dimensions or something other than the gl canvas size.
    Related to this, something strange seems to be going on with dimensions or touch position relative to frame size when I was trying to add touch support. The same code that works fine in an android build does not work at all on mobile browser.

    I ended up working around the UI canvas problem by resizing the canvas myself to reference dimensions after Tiny's canvas sizing as well as updating the overlay camera fov. I never fixed the touch input because non-keyboard support wasn't really a goal for me.

    I did try out Screen Space Camera for canvas. I see why only SS Overlay is supported. SS Camera does not move with the camera. It's almost world space.

    Text
    In the Getting Started Guide, it states "Vertical and horizontal alignment are supported. Multi-line has limited support."
    Please change this to say Multi-line has no support. It's misleading otherwise. It's completely broken, and there is a forum post that correctly states that there is in fact no support.
    https://forum.unity.com/threads/tiny-text-vertical-line-offset-is-incorrect.1071665/#post-6926564

    In general, the sizing and positioning doesn't really match up with what you expect from how it looks in the editor.

    I ended up having to rewrite the text mesh generation code to support both alignment and multiline properly (without wrapping, currently) for my own needs.

    For editing the text at runtime, you would think you could create an authoring component, stick it on the Game Object with the TextMeshPro component, and expect to have your component share an entity with Tiny's text component. You would be wrong. It took me quite a while of debugging before diving into Tiny's source to find out what was going on. There I found this lovely note:
    So, a phantom child entity is created for the text with no apparent reference for your own component to use in order to get at it. This forces me to give the Game Object a unique name and use uiSys.GetEntityByUIName("UniqueName") when I'd really rather not.

    UI Image
    Using a sprite from an atlas did not work. It rendered a sprite for me. The wrong one.

    Rendering
    I like bgfx. I don't mind calling it directly. I wish you would open some of the stuff up more. I had to make some utility for myself to get at handles for shaders, meshes, textures.

    It also opens up the opportunity to use our own truly custom shaders rather than pseudo Tiny lit shaders.

    Conversion and Building
    I get the idea behind ConverterVersion. I understand why it is there. I understand why the entity cache exists. Please don't force me to use them. I have a small project where I'm trying to move fast. I have a tiny tiny scene with few objects with few prefabs where everything is spawned at runtime. Please oh please let me spend the extra 10 seconds of building to save minutes+ of debugging or finding the right systems to bump.
    Yes, there is a button to break the cache. Give me a checkbox to ignore it at all times so I don't have to go click that button.

    Why is the versioning such a problem? I like sharing code. You should like sharing code. If you make any shared code that is referenced by a converter, and you change said shared code, you now also have to manually go to every single converter using said shared code and make sure you bump them. Otherwise, things break. I'm a human. I forget. I miss bumping a converter. I lose hours trying to find why something isn't working.

    Bumped the version but forgot to save a subscene before building? Welp, now you're in a bad state, too.

    If you have an exception thrown during the conversion process, following builds will fail to work, regardless of the bug being fixed.

    How do I disable a conversion system? I want to use Sprite Renderer for authoring my own Sprite Renderer Component. Unfortunately, Tiny.UI requires Tiny.2D which also converts the Sprite Renderer.

    At one point, I restructured my code and moved around the assemblies that different code lives in. Afterwards, the game broke or wasn't working as expected. I forget. I couldn't figure out what was going on, broke cache, etc. Nothing was converting properly. Then I restarted Unity. It magically worked. I think something is broken when conversion moves between assemblies?

    I couldn't get VS code's debugger to work with debugging the conversion worker process to debug my code. Logging with Debug.Log doesn't work for console logging. Throwing an exception does work for console logging, so I do that. Please at least make Debug.Log work.

    Multithreading
    It's broken. It's also unsupported. Better off not even mentioning it as an option anywhere. A lot of rendering begins to flicker. I think this is partially due to some of the rendering code using bgfx.set_state rather than bgfx.encoder_set_state.

    I attempted to make a multi frame running job. It didn't work. The frame forced completion on it. I could have done something wrong, though. I'd have to test if the same thing I did works in hybrid.

    Debugging
    Debug.Log(obj) does not work. Debug.Log(obj.ToString()) or (surprisingly) Debug.Log($"{obj}") does work. Please just defer to one of those.

    Documentation
    It's a little rough. Not just Tiny, ECS as well. I spend a loooot of time in source (which I'm happy to have access to), especially Tiny's.

    Sorry for the wall of text. Forgive typos and rambling.
    I know there seems to be a lot of negative feedback there, but I'm the type of person that gets more passionate over what held me back rather than what just worked. Overall, I do enjoy working with Tiny and ECS. It's super fast to load, near "instant," even on my mobile browser. Thousands, even tens of thousands, of procedurally generated tiles in no time at all. I also much prefer DOD over OOP.
     
  2. AbdulAlgharbi

    AbdulAlgharbi

    Unity Technologies

    Joined:
    Jul 27, 2018
    Posts:
    319
    Thanks a lot for sharing the feedback :)
     
    djsell likes this.