[Official] 2D Improvements

Hi all,
This is a bit of copy paste from the Particle System thread, please forgive that. The core message is the same, so I optimized my time a little bit :slight_smile:

We would like to discuss the direction of our 2D system with you. Rather than pre-seed this discussion with what’s on the roadmap, I want to be sure we don’t miss anything, so I want to start this discussion with a relatively blank roadmap.

To really help us though, like we have done in other threads, it REALLY helps for us to understand who you are and what your use-cases are to put you comments in context.

Who are you?
What kind of game are you trying to build or would like to build?
How does 2D fit into that? What use-cases do you have?
What are the GOOD things about the current 2D system you like?
What are the BAD things about the current 2D system you dislike?
How can we make it BETTER?

And specifically to the 2D system…

Do you like the Mecanim workflow for animation?
How do you spend most of your time working with our 2D features? Anything bogging you down?
When you learned to use our 2D system, what stumped you or had a steep learning curve?

Again, it’s super important we understand you and your use-case more than ā€œadd feature X now, do it!ā€ without context.

Thanks!
Brett

Who are you?
Part time freelancer - part time In-House artist for a large Webgames Company. Sometimes teacher at University of applied sciences.
Game and 3D Art enthusiast. I like games - either cutting edge or retro/indie. I grew up with the NES and Amiga500 and I started graphics with DPain IV on the Amiga. Also with a 3D program that took like 7 hours to render a 200 polygon robot :wink:

What kind of game are you trying to build or would like to build?
Specifically with the 2D System I’d love to build wither sidescrolling action games (run and gun - I’m not a primary fan of space shoot em ups despite that these are the focus for many beginner tutorials) or top-down actioney RPGish games like Zelda and such. :slight_smile:

I successfully started prototyping a top-down shooter I was a fan of in the 90s. So far I’d consider it a hobby-project though. :wink:

How does 2D fit into that? What use-cases do you have?
On a day to day basis my 2D work is mostly in the area of simply creating single rendered items or small anims - characters with few animations and mostly environment items. Mostly Isometric or Top down as well. Sometimes beauty-shots for backgrounds or environments.

What are the GOOD things about the current 2D system you like?
I like that it has the flexibility and workflow of Unity combined with a simpler more focused workspace.
The sprite-slicing and animation helpers are surely a real time- and pain-saver.
Physics for 2D games are really cool. Gotta love physics! :smile:
Also there’s unity’s native multi-platform export of course.

What are the BAD things about the current 2D system you dislike?
HUGE HUGE No-Go: Since 2D is locked in to X/Y and Navmesh is Locked in to X/Z there’s no way to use navmesh despite using a Pro license.
This also means that things like the ā€œlook atā€ script don’t use as expected (also rotated in the ā€œwrongā€ plane). and either need hack-workarounds or a new implementation.
Generally speaking I come from Scirra’s Contruct 2 for 2D games. Mainly because in the beginning I was scared of trying to script. Now I find that scripting enables me to do much more focused work because I don’t need to try and use building blocks for something they were not designed to. Construct is a really cool tool but I’d want something that feels like I can actually publish my game with it - for real.
Then again: Construct DOES have an out of the box building block solution for nearly every basic 2D setup you need to have - sidescroller, top down action or racing game, ā€œvintageā€ image effects like pixelation or screen flashes, navigation or even turret behaviour with predictive aiming, screen scrolling … It’s so nice to get an idea out of your system and onto the screen immediately.
I think Unity could really benefit if there were more of these ā€œbuilding blocksā€ available since (as much as I love Construct) unity is the more professional engine for an actual game that is created in order to be published.

Mecanim as a state-machine is surely powerful but I can’t really put my finger on it what it is that makes me confused using it every time I fire it up. Animation - especially with all the features Mecanim provides - is an ultra complex subject. I know that. Yet it feels so oddly disconnected to the rest of Unity’s workflow. I’m sorry that I can’t really give any improvement ideas, either. I can just tell that despite eventually getting it to be where I want it to be eventually the whole process feels … ā€œoffā€.

How can we make it BETTER?
As mentioned several times now: Top-Down Games and Navmesh. It’s an absolute no-go for me that a Pro Feature is useless because 2D was designed with apparently only sidescrollers in mind.

More building blocks - turret behaviour, player controller, screen scroller, 2D camera actions. At least have something there for prototyping and people scared of scripts. :wink:
As soon as these scripts don’t cut it any more Unity DOES provide a scripting interface to go on and dive deeper. And that’s absolutely good the way it is. Yet all these standard effects like paralax scrolling, pixelation etc… I want them. Out of the box. even if they are available - I don’t want to sift through various example projects and pick out the respective scripts from there.

Also: A sprite shader that works with Pixel-Lights! :slight_smile:

Tileable rects, ability to access generated mesh info (example for scrolling uvs). Reusable animations for sprites with the same rect structure.

I am work with Unity about 6 month. I make different prototypes. And I lack the vector rendering in 2D and support vector images format for import. And also Tile system for RTS or Tycoon games will big things i think)

A programmer, a member of a small indie studio. http://gamejam.ru

Its quite obvious - we have lots of 2D sprites in both projects :wink:

Like sprites shape-detection to cut off the transparancy and to pack in atlases tightly.
Like auto-packing atlases

We couldn’t use native 2D for our mobile citybuilder because we needed to use some tools for final atlases. For example, we’re using two ETC textures (RGB + alpha) for the android build. That is achieved using our custom shader and converting atlases from one PNG to two pictures (RGB and alpha-channel).

Also, is not quite obvious how to create some text/int link to a sprite. (For example, if I want ot create a downloadable bundle with sprite links but without sprite data and then to use sprites from the different bundle).

Text/id links will be usefull also for swapping atlases (different atlases for different resolutions).

I want some tools to manually post-process atlases (maybe some post-processing scripts?)
Also, changing native 2D sprite shader is not obvious right now (but quite managable after a while).

Mecanim looks a bit overpowered for easy animations right now, but it will be interesting to try.

Most of the time we spend writing a game code. So, 2D functionality works fine :wink:

Everything is ok. I’ve watched a pair videos on YouTube and get it.

Who are you?
Full time Multimedia Designer, spending my free time on making games. Working on a 2D game since the introduction of the 2D tools.

What kind of game are you trying to build or would like to build?
I’m working on a 2D top down (Zelda style) RPG.

How does 2D fit into that? What use-cases do you have?
I chose low resolution pixel art as the style for my game so I use sprites for everything (no mixing of low res pixel art with, high res fonts or GUI elements!)

What are the GOOD things about the current 2D system you like?

  • Sprite slicing and atlasing (+ keeping the drawcalls to a minimum)
  • Sorting layers
  • Addition of 2D physics

What are the BAD things about the current 2D system you dislike?
One thing I don’t like about the Sprite slicing is that the origin point of the sprite is at the bottom left. In most cases this doesn’t really matter but I have a sprite with all kinds of UI elements, including letters, numbers,… for the text in my game. I sliced all of those elements manually which is a bit of work. The problem occurs when I want to add more elements to the sprite and for that reason change the height of it. When doing that the previous slicing will offset… This wouldn’t be the case if the origin point was at the top.

As my game is in pixel art, I use sprite swapping for all animations. The problem with the current way of sprite swapping in animation is that the animation points to specific sprites. This means I have to make a separate animation for each walking direction of my character (8 in total) and when I have NPCs I will have to make 8 more for each of them, even though all of the animations are basically the same ā€œshow 4 frames in a row and repeatā€. For now I’m just thinking of writing my own SpriteAnimation system to take care of this but it would be nice to have it build into Unity :slight_smile:

Apart from that I’ve had some trouble getting my game 100% pixel perfect, I fixed this by adding small decimal values to the coordinates of sprites.

How can we make it BETTER?
It would be nice to have the things I mentioned above be fixed.

Something else I would love to see is a build in Tilemap system.

Last but not least it would be great to have access to a SpriteRenderer’s mesh data.

Do you like the Mecanim workflow for animation?
As I said earlier, Mecanim is a bit too ā€œadvancedā€ for the simple sprite swapping animations I want to do.

When you learned to use our 2D system, what stumped you or had a steep learning curve?
Didn’t have much problems with any of the 2D stuff so far :slight_smile:

The current 2D features are a nice start. I worked on 3D games in Unity in the past but when I decided I wanted to make a 2D game I was about to use Flash at first. Then came the announcement of the 2D features and after fiddling a bit with it I just stuck to Unity :wink: Really looking forward to see what more 2D stuff will be added in the future :smile:

Hi there:

Who are you?
A part time freelancer, working on several smaller projects

What kind of game are you trying to build or would like to build?
Casual 3D games

How does 2D fit into that? What use-cases do you have?
I am using 2D as a replacement for Unity’s broken GUI, in short: I code my own custom GUI with 2D

What are the GOOD things about the current 2D system you like?
Automatic slicing of sprites, I really like it

What are the BAD things about the current 2D system you dislike?
Just being able to use the standard sprite shader kind of sucks. Also, animating 2D with mecanim is somewhat tedious.

How can we make it BETTER?
Allow us to use shaders with pixel light support!

And specifically to the 2D system…
Do you like the Mecanim workflow for animation?
No, it does not feel very intuitive. But this might just be me.

How do you spend most of your time working with our 2D features? Anything bogging you down?
Making a simple animation with mecanim, animation controllers, etc, is too much for a 2D system

When you learned to use our 2D system, what stumped you or had a steep learning curve?
See above, in my opinion you shouldn’t use mecanim for animating 2D sprites, it feels too heavy and too complicated

Who are you?
I’m a game development student with 4+ years experience working with Unity.

What kind of game are you trying to build or would like to build?
Whatever I feel like

How does 2D fit into that? What use-cases do you have?
The Unity2D makes it a lot easier to prototype simple game mechanics.

What are the GOOD things about the current 2D system you like?
It works nearly the same as Unity3D which kept the workflow nearly identical.

What are the BAD things about the current 2D system you dislike?
The lack of code generated sprites. In a current project I’m creating a procedurally generated world, but that’s very difficult without the sprites. Right now I managed to hack around by using a mesh renderer to create shapes with 2D collisions.

I am a mostly solo Developer. I created my company, Grafos, in late 2010.
I have published a couple of educational titles on PC/Mac/iOS and Android.
I started with Blitz3D/Blitzmax in 2007 and moved to Unity 3 years ago.
I have been recently expanding to casual/indie titles. Even bigger dreams for the future :slight_smile:

I am currently making Fuzzy Bunny ,a game that I would best describe as a crossover
of Rainbow Islands, Doodle Jump and Street Surfer (an old C64 game I used to play as a kid).
It’ll be the first time I am going to try In-App purchasing, Ads and Free-To-Play.

Fits like a glove :wink:

It’s great, pretty straightforward, I like it a lot.

On Fuzzy Bunny I’d like to have an automatic resolution adjustment with many parameters (black screen, fixed Y, or fixedX axis).
On animation, it seems to me you can only animate the global position, or am I missing something. Currently, if I want I can loop the y localPosition Up and Down and at the same time move upwards, I have to rely on extra parent GameObjects to allocate each movement. It’s entirely possible I’m missing something obvious.

Also, I was developing a 2.5D game at one point and I wanted to use 2d colliders and perspective cameras. They didn’t seem to agree with each other, an automatic way to make the collider correct its position as 2d while keeping the depth and beautiful parallax of 3d scenes would be great (I am having trouble describing this, I hope I make sense)

By taking care of the issues I just mentioned :stuck_out_tongue:
Also, native support for ads, in-app purchasing, facebook, twitter, game centres and all these social cr… services on all platforms. Hmmm… those are not really connected to 2d systems, but in any case. most 2d games on mobile require this now.
And lower the price of Pro to match UE’s subscription… ooooooops… sorry, I couldn’t resist it :stuck_out_tongue:

Hello!

Who are you?
I’m a student working on a unity 2D project.

What kind of game are you trying to build or would like to build?
I’m currently working on an interactive video included 15 mini-games - AS3 games like.

How does 2D fit into that? What use-cases do you have?
It’s really more intuitive than Flash/AS3, create small games is very easier.

What are the GOOD things about the current 2D system you like?
Multiple sprites, 2D Colliders and rigidbodies!

What are the BAD things about the current 2D system you dislike?
Animating a spritesheet when the file is not 100% correct.
Using particle system in 2D is quite annoying!

How can we make it BETTER?
Make the animation system easier and improve sprite animations.

Do you like the Mecanim workflow for animation?
It’s really good but I feel that it’s not really user-friendly.

Freelancer game artist

Any 2D game

well :slight_smile:

Anything that have been done is good and a step forward

  • The timeline is not really effective right now; it is better than before to visualize things and somewhat to animate but there are still things very frustrating.
  • the sprite editor could be better and we can’t have a custom pivot point on single sprite currently.
  • the layer sorting could be more visible and with a better interface.
  • ho! one thing I currently HATE :slight_smile: is the scaling mode in the scene view : if we switch from simple scaling to ALT or SHIFT , it doesn’t revert it back to its original position so the sprite is moving and it’s really annoying!

Just look at ubisoft rayman engine :slight_smile:

  • need a multi-res support ( camera textures )
  • need a better font/gui support
  • adapt shuriken to the 2D workflow
  • the possibility to see at any time the colliders, the camera frame, things like that… would be great

It’s not bad but could be better :

  • Animating I guess? So anything better with the animation part would be great
  • mecanim

Who are you?
I’m a programmer at a small developer using Unity to create 3D/2D games and applications.

What kind of game are you trying to build or would like to build?
Both games and utilities that can mesh 3D and 2D assets together.

How does 2D fit into that? What use-cases do you have?
We’ve tried to use 2D to fit into the workflow for certain highlight and effects for our current 3D game. I have only used the 2D system lightly so I am not a pro at it.

What are the GOOD things about the current 2D system you like?
Tight Atlas Packing - I like the tight packing of atlases, and being able to create atlases for transparent areas that are the most efficient possible.

Atlas importing - Being able to bring in an already created atlas and the system being able to rect out the areas that are necessary automatically.

2D integration into the editor: I think that it’s nice that you have sprite import settings build into the texture importer.

What are the BAD things about the current 2D system you dislike? How can we make it BETTER?
Atlas resource management - I realize that you wanted to make the atlas behind the scenes, but I really feel that instead of changing every sprite to change compression settings (for example) is kind of the wrong approach. I’d rather just change it in one spot rather than the 50 spots in order to get the compression working a certain way. Have an atlas management window that allows us better access to each atlas and each sprite that is used on that atlas. Making changes at this level will automatically change each of the used sprite’s import settings.

AssetBundles - Last I heard, the way of including sprites independently is to always include the atlases in each asset bundle. I think an improvement would be to allow us to have virtual resources and a better defined resource system as part of the build process. Allowing us to choose what to include in the build and what to include into external bundles. This is more of a resource management issue and may be beyond the scope of the 2D system.

Tight Packing Algorithm - I get that the tight packing is a computed algorithm that is supposed to be more efficient than quads for fill-rate-limited system, but the mesh that is generated is often overly complex and inefficient. Something like a simple hex using 100 verts instead of 8. What I want is the best of both worlds. I want to have an ability to use tight packing, but be allowed to import geometry to use for a specific sprite when the automatic system is not efficient. Even better, would be a sprite vertex creator (similar to the 2D collider system) built-into the editor. This would allow us much more fine-grained control over the geometry that is generated by each sprite instead of relying on an often inefficient algorithm.

Sprite Layers - I understand you wanted to give an easy way to handle z-depth, but there is already a way in the engine to handle that (material render queues). I think you should make layers use a render queue that is automatic (but overridable explicitly) in the layer manager. Having the 2D sorting system outside of an already determined ordering system seems weird and unintuitive. It burned me on my current project until I found out that the 2D layer sorting was rendered after all of my 3D geometry regardless of the render queue of the shader/material I used on the sprites.

Edit:
Better Mip-Mapping Control - This is more of a general texture import issue, but I would like to have an import setting that allows us to better control mip-map bias on a global level and per-sprite/texture level.

As mentioned by others:
Multi-Resolution Support - An absolute must! Allow us to create a ā€œtextureā€ fidelity that allows us to set Low/Medium/High resolution atlases allowing us to target different devices with the same project easier.

Hello :slight_smile:

Who are you?
I’m an independent designer/programmer. I’ve shipped a handful of 2D games using Unity over the past 4 years-ish.

What kind of game are you trying to build or would like to build?
Exclusively 2D games for a wide range of platforms.

What are the GOOD things about the current 2D system you like?

  1. It’s ridiculously easy to import 2D art and get my sprites on screen.
  2. I love the tight sprite packing. It saves so much space compared to a rectangle-based sprite packer like TexturePacker.
  3. I love that the meshes Unity generates are optimized for fill rate.
  4. It’s great to be able to use a perspective camera and integrate with 3D content, if necessary.
  5. I don’t use rigid body physics, but the physics API makes it super easy to do my own collision checking, which allows me to script tight and responsive controls.

What are the BAD things about the current 2D system you dislike?

  1. There is no reasonable workflow for multi-resolution support! I know this is on the roadmap, but it seriously can’t come soon enough. It’s a huge limitation.
  2. Mecanim is super awkward and bloated for 2D animations. It’s not intuitive, and it’s a huge time sink trying to set it up right.
  3. As far as I know, there’s no way to flip a sprite horizontally or vertically without setting its scale to -1. This becomes a problem when colliders are attached and I don’t want the colliders to flip with the character.
  4. It’s a bit annoying having to set the sorting layer through script on non-2D renderers, like particle systems.

How can we make it BETTER?
It can be made better by addressing the points above :slight_smile: But please start by adding some kind of workflow for multi-resolution support! We need our 2D art looking crisp across all platforms – regardless of the screen resolution.

Do you like the Mecanim workflow for animation?
Not at all. As I said above, it feels unintuitive and bloated. It’s not designed with frame-by-frame sprite animations in mind. For instance, while 3D or skeletal animations can easily be blended, frame-by-frame animations cannot. I need the ability to transition to another animation on a specific frame (e.g., the walk animation can transition back to the idle animation when it’s on frame 1 out of 10). It’s also an incredibly time consuming task to set up all of the clips, states, and transitions.

Semi-related, I feel like I would prefer a behaviour tree structure rather than Mecanim’s simple state machine structure. That might make the transition setup more manageable.

How do you spend most of your time working with our 2D features? Anything bogging you down?
My games include a tonne of frame-by-frame animations, and I spend far too much time fiddling with things in Mecanim. It’s tedious.

When you learned to use our 2D system, what stumped you or had a steep learning curve?
The animation workflow.

Sorry for all of the Mecanim complaints :slight_smile: I’m sure it’s lovely for 3D content! :slight_smile:

Who are you?
Games developer at Glitche.rs

What kind of game are you trying to build or would like to build?
Top-down and side on 2d / 3d with 2d elements.

How does 2D fit into that? What use-cases do you have?
I use 2d for the bulk of the visuals, with 3d elements mixed in

What are the GOOD things about the current 2D system you like?
Very easy to setup, similar APIs as 3d system for the Physics

What are the BAD things about the current 2D system you dislike?
There’s a lot missing from the 2d Physics in unity, most importantly for me there is no IgnoreCollision in 2d, but there is in 3d.

Also if it could be set which axis the world uses for 2d, now it’s X,Y. If you could set the output axis to be X/Z but still use XY internally that would be great.

How can we make it BETTER?
See above.

Do you like the Mecanim workflow for animation?
Not used it, most animation is done with a few pieces that move by code.

How do you spend most of your time working with our 2D features? Anything bogging you down?
Mostly Physics2D and Sprites. Bogging me down is working around the limited Physics2D

When you learned to use our 2D system, what stumped you or had a steep learning curve?
It was a breeze from 3d to 2d, just add 2D on the end of the components and check the documentation for the rest

I’m a designer/artist in a small indie team. It’s just the two of us really, and we’ve been working with Unity about 2 years now. I’m speaking for both of us here.
We’re mainly interested in creating 2D games for the time being as we’re interested in creating cinematic adventures/platformers, and mobile games. Our experience with 2D unity has been mostly positive, we were really hyped to see Unity go in this direction. Our prior experience with 2D games boils down to Flash alone.

A couple of things we miss / dislike in the current setup is: Tiling of sprites (this is one of the more important things to us), a 2D character controller, a particle system native to 2D (or at the very least, the ability to sort particles through sorting layers without hacking).

The Mechanim system is very confusing. It’s very powerful but is not always apparent how to proceed with things, how to organize parents/children objects… and flipping animations often produces errors (seemingly randomly).

One pet peevee for me is having polygon colliders being applied automatically when I just want to get a basic pentagon to work with and customize it. So I’m either forced to create another empty game object for the collider or delete a ton of vertices (and end up with a ton of irremovable holes).

Who are you?
I started a small business with my brother called Battle Brothers. He’s responsible for the art and I’m the one who puts everything together in Unity. We just started, so we’re quite new to the whole game development scene. But we’re liking it so far! At my current job I’m the technical lead at a web development agency, where I lead a team of Ruby on Rails developers. So game development is a part time thing at the moment, but we’re trying to make it our primary job.

What kind of game are you trying to build or would like to build?
We want to focus on 2D games and build games designed around multiple players, co-op preferably (both top-down and side-scrolling). As brothers who like to game together when we’re visiting each other, we see there aren’t many games geared towards us anymore. So we want to build them ourselves. :wink:

We’re currently learning how to develop games and I’m primarily focused on Unity. While learning Unity’s 2D features, I created an asset called Acrocatic (http://battlebrothers.io/acrocatic/). It allows you to easily customise your own 2D platformer character. At the moment, we’re busy updating that asset to version 1.1. We’re loving all the positive reactions and feedback we’re getting! Great community. :slight_smile:

How does 2D fit into that? What use-cases do you have?
We’re quite inexperienced in the gaming scene, so we figured that we should first get to grips with 2D. So that’s why we’re focussing on 2D at the moment.

What are the GOOD things about the current 2D system you like?
I really like how easy it is to slice sprite sheets and put them into your scene. Also love all the 2D specific features in C#. I’ve tried several 2D game engines, but I like Unity the most. Being able to publish to a lot of different platforms is also very welcome. Also love the stuff you’ve announced for multiplayer games. We’re definitely keeping an eye on that!

What are the BAD things about the current 2D system you dislike?
I don’t really like the level editor for 2D games. Viewing the scene, dragging objects and scaling objects isn’t really intuitive for a 2D scene. It’s more geared towards a 3D scene. I think that it would be better if there was a different 2D view with other controls.
Also: snapping. You can snap things, but there isn’t really a grid or something like that.
It takes quite some time if you want to create a 2D level using prefabs. I like how Stencyl does this: select an objects and just hold down the mouse button on the grid to place multiple instances of that object. And it’s all perfectly aligned because of the grid.
It’s a bit of a drag to change sprites in code. I haven’t really found a nice and efficient way to change the sprite to something else in the Asset folder. If there is: I would love to know!

How can we make it BETTER?
Fixing the things listed above. :wink:
The animation system is quite complex for 2D games. I think it could be dumbed down a bit by default for 2D projects (but you can keep the advanced settings for the people who like it this way).
Easy way to use tile sets.
Make setting backgrounds and adding parallax backgrounds a bit easier.
2D in Unity seems to be more aimed to side-scrollers at the moment. I would love to see how top-down would work (with the right kind of layering like in 2D Zelda games). The Unity live training session from Mike helped a lot, but I believe it needs a bit more attention.

I really LOVE Unity’s 2D features. I hope my feedback will help you make it even better! Good luck. :slight_smile:

About me:

I focus almost exclusively on 2D game development. I come from a totally 2D background with the likes of Blitz Max - a primarily 2D game-development language which has no ā€˜editor’ or wysiwyg tools, and so am used to having to ā€˜do it yourself’ to make engines or particle systems or tilemaps etc. I’ve also seen Torque2D and a few others which attempt to remove some of the programming needs. I am a solo indie developer with little budget. I mostly experiment with out-of-the-box approaches to 2D, but have a strong awareness of the history of 2D game technologies and approaches dating back to the early 90’s. When working in 2D I generally am only working in 2D and not 3D, so anything 3D-like or which is there to ā€˜also support 3D’ tends to be noise that gets in the way.

About Unity:

The current 2D system is pretty good in terms of an optimized shader, asset import, atlases, some 2D physics stuff. But this is of course only the start. In my opinion mecanim is not in any way suitable for 2D game development. That it even needs some explaining goes to show you that it is not intuitive and is not easy to use. I expect many 2D developers are much more toward the beginner’s end of experience level, and things like putting together these funky charts which don’t seem to really represent what things actually LOOK LIKE in the game, makes it too far removed from intuition to be given the time of day. Whatever happened to immediate feedback, simple wysiwyg editing? I understand there are a number of elements to game like setting up the atlases and gameobjects and scripts and materials and sound and all that, but these things all seem so ā€˜separated out’ into their own windows and interfaces, rather than much more immediately represented within the view of the game. I know the scene view is meant to cater to this, but honestly the separation between how the scene view looks and how the game view looks is the first mistake, and the separation between the scene view/game view and the runtime experience is another mistake. What I want is to be able to be in ā€˜game time’, at a given point in a game, wherever that may be in the level, and be able to tweak any part of it right there any then. This could include changing graphics, moving objects around, changing colliders, setting movement paths, painting tilemaps, etc… What I want is much more of an artist’s workflow where the game is ā€˜painted live’. Unity is big and bulky and this forces all kinds of separations that hinder the intuitiveness of immediate feedback and in-game editing.

I am not sure what can be done differently with regards to mecanim. State machines seem to be a hot topic but surely there is a more intuitive way to like fast-forward/rewind ā€˜time’ within the game view… something more along the lines of smoothmoves or something, where you can just ā€˜visually’ adjust things instead of all these extra boxes and lines which really make no sense and are hard to relate to. SHOW ME WHAT IT LOOKS LIKE!

In terms of performance, one part of the 2D-engine puzzle is the transfer of texture data to the graphics card, plus the ability to modify texture data efficiently. This is currently not done well at all in Unity, at least not in Unity Free, and even in Pro it is much slower than it should be. There are many different 2D techniques which rely on this. For example, destructible landscape games (scorched earth, worms etc), games that allow you to paint in 2D (draw to texture etc), games that allow you to spool SMALL texture changes to a part of a larger texture etc. At the moment there are three main problems. Storage of a texture as Color32 is okay, although Alpha8 is stored as a float (what?). Where is a simple 1-byte format? Secondly, to get that texture data (modified by the cpu) into the graphics card you have to a) setpixels, even if not for the whole texture, b) upload the ENTIRE texture. This is bad. Anything bigger than maybe a 256 or 512 texture cannot be uploaded every frame with modifications at 60hz. On other platforms, for example in BlitzMax with basic OpenGL code, you can do like glTexSubImage2D() call to upload only a smaller portion of a texture into an existing texture, which is optimal for speed, AND the transfer goes directly from main memory to the texture. In my speed tests, Blitz runs several times faster than Unity at this simple operation. It could process a few 1024 textures per frame, fully updated, at 60hz, while Unity was dragging along at barely 1 512 texture at 60hz. What gives? It seems Unity tries to maintain its own internal memory copy of a texture which it has to transfer/convert the data to, then upload, which is silly. I know it’s a kind of cache, but we need to bypass that cache to stream uploads faster. When I say ā€˜upload this rect to the texture’, which btw should also support cutting a small part of an image from a bigger image in main memory (e.g. use a byte array with a row skip value and row length), it should then zap just that data into a possible larger texture in video ram with no other processing taking place. It can be so much faster than it is now.

The final part of this mess is rendertextures. OpenGL since like version 1 or so - over 10 years ago - has had support for rendering to a texture. It is currently a Pro-only feature, and understandably if Unity were to provide this in Unity Free it would open up some asset-store assets that substitute for missing Pro features… e.g. shadows, screen effects, etc. But even for just 2D, being able to render to a texture opens up a tonne more game opportunities. Destructible environments, painting, textures processed by shaders, post-processing, etc. Even if you limit it to like 1 or 2 render textures per project or something that would be so much better than nothing. I really think Unity Free should have at least some kind of rendertexture support. GrabPixels or whatever is far too slow especially on mobile devices. On my Ouya for example, grabbing the screen can only run at like 20fps, all by itself, and yet rendering to a texture and re-rendering that texture can run at 30-60fps. So it would boost speed in a lot of 2D games, bypassing the extra transfer of graphics data.

I think Unity definitely needs some way to do tile maps better… it’s okay to think of using lots of sprites aligned to a grid etc but there are more efficient ways to optimize for a grid. Also it must support animated tiles. And again, animation in general is just not obvious or intuitive in Unity. Some of the 2D tools have made it a bit easier to put together sets of frames etc with delays and whatever. Also Unity seems to already have hierarchical objects, which means joints, which means ā€˜bones’, so why isn’t it more obvious how you can use this to set up joint animations, with IK and so on? This all needs to be much more visual and much less button-clicky.

What’s the difference between a sprite and a particle? A sprite with an AI script attached is basically a particle. I’ve always thought these two things are basically the same. Not sure what I’m saying here… combine them? But how about being able to attach scripts to particles to treat them like they are mass-sprite systems, with 2d physics etc?

It would help to be able to save images more easily from Unity… save in png, jpeg, bmp formats. Also please provide LZMA compression library from scripts. Unity already uses it (e.g in webplayer). I want to be able to compress generic data (e.g. byte arrays, which may later represent procedural graphics).

Unity needs to have some kind of high-speed, adjustable, properly antialiased, fully editable vector graphics. By vector graphics I basically mean, shapes, which can be composed from triangles. I know a triangle is just a basic unit of graphics rendering and Unity already has triangle meshes, and triangles can be used to build more sophisticated shapes e.g. filled beziers, ellipses, rectangles etc… take RageSpline for example, it does much of this, but also it has things missing, not to mention some performance issues. It’s hard to get the antialiasing right when objects scale, it uses a lot of polygons, and all of those polygons get SAVED into the project taking up a lot of room, instead of simply storing the graphics primitives e.g. ā€˜draw a circle at 50,50 with 25 radius in red’ opcodes, which would be far smaller, faster to download, and can be turned into meshes at runtime. There are also shaders you can use to draw some geometric objects such as circles, with a single quad. I think this should be highly optimized and integrated into Unity for maximum performance and optimization. This would open up a tonne of additional 2D game opportunities - being able to ā€˜draw polygons’ as the primary artistic medium, etc. Also don’t forget about vertex animation.

A game-length timeline would be great, above and beyond animation clips.

I think you need to build in some kind of easy support for parallax… many 2D games use this technique maybe as a visual style nowadays but when you’re not doing 3D you want to be able to simply create the illusion of different distances moving at different speeds, tied to a single scroll position.

I would like there to also be some kind of standardized plug-in control systems… e.g. character controller for Sonic, character controller for megaman, etc… platformer, shootemup ship, etc… these should be easy to just choose/plugin and customize in some visual sort of way, instead of having to make mecanim trees or behavior trees or scripts or whatever… easily interact with the environment without having to worry about collisions and physics and all this stuff. Just plug it in, skin it, done.

Also in terms of scripting, IF it is necessary, for a 2D game and for beginners it would help to have a BASIC-derived scripting language with very simple english-like non-syntaxy language, no brackets or semi-colons or case-sensitivity etc. BlitzMax makes it so much easier to write game code. Take a leaf! Get rid of Boo and use something more like this instead.

The only other thing that comes to mind is lighting. 2D lighting. That means additional shaders for normal mapping at the very least, if not more sophisticated shaders. Shadows with automatic occluder calculations. Turning 2d images into 3d-lightable images (height maps?).

Oh, and easy isometric games.

1 Like

Who are you?
Freelance and indie game developer. Previously a full time web/mobile game developer, and Unity advocate.

What kind of game are you trying to build or would like to build?
I like taking Unity in any direction I can, but right now I’ve been working on a 2D adventure game where I’ve run into many issues with Unity’s current 2D implementation.

How does 2D fit into that? What use-cases do you have?
I’m using 2D for the sprites, and 3D for the environment. The entities only move along one axis (X and Z, when it should be X and Y), so the 2D physics could have played a big part in it, but don’t because I needed to use the NavMesh system.

What are the GOOD things about the current 2D system you like?

  • Setting up sprites is easy
  • Non-sprite-based animations are easy too (joint/rotation animations)
  • It’s a great start to what could be an awesome system

What are the BAD things about the current 2D system you dislike?

  • True, pixel perfect 2D is complicate, convoluted, and near impossible without major tweaks and workarounds. Even then, it’s still not true 2D, with pixel crawling and filtering. This is a major issue for 2D game developers.
  • No NavMesh support for X Y. This is a huge issue for me, and caused me to abandon using the 2D physics system altogether while working on my 2D adventure game.
  • Sprite animations are a major pain in the ass. Mecanim makes it infinitely more complicated than it needs to be.
  • No support for tiling, or auto-tiling. (Think RPG Maker) This would be a huge boon, but understandably unnecessary because it would be limiting.

How can we make it BETTER?
I would suggest adding either NavMesh support for X and Y, or a new NavMesh2D system altogether. Also, I’d suggest making sprite animations a lot easier. More like the direction of the old animation system, instead of using Mecanim. A state-machine-based animation system for sprites is overkill and a huge deterrent.

In my opinion, this is a great start for the system, but if you’re doing 2D, you should support a fully 2D mode as well. Literal screen-space 2D, pixel perfect, etc. The thing that deters users from using 2D (from what I’ve heard at least) is that it’s not true 2D. Doing a pixel-perfect sprite-based game in Unity is nearly impossible, and quite inefficient. If you provided a 2D canvas, as well as a 3D canvas, this could bridge the gap and make the entire 2D development experience desirable for people coming to Unity from other 2D engines.

Think Flash’s 2D layer on top of their 3D canvas. Just a thought. This would also really help with your GUI system that you guys have had so much issues in creating. You already somewhat support this with your current GUI system, but there is no canvas for it. Providing another scene view for just 2D would be an incredibly useful feature.

And specifically to the 2D system…

Do you like the Mecanim workflow for animation?
No, I hate it. I feel bad saying it, but it is the absolute worst part of Unity’s 2D system.

How do you spend most of your time working with our 2D features? Anything bogging you down?
Having to tailor it around the X,Z plane because of the NavMesh not supporting X,Y has been a big issue, but it was fairly easy to work around. That said, this completely breaks the 2D physics.

When you learned to use our 2D system, what stumped you or had a steep learning curve?
Animations, honestly. It’s not overly intuitive, and very daunting when you haven’t worked with it before.

I hope this helps provide some insight! Feel free to contact me through email if you have any questions! And thanks for taking the time to ask us our opinions on the subject. :slight_smile:

Simian Squared, purveyor of fine quirky entertainment.

2.5D for consoles.

Sprites are still used.
Billboards are used.
Animated fx, explosions.
UI stuff.

Can use animation events.
Can trim out empty space.

  • Rubbish atlas workflow
  • Horrid integration with Animation, requires a clip for everything. Would prefer collections in a central database. Tired of animation clip management.
  • Mecanim. Why? Why add workflow steps?
  • Can’t just swap a sprite on the same gameobject and use the same code. Can with 2D toolkit. For example 3 enemies, all same animation names, but different collection.
  • Animation timing is a chore. I have to use Constant, or I find I can’t make weapon/hat attachments stay in sync. Attach point system weak, have to use hierarchical animation.
  • When animating with constant, need to double last frame or timing is off (!)
  • Feels forced into the existing system rather than designed with it’s own system. This forcing stuff to fit is all well and good, but I’m not sure it’s right.
  • Copy 2D toolkit. It does everything right.
  • give us a way to spew out thousands of the same thing - think shuriken or such. Bullet hell. Loads of explosions. That sort of thing. Do they need to be gameobects? perhaps a SpriteList[ ] of such. Loads of stuff going on.

I don’t think it’s possible to agree with these two points more. These were my primary hurdles when working with the new 2D system.

1 Like