Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - ArenMook

Pages: 1 ... 7 8 [9] 10
NGUI 3 Support / Interesting year...
« on: October 25, 2012, 01:52:44 AM »
What an interesting year this has been… In November last year I left my full-time job because I wanted to take some time off from the exploitative environment of corporate-driven game development. My plan was simple -- spend a year working on a game, living off my savings, recovering my "mojo" in the process.


My first order of business was creating a simple UI system as I was not happy with the UI solutions present in the Unity engine at the time. After about 3 weeks of development, NGUI was born and released in early December.

It was very simple at first -- exactly what I was aiming to create. It was a tool I made for myself -- for what I needed and nothing more. Releasing it on the Asset Store was mostly an afterthought because I thought that if I find it useful, maybe a few others will as well. The initial reception was surprisingly positive, but everyone who tried NGUI inevitably wanted more: more widgets, more tools, more example videos, more tutorials… and so I, inspired as I was by the fact that people actually liked it, was happy to oblige.

Fast forward a month -- NGUI was now earning me more than my previous job. I was thrilled -- who wouldn't be -- and kept working on it. Sure, it delayed my original plan of working on a game with a friend, but it was fun and profitable, so I didn't mind. A month later NGUI reached the #1 spot on the Asset Store, and two days later it was finally pirated (I'm surprised it took this long!), resulting in the first day of the 4-figure daily income. Weird, huh? I soon learned of two different people who pirated NGUI, but liked it enough to actually go legit and pick up a paid copy. Now that… was awesome.

The whole "piracy is good for business" thing gave me an idea of releasing a free version of NGUI for people who just wanted to try it out without having to pay for it upfront. It was a risk, with a potential of blowing up in my face. After all, why would people pay for it if they can just get it for free? Surprisingly, the sales were not affected at all, and varied from the previous week by only about 0.5%. To make this even better for other developers I decided to also release a version of NGUI that can be included freely with other packages, opening up NGUI to be used in other people's Asset Store-bound work, free of charge. While there was no immediate effect on sales, I'm certain it proved to be a positive force in the long run.

Once NGUI was feature-complete, roughly 3-4 months after its release, I was finally able to go back to my original plan of working on a game. The idea of which game to make was changed though -- from an open-space based exploration game to a fast-paced naval combat game instead. This change was due to the naval game's smaller scope. In retrospect, I probably should have stuck to my original idea, as it has a broader appeal and a more welcoming target audience… but that's not how I saw it back then, and so Windward was born.


Now, it's worth mentioning that by that time NGUI was earning me more than 3 times the amount I was getting paid at my full-time job, and all I had to do was keep an eye on the forums and answer questions -- something that was taking roughly 2-3 hours a day, giving me the rest of the time to work on Windward… and work I did -- 100 hours a week for 7 months straight.

Now, some of you may think -- "that's insane!" -- but it really wasn't. To me it certainly didn't feel like work -- it felt more like a hobby. I was doing what I wanted, working from home on a project I enjoyed, all the while earning a steady income from a side-project that I maintained alongside. Dream come true, right? Well, not exactly.

Unfortunately the more I focused on Windward, the more I started to resent having to support NGUI. After all, it was never supposed to eat up my time and attention, and some of the more frequent requests people wanted -- such as a built-in font solution and the depth / Z issue fix was out of my hands. The problem was in Unity, and I had no contacts within it that would help me fix the problems. Plus, I was keenly aware of the fact that Unity were working on a better UI system themselves, so NGUI always felt to me like a product that was destined to meet its end sooner or later -- the end that seemingly kept getting delayed, which frustrated me more.

I was also sincerely hoping that Windward would get a following of players, a community, and less importantly -- start paying the bills roughly 6 months into its development. Unfortunately, that never came to pass. In the first 7 months, Windward sold 68 copies of the game, even though it was featured on an assortment of game-related news sites. By that point I had hired two others to help me work on it, so it was costing me a good $2800 a week, not including my own time, which was obviously considerable.


Understandably, I was growing increasingly concerned about its future. The game itself was pretty solid. It had multiplayer, a variety of ships and maps to play with, equipment, talent progression, a built-in IRC chat… it was even playable freely throughout its lifetime. And yet, it never succeeded in drawing people in or establishing a community of more than a pair of players at any given time. At the end of its 7th month of development I was tempted to call it: it simply didn't seem worth working on it anymore.

In the end, after 8 months of development and as of this writing, I have sunk about $71,000 into its development, not including my own time, and have sold around 100 copies at $7-$10 each, earning me roughly $800, with a final net loss of about $70,000.

Meanwhile, NGUI was still earning me 3 times of my previous job's pay… 11 months after its initial release.

Looking back at the stats (which I've tracked daily), even the simple Game Starter Kits that I've put up on the Asset Store over a year ago, and spent roughly 2 weeks of my time on, have been pulling in about $700 to $1500 a month. That's a gain of roughly $13,000 for something I created over a year ago and barely spent any time on… versus a loss of $70,000 for 7 months of my time working 100 hours a week.

Needless to say, after going over all the stats and seeing the quiet reception I got on Steam Greenlight and Desura, it was not that difficult of a choice for me to put it on hold and work on something else.


Curiously enough, around the same time I was mulling over what to do with Windward last month I happened to get an email from Steffen over at Unity. He was curious what my plans are and if I'd be interested in making a change. At first I just chuckled at it -- after all, Unity can't possibly pay me what I already make just supporting NGUI, let alone what I can make if I was to focus on making more game kits and other useful packages. But… I figured, why not, let's meet and talk about it. So we did.

Originally my stance was neutral -- there was no reason to work for "the man" again. As I kept thinking about it more however, I realized that I simply wasn't happy with how things were -- both with NGUI, and with Windward. Windward obviously wasn't working out, and with NGUI I had to create a lot of "hacks" to work around Unity's limitations -- such as checking transform position / rotation / scale changes every update for every single widget. These kind of hacks negatively affected performance and resulted in a UI that was slower than it could have been. Then there were feature requests that I simply couldn't address, such as unification of Z and Depth properties that were causing frustration for users working with multiple atlases.

In the end, my decision came down to one simple question: was I happy with how I left NGUI, or can I do better? The answer was the latter. No, I was not happy, and I most certainly can do better, given the low-level access to the engine. Working for Unity I would have that access and more.

And so I've accepted their offer. I start on November 1st.

It certainly has been an interesting year…

NGUI 3 Support / Limited support October 4th-12th
« on: October 03, 2012, 08:17:35 PM »
More flying around, yay me. -_-

I'll be in Shanghai and Beijing, so please be aware that support will be limited.

NGUI 3 Support / Adjusting depth does nothing! Why?
« on: October 01, 2012, 04:55:59 PM »
Since it's obvious that people don't read the FAQ, I've decided to make a separate sticky since this question gets asked

Adjusting Depth on one widget doesn't seem to move it forward in front of another! Why?
"Depth" property is used to determine the drawing order of the widgets within the same panel that use the same atlas. If you are using different atlases or labels using a dynamic font, bring the widgets forward on the transform's Z, moving them closer to the camera (-Z). If you are using different panels, adjust the transform of the panel you want to bring in front to a lower negative Z value (-Z). I highly recommend sticking to one atlas if you can manage it, it will make your life significantly easier.

Technical Explanation:

Normally Unity sorts everything by transform's Z coordinate. Objects closer to the camera (lower Z value) will cover objects that are farther away (higher Z value). This works fine when the UI is perfectly flat and is using an orthographic camera (read: it's a 2D UI). For 3D UIs, however, turning the window even slightly completely changes the distance to the widgets, and makes this approach completely unsuitable. This is why "Depth" was invented: it's a fixed value that stays constant, regardless of the transform. Unfortunately there is no way to make different draw calls respect this value (different panel / atlas = different draw call), so with multiple atlases or panels, Z still needs to be used.

More info:

NGUI 3 Support / Limited support September 17-20
« on: September 17, 2012, 04:34:53 AM »
Just a quick note, the support from Monday September 17th to Thursday September 20th is going to be limited as I'm going to be in Copenhagen. I'll still hop online to help you guys out and answer posts, but I won't be around as often as usual.

Other Packages / Tasharen Fog of War
« on: August 07, 2012, 10:16:31 PM »

Ever wanted high-quality smooth fog of war for your strategy game? How about a line-of-sight revealing system for a heist game like Monaco? Well, now you can have it in 3 simple steps:
  • Drag & drop the Fog of War prefab into your scene. You can find this prefab in Assets/Fog of War/FoW folder.
  • Add FOWEffect script to your Main Camera. Make sure it references the "Image Effects/Fog of War" shader.
  • Add FOWRevealer script to one or more game objects in your scene. It's best to add it to a game object located at around the unit's "eye level" in order for the fog of war to be accurate.

What makes it great?
  • It's fast. If you already render to depth (for example using Tasharen Water), then you likely won't even notice a performance drop. In fact, with proper use of FOWRenderers hiding renderers hidden by fog you can actually increase performance.
  • All line-of-sight calculations are done on a separate thread, so they don't affect your game's performance.
  • It's smooth -- and level of smoothness also doesn't affect performance as it's done on another thread.
  • You can specify how often it updates and how quickly it fades in and out, and the two work independently. Updating only twice per second will still give you perfectly smooth fading results.
  • You can easily check to see if a point is visible, explored, or not.
  • You can optimize the worker thread's performance even further by specifying that certain line-of-sight checks should only be performed once (stationary object).
  • You get a script that can automatically hide all renderers under the game object that's hidden from view (FOWRenderers).

Play the Demo:

Other Packages / Tasharen Water
« on: August 06, 2012, 12:51:29 AM »
By popular demand, the water used in Windward is now available as a stand-alone package.

View the Demo

  • Affected by any number lights properly
  • Has proper reflections and object shadows underneath
  • Has configurable deep and shallow water colors
  • Makes it possible to hide terrain edges
  • Works in the editor scene view properly
  • Faster than Unity's water

Material Properties
  • Normal Map has the normal map's XYZ in RGB channels and the foam texture in the alpha channel.
  • Reflection texture is created automatically, and is used in medium quality water and higher.
  • Skybox is used to "fake" reflection, and is used in low quality water.
  • Shallow Color controls the color of the water considered to be "shallow".
  • Deep Color controls the color of the water where the water is as deep as it can get.
  • Specular color controls the strength of the specular highlights.
  • Shininess controls how shiny your water is going to be.
  • Tiling controls the tiling of the normal map's texture.
  • Reflection Tint controls how bright the reflection is going to be.
  • Inverse Alpha, Depth and Color ranges control the foam and depth of the water.

Script Properties
  • Quality controls the quality of the water. The lower the quality, the higher the performance.
  • High Reflection Mask controls what will be reflected at High and Uber quality levels.
  • Medium Reflection Mask controls what will be reflected at the Medium quality level.
  • Keep Under Camera option will keep the water underneath the camera at all times. This is useful if you don't want to place the water manually. It will always travel with the main camera (and thus -- the player), remaining at the height of 0.

Summary: Messages pop up, scroll up, fade out. If you use NGUI, you might find this extension useful.

Other Packages / NGUI: HUD Text
« on: July 11, 2012, 01:31:33 PM »
What is it?

In the simplest form, it's like Scrolling Combat Text from World of Warcraft. Numbers pop up, fly up. Unlike SCT, the numbers get automatically added up (for up to one second), and positives and negatives get treated differently, so you can basically show DPS and HPS separately without any additional work on your end.

You can also use it to display text -- such as chat messages -- right above your character's heads. You can even tell messages to stay on the screen for X number of seconds before floating up and fading.

You can (of course) modify the curves for how the messages disappear. This very system is used in Windward.

Examples that come with the package

Video Tutorials (adding unit health bars to go with HUDText)

  • Attach the HUDText script to a game object underneath your UIRoot and set the font it should use.
  • To make it follow an object drawn with another camera, attach UIFollowTarget to the same object and set its target.
  • From code, use HUDText's Add() function to add new floating text entries.
You can also tweak the splines on the HUDText script, changing the motion of the text as you see fit.

Example Usage
  1. HUDText hudText = GetComponent<HUDText>();
  3. // This will show damage of 123 in red
  4. hudText.Add(-123f,, 0f);
  6. // This will show "Hello World!" and make it stay on the screen for 1 second before moving
  7. hudText.Add("Hello World!", Color.white, 1f);
Have questions? Please ask and I'll improve the documentation accordingly.

Screenshot of it used in Windward

Other Packages / Consolidated the forums...
« on: July 11, 2012, 01:28:54 PM »
Since Space Game and Ship Game starter kit questions seemed to get generally asked on the Unity forums, I've decided to consolidate the sections into one. HUD Text support will also be here.

NGUI 3 Support / Away until June 17th
« on: June 09, 2012, 05:56:30 PM »
Vacation time and whatnot... See below:

See you guys in a week!

NGUI 3 Support / Email reply:
« on: May 21, 2012, 11:42:45 AM »
When getting in touch with me, always use the forum first (unless it's a private matter). Quite frequently the emails I send out bounce. For example this one:

I am a single person game designer for Android.  I can't have the huge
overhead from unity UI and love the ease of your product and tools
that go with it. However when I build a app to android I get UIs that
flash or flicker so I looked at forums and read your docs only to find
a little snippets saying to put all UIs on their own depth.  I use the
depth for most everything unless I have a separate UI then I use z
axis.  I cannot get it to work for an app as simple a one text and no
objects in the scene without flickering. I am using the free version
to decide if I want to buy the full version. Is this designed into the
free version to keep people from using it as a full or am I doing
something wrong. I have unity 3.5.2f and a HTC incredible phone. Thank
you for any assistance.

My response:

I believe the free version doesn't work on mobiles correctly. It's quite old. There will be an updated version eventually (possibly even later this week), but for the time being only the full version will work properly and is actually supported.

NGUI 3 Support / NGUI: Packed Font (Video Tutorial)
« on: May 16, 2012, 09:14:21 PM »
Explanation of the feature added in 2.0.6 -- the ability to use channel-packed fonts.

NGUI 3 Support / NGUI: Symbols & Emoticons (Video tutorial)
« on: May 15, 2012, 03:42:01 PM »
This feature was added in 2.0.5:

NGUI 3 Support / About 2.0.4c's UIPanel.widgetsAreStatic property
« on: May 03, 2012, 08:03:29 PM »
Figured I'm gonna have to explain this one... If you want to boost performance on mobile devices, you can now mark your panels as static using a new checkbox I've added. This means that you expect that the panel's widgets' transform is not going to change (ie: you will not move / rotate / scale them). If the panel is marked as static, it will not check to see if its contents have moved every frame, resulting in better framerate, but breaking some functionality such as scroll bars and highlighting.

I've updated the scroll view example to show how it's used. There most panels have this set to 'true', since they don't move. Note that moving the panel itself doesn't count as moving widgets, so it will work fine regardless of the state of "widgetsAreStatic".

This option is especially useful for scroll view contents on mobile platforms. If you have a long list of widgets under a UIDraggablePanel that you want to scroll through, marking its panel as static will grant you a noticeable performance boost.

You can also toggle this on/off at will. For example, you can leave your panels as static most of the time, and turn this option off when you press any button.

Pages: 1 ... 7 8 [9] 10