[Submitting] Score Flash - Easy to use GUI for Scores, PowerUps, Achievements

Score Flash, now available on the Asset Store!!!

FORWARD NOTICE: Now that it’s released, please go to the new forum posting:

[RELEASED] Score Flash - Scrolling Combat Text on Steroids: Easy to use GUI for Scores, PowerUps, Achievements, Tutorials
http://forum.unity3d.com/threads/152517-RELEASED-Score-Flash-Easy-to-use-GUI-for-Scores-PowerUps-Achievements-Tutorials

Please do not bump this thread, it’s only kept for historical purposes :wink:

Archive (including full history of ScoreFlash):

HEADS UP (2012-12-17):
X-Mas Sale coming up (probably tomorrow, 2012-12-18)!
So while I really want you to buy ScoreFlash - wait until it’s 30% off!!!

V2.2.4 is now available (this is a minor bugfix release which fixes an issue with the PlayMaker actions; when you use PlayMaker, make sure to re-import Plugins/NarayanaGames/ScoreFlash/Component/PlayMaker-Actions-Package after you have updated ScoreFlash to 2.2.4!

Score Flash is a simple yet powerful GUI for pushing scores, achievements, collected power ups, tutorial instructions or even chat messages above players’ heads in a fancy and highly configurable way. With ScoreFlash, you can easily achieve the effect you may know from the Scrolling Combat Text addon for World of Warcraft. But ScoreFlash can also do a lot more for you - and it’s easy!

ScoreFlash has no dependencies (it can use UnityGUI) - but also works with NGUI, EZ GUI and PlayMaker!!!

Here’s a video showing you how easy it is to go from using ScoreFlash with UnityGUI (the default) to having ScoreFlash use NGUI instead:

Watch on YouTube (for 720p HD)

The ScoreFlash Demo Web Player (click to start):

1043494--42018--$ScoreFlashV2_NowAvailable.png

Check out the new PDF-Documentation: First Steps with Score Flash

Here’s a quick product introduction:

Watch on YouTube (for 720p HD)

Buy Score Flash on the Unity Asset Store!!!

Score Flash is extremely easy to set up and use; and yet quite versatile, here’s the recommended workflow:

Artist

  • Drop the prefab into your scene.
  • Hit play and watch autogenerated design-mode messages appear in GameView
  • Tweak ScoreFlash to show the messages the way you wish (colors - tutorial, alignment and so on via the custom inspector, fonts via GUISkin - tutorial)
  • When you’re done, switch off automatic test messages (Testing / Autogenerate Messages?)
  • End playing (make sure the “Keep Changes after Play” checkbox is active to store the changes; it’s only visible in playmode and it’s the last entry in the inspector of ScoreFlash)

For all the details, check out: First Steps with Score Flash

Programmer

Anywhere in your code, when the user should receive a message, like “+23” or “Jump PowerUp collected” or “Achievement ‘Awesome’ unlocked” … or … “Now please make a right turn and increase velocity by 15%, watch the magic happen and enjoy the intense colors” (hey, I didn’t say ScoreFlash could only be used for stuff that makes sense) … just write:

ScoreFlash.Push("The text you want to show");

Yes, it’s that easy … so if you’re an artist that can read and edit a little code - YOU CAN DO IT, GO GO GO! :wink:

But wait: While it can be that easy, just posting text might feel a little limiting. So, since ScoreFlash V2 there’s a new interface IScoreFlash (see API documentation) which hopefully provides any method to post a message you could dream of, including using screen or world coordinates or a ScoreFlashFollow3D :slight_smile:

So, you might be more the kind of developer that enjoys something like:

ScoreFlashManager.Get("SpecificScoreFlashInstance").PushLocal("Awesome message");

Or maybe your specific game needs you to write something like:

string message = this.rigidbody.velocity.y > 0
    ? string.Format("+{0:0}", this.rigidbody.velocity.y)
    : string.Format("{0:0}", this.rigidbody.velocity.y);

ScoreFlashFollow3D follow3D = GetComponent<ScoreFlashFollow3D>();
ScoreFlash.Instance.PushWorld(follow3D, message);

For more details, check out the ScoreFlash product page. If you are a programmer, you might be primarily interested in the full ScoreFlash API Documentation.

Or check out some of the tutorial videos:

Tutorial that explains how to work with GUISkins, GUIStyles (custom styles) and fonts in Score Flash:

Watch on YouTube (for 720p HD)

Tutorial that explains how to work with colors in Score Flash:

Watch on YouTube (for 720p HD)

Tutorial that explains how to make sure your play mode changes in ScoreFlash-components don’t get lost:

Watch on YouTube (for 720p HD)

Here’s an introduction and tutorial video that goes into great detail (this is based on the initial version of ScoreFlash, so some parts are outdated):

Watch on YouTube (for 720p HD)

Features:

  • Extremely easy to set up and use - designed for artists and programmers alike!
  • Just pop in a prefab and flash your scores, no complicated setup necessary to get started
  • And yet: Highly configurable if you need to - and even has thought of server-builds (use “SERVER” conditional compilation symbol to automatically disable the component that handles showing the messages)
  • You can use ScoreFlash with NGUI, EZ GUI and PlayMaker
  • Perfectly integrated into the editor: Trigger test messages right from the inspector in play mode, persist the changes you made while in play mode if you wish (or discard them as Unity would usually do it)
  • Supports pushing messages anywhere on the screen (using screen coordinates), or on top of any 3d object; you can use 3D coordinates, or the ScoreFlashFollow3D-component which provides several configuration options and a way to handle object destruction in a nice way (e.g. keeping momentum instead of abruptly stopping the movement of the message)
  • When using UnityGUI, which does add some draw calls - you can use several settings to optimize for performance, like:
  • Outlines that can be auto-disabled on mobile to save draw calls or be completely disabled (to save drawcalls also on desktop machines - or if your style doesn’t need outlines)
  • Several of mechanisms implemented to cope with “score spamming” (i.e. many messages coming in quickly) without degradation of performance, quality and effect
  • Support for high density displays (e.g. Retina), if you need it (implemented via two GUISkins and an internal scale factor for coordinates / distances)
  • Examples in C#, UnityScript and Boo (it’s so easy to use that this probably is a little overkill - but hey, I needed to make sure it works with all languages supported by Unity anyways so why not share what I’ve got :wink: )
  • Survives the dreaded “recompile after code change in playmode”, so if you took care that changing code in your project while playing works, ScoreFlash won’t break it
  • And finally: Just like probably almost everyone else, I’m waiting for the new Unity GUI - and I want to make sure that once it is available, my games use it … so, I’m committed to making ScoreFlash “just work” with the new Unity GUI with minimal set up / migration. Using ScoreFlash, you are certainly not locked in to an alternative GUI system once the new Unity GUI is finally available. That’s one of the reasons I’m keeping ScoreFlash somewhat barebones and simple for now (this doesn’t say that using an alternative GUI system right now is a bad idea - actually, most likely, it is a good idea but YMMV).

Limitations:

  • UnityGUI is pixel perfect - so when doing very slow animations, you will get some stuttering (from one pixel to the next); this isn’t an issue when messages are moving at at least “one pixel per frame” but when doing very slow motions (one pixel every many frames), this can be an issue
  • For multiline text messages, the line-height / line spacing depends on your font; with some (e.g. Ubuntu), this works fine - but some have rather large default line spacing and it’s not possible to change that in Unity; see also: Font Line Spacing and Kerning in GUI System. Again, most likely this will not effect you; especially not if you’re already using fonts in multiline texts in Unity GUI and it works. But I ran into it during development / testing with some free fonts so I want to make sure you know this can happen.

Tested on Unity Versions (ScoreFlash does not require any Unity Pro features):

  • Unity 3.4.2 (NGUI is not available for 3.4.2!)
  • Unity 3.5.6
  • Unity 4.0

Tested build targets:

  • Web players
  • NaCL (seems to be not supported by PlayMaker and NGUI)
  • Flash (seems to be not supported by PlayMaker)
  • Standalones (Mac, Linux, Windows)
  • Android (devices: Google Nexus One, Sony Ericsson Xperia Play)
  • iOS (devices: iPhone 3GS, iPad 1, iPhone 4S, iPad 3)

Get Score Flash from the Asset Store!!!

History
2012-09-25: Submitted version 1.0.2 to the asset store, waiting for approval (version 1.0.0 wasn’t approved, version 1.0.1 tried to fix the issues of 1.0.0 but did so in a way that wasn’t so great, so I submitted 1.0.2 while 1.0.1 was still pending approval) :slight_smile:

just ten hours later: Awesome - it’s already on the Asset Store! Thanks to the Unity staff - that went really quick! I greatly appreciate it! Unfortunately, in this release, the examples folder was missing because I had named it AssetStore - Examples (another beginner’s mistake - by now you can probably tell that this is the first package I published to the Asset Store :wink: ). Fixed the naming issue and a few more and re-submitted to the asset store as version 1.0.3.

2012-09-26: Created new thread (the one you are reading) because the changed title (“[RELEASED]” instead of “[Submitting]” won’t show in the list of forum entries) … link to the old thread

just a few hours later: Once again UT did an awesome job: I submitted last night, and 1.0.3 with the fixed examples folder is already online. Yes! :slight_smile:

2012-09-27: Cleaned up this posting quite a bit, added the list of features and limitations

2012-09-29: Score Flash V1.1.0 has been submitted to the Asset Store

2012-10-01: Score Flash V1.1.0 has been approved and is now available on the Asset Store - here’s what you’ll get when you update (or when you buy now):

  • Changed primary method from ScoreFlash.Instance.Show(…) to ScoreFlash.Push(…); this is easier to type (the old one still works for now but is no longer recommended to be used)
  • Added ScoreFlash.Push(string text, GUIStyle style) and ScoreFlash.Push(string text, GUIStyle style, GUIStyle styleHighDensity) for more flexibility - this is primarily for people who are already managing their own GUISkins and don’t want ScoreFlash to impose anything on them (or require additional “wiring”); this way, you could also use different styles for different messages (using ColorControl.UseColorFromSkin, you could even fully control which colors are used when - set this via Colors / Color Selection Mode / UseColorFromSkin)
  • Added minPaddingX (default: 20F) so you can define how close the message goes to the screen borders (left / right) when scale = 1 (obviously, if scale > 1, the message might clip at the borders) … in the inspector, this is called “Padding left/right before Wrap” and is located below Screen Align in the section “Main Layout”
  • Added new section Colors
  • Added new property: colorSelectionMode which controls how colors are picked and has 4 possible values: FadePhases, UseColorFromSkin, Sequence, Random (see ColorControl), as well as a list to define the colors and
  • added Time Reference (under “Readability and Performance Tweaks”) that can take values UseRealTime or UseGameTime (see TimeReference); UseRealTime is the default and important when you use ScoreFlash in a pause-menu (that has Time.scale = 0); UseGameTime is best used if you want slow motion effects to have an effect on how messages are displayed (that’s really an art-choice, no right or wrong here)
  • renamed examples folder to Xamples-ScoreFlash (in an attempt to find the ideal “standard name for examples”)

2012-10-02: Created a video on how to work with colors in ScoreFlash

2012-10-03: ScoreFlash V1.1.1 was submitted to the Asset Store

2012-10-03: ScoreFlash V1.1.1 has been approved and is now available on the Asset Store - here’s what this new version has for you:

  • Added new setting ensureSingleton - default is true, if you set this to false, you can have multiple instances of ScoreFlash in a scene; however, if you do that, you can no longer use ScoreFlash.Push(…) - at least not reliably - instead, you need a reference to each instance and can then use myScoreFlashInstance.PushLocal(…) - this way, you have much greater flexibility (think of different time- and layout-settings for different kinds of messages; thanks to miroku000 for requesting that feature)
  • Removed guiDepth as this didn’t have an effect, anyways - use script execution order if you need to get ScoreFlash above other classes rendering UnityGUI stuff
  • Added new examples for PushLocal in C#, JavaScript and Boo
  • Added additional advanced example code to the existing C# example

2012-10-11: ScoreFlash V2 is almost ready for submission! I’m tweaking the last few issues and getting the whole package ready for the asset store … ScoreFlash V2 demo Web player released!

2012-10-14: Added a new tutorial: ScoreFlash - GUISkins, GUIStyles and Fonts … and a link to the ScoreFlash API Documentation

2012-10-15: ScoreFlash V2.0.0 has been submitted to the Asset Store for approval - so most likely it will go online shorty (and the price for the package including all source code will go up from $15 to $30).

2012-10-15: ScoreFlash V2.0.0 has been approved and is now available on the Asset Store - price has increased from $15 to $30.

NOTE: In case you get compilation errors after upgrading from V1 to V2 - you might have to replace ScoreFlash.Instance with ((ScoreFlash)ScoreFlash.Instance) in some places. This is because ScoreFlash.Instance now returns the ScoreFlash as interface IScoreFlash and “stuff you shouldn’t need to change from code” is no longer directly accessible. For common use cases, this makes coding with ScoreFlash much more convenient because you only get what you really need most of the time with Intellisense!!!

New features in V2.0.0:

  • added IScoreFlash interface which is implemented by ScoreFlash - for a clean set of methods when accessing ScoreFlash (this mainly helps with Intellisense); ScoreFlash.Instance and ScoreFlashManager.Get(string name) return IScoreFlash but you can cast this to ScoreFlash if you really have to (not recommended!)
  • added new base class for custom “renderers”: ScoreFlashRendererBase, so you can now use UnityGUI, GUIText (not too useful because it doesn’t support scaling and rotating), or even NGUI and EZ GUI (adaptors will come with V2.1) to render the messages which makes ScoreFlash a “one draw-call solution” if you own these tools; the same approach will later be used to support the new Unity GUI system - whenever that becomes available :wink:
  • made ScoreFlash much more robust, covering lots of corner cases (most of which are resulting from the added flexibility ScoreFlash now has, like using custom renderers) … if you manage to generate an error that I haven’t covered post to the forum (see Help / narayana games :wink: )
  • added ScoreFlashManager - the best way to work with multiple instances of ScoreFlash: Simply use ScoreFlashManager.Get(string name) to access any named instance of ScoreFlash
  • each instance of ScoreFlash now supports multiple message queues; this is important if, for instance, you use ScoreFlash for scores above game objects - when using ScoreFlashFollow3D, this just works and ScoreFlash makes sure that messages that belong to different game objects don’t interact with each other; if you don’t use ScoreFlashFollow3D for 3D positions, it’s up to you to make sure things don’t get messed up (you can use object.GetInstanceID() and pass it into PushLocal)
  • added utility class Easing - the easing methods from Util are still there but obsolete
  • Made persisting of changes during play much more robust (now supports changes in multiple objects during one session), and much more transparent (now has “store changes immediately” mode, and a new “click button to restore changes from play mode”, the latter includes a button to fix all items of one type that were changed with a single button click); this is now used both for ScoreFlash as well as the new ScoreFlashFollow3DEditor … and can be added very easily to your own custom inspectors if you need it, using PlayModeChangesHelper
  • You can now enter any custom or existing style; this is useful if you want to use multiple instances of ScoreFlash with just a single GUISkin
  • added new methods to Util (under common): Util.IsPortrait (simple check for portrait based on Screen.width / Screen.height) and Util.ScaleInverse(…) which simply inverts what Util.Scale(…) does

2012-10-15: Added a new tutorial: ScoreFlash - Persisting Changes after Playing

2012-10-16: Submitted V2.1.1 to the Asset Store (should have been V2.1.0 - but the upload failed and I had to increase the version number :wink: ).

2012-10-17: ScoreFlash V2.1.1 was released on the Asset Store. Here’s the changelog:

  • Added custom renderer for NGUI - if you have NGUI, you can now use ScoreFlash with a single draw call!
  • Added TestMode to ScoreFlashFollow3D
  • Added direct font assignment (as alternative to using GUISkins)
  • Added selection of “rendering”: UnityGUI-GUISkin, UnityGUI-Font, CustomRenderer
  • Fixed a few warnings in Unity 4 (oops :-/ )
  • added proper documentation with examples to PlayModeChangesHelper
  • fixed comparing lists (this failed for list of colors resulting in PlayModeChangesHelper always thinking there was a change in all ScoreFlash instances even when there really was no change)
  • PlayModeChangesHelper now prints a nice list of changes (diff) to the console
  • PlayModeChangesHelper wasn’t as reliable in 3.5.6 as in 3.4.2 - fixed :wink:

2012-10-23: Submitted V2.2.0 to the Asset Store:

2012-10-23: ScoreFlash V2.2.0 has been approved and is now available on the Asset Store, here’s the change list:

  • Now supporting PlayMaker!!!
  • Added support for EZ GUI … but … consider this “experimental” for now!
  • Added component menus for ScoreFlash, ScoreFlashManager and ScoreFlashFollow3D
  • Polished documentation quite a bit; ScoreFlash class now has quite a few examples right in the class description
  • Added new methods PushLocal(string text, Color color) etc. to send messages in a specific color
  • Removed “Disable Outlines” section when using a custom renderer (it has no effect in that case)
  • Fixed some jittering problems that could occur when using NGUI for rendering: in particular, changed the prefab to have a parent game object with a child UILabel (should have done it this way right from the start!); make sure to also update your NGUI packages if you are using ScoreFlash with NGUI!
  • Added ScoreFlashFollow3D.keepStatic to not follow the messages but use the configuration options
  • added new method FreezeLocation(float timeSeconds) to ScoreFlashFollow3D
  • Made Util.AreEqual(…) methods more robust (these threw exceptions when null-references were passed)
  • ScoreFlashManager “Copy Name” is now called “Copy Ref” and puts ScoreFlashManager.Get(“TheName”) to the copy buffer which makes this much more useful :wink:
  • Fixed a bug where clicking “Show Message” in the test section in the ScoreFlash inspector would go to the wrong ScoreFlash instance
  • ScoreFlashManager now also has “ensureSingleton”, which defaults to true (like ScoreFlash)

2012-10-23: ScoreFlash V2.2.2 is now available; this is a minor refactoring: Util is now called NGUtil, and Easing is now called NGEasing. This fixes problems that could occur when using ScoreFlash together with other packages (e.g. MegaFiers). After upgrading to V2.2.2, please delete the files Easing.cs and Util.cs as well as the folder “Deprecated”. They are no longer needed. You may have to replace any references to Easing or Util in your own code with NGEasing and NGUtil (obviously, the ScoreFlash code already uses NGEasing and NGUtil :wink: ).

2012-10-24: ScoreFlash V2.2.3 Added extensive written documentation in PDF format - check it out: First Steps with Score Flash

2012-12-18: ScoreFlash V2.2.4 is now available (this is a minor bugfix release which fixes an issue with the PlayMaker actions; when you use PlayMaker, make sure to re-import Plugins/NarayanaGames/ScoreFlash/Component/PlayMaker-Actions-Package after you have updated ScoreFlash to 2.2.4!

Buy Score Flash now :wink:

Finally, uploading the video worked. You can watch it right here in the thread, or - for full resolution - with these two links:

Hi Jashan,

Really awesome stuff! just what I need. When will this be available and what price?

Roy

Hi Roy, thank you for the kind feedback!

Hopefully, ScoreFlash will become available on the Unity Asset Store this week. This depends a little on how well the submission process to the Asset Store works.

Price is $15 or EUR 11.40 (depending on where you live … not sure about other currencies :wink: ). Good point - I’ll add that information to the original posting!

:wink: … I just re-submitted the package. This time I did it with just a readme and a package which will then put everything correctly in its place when you double click it. So it’s one extra step - but certainly more convenient (and more reliable) than having to move folders around (which would also be an extra step - but more annoying and error prone).

See also: Plugin and Editor Folder installation done right ← EDIT: Ah, should have read that more careful to save myself some confusion :wink:

So … I finally figured out how to submit this “the right way”: I originally had Score Flash in an “Asset Store project” together with other packages I’m preparing to release. Publishing directly from there with the Asset Store Tools didn’t work because I would have needed to use multiple folders as “Assets folder” in the asset store tools:

  • AssetStore - Examples/NarayanaGames/ScoreFlash
  • Editor/NarayanaGames/Common
  • Editor/NarayanaGames/ScoreFlash
  • Plugins/NarayanaGames/Common
  • Plugins/NarayanaGames/ScoreFlash

Thanks to Rafes I now have it figured out (and re-submitted once more … “aller guten Dinge sind drei” we would say in German, not sure how well that translates … something like “all good things go by three” I guess :wink: ).

So now (as before) I have one project with the assets for all packages, images for the asset store etc. This one is also version controlled, and from here, I’m preparing and previewing everything. Once that’s done - and this is the new part - I export everything I need for the package I want to release (ScoreFlash in this case) into a package. That package I import into an empty project. Ironically, I had already used that much for testing and just wasn’t aware that this is how I should also go about publishing. So, in that clean project that only has the relevant “stuff” in it, I do some final checks and testing, import the asset store tools, select “Assets” as the “Assets folder” (this requires “one step up” in the file dialog) … and push the submit button. According to Rafes, the AssetStoreTools folder is automatically ignored.

So now, ScoreFlash should go online within very few days. I’m excited :slight_smile:

Awesome! It’s now available on the asset store so you can exchange money for ScoreFlash :wink:

EDIT: Oops, the examples folder is missing. Seems like the AssetStoreTools are a little eager removing everything that has “AssetStore” in its name.

I’ll post an updated package later today (still in the process of preparing a short video :wink: ).

Congratulations! I have something to do tomorrow :slight_smile:

Roy

Hi Roy, thanks! :slight_smile: Enjoy! And let me know if there’s anything that’s not immediately obvious or easy!

PS:

FORWARD NOTICE: Now that it’s released, please go to the new forum posting:

[RELEASED] Score Flash: Easy to use GUI for Scores, PowerUps, Achievements, Tutorials
http://forum.unity3d.com/threads/152517-RELEASED-Score-Flash-Easy-to-use-GUI-for-Scores-PowerUps-Achievements-Tutorials

very very good nice mr.jashan

please
How Scripting Code Car of the Wheel
Drifting Score javascript
and Text Speed Alpha
example
((((NeedForSpeed The Run)))

Please …

Package unity Downloader Link

sent to email
ray_vrayz@yahoo.com

So, I got the basic usage working. But, I am struggling a little with something. I have some messages like “You have unlocked Level 2” that I want to be big and around for 5 seconds or something. Then I have little “+1” messages that I want to be small and vanish very quickly.

For the big Long messages, I have set the appropriate stuff in the properties and just use ScoreFlash.Push(“You have unlocked level 2”);
For the “+1” messages, I have code like this:

scorestyle= new GUIStyle(guiskin.label);

scorestyle.fontSize=18;
scorestyle.padding.bottom=100;
ScoreFlash.Push(“+1”,scorestyle);

How can I make these messages only be on the screen for like 0.5 seconds without messing up the time for my big messages? Is there some kind of custom setting in the GUIStyle for this? Or do I have to Get the ScoreFlash component of the ScoreFlash object and set the variable and then set it back? Or can I have two ScoreFlash objects?

I’ve posted a full answer in the “main thread” (I had to create a new thread because I couldn’t change “Submitting” to “Released” - sorry for any confusion or inconvenience this may cause!

Here’s the link: Full answer to your question

For here just a quick note: At the moment, it’s not possible - but I have one “quick solution” for V1.1.1, and a solid solution for V2. Details are in the other thread. :wink:

Hello!

I have set up an instance of Score Flash in my scene and the first time I call ScoreFlash.Push(“Game Over”); a message gets displayed without any problem. If now I restart the level with Application.LoadLevel(Application.loadedlevel), it will give me an error in Unity but still display the text BUT the same error it will crash on iOS.
The message is this:

Restored ScoreFlash.Instance - most likely you did a recompile while playing, all is good, no worries :wink:
UnityEngine.Debug:Log(Object)
ScoreFlash:get_Instance() (at Assets/Plugins/NarayanaGames/ScoreFlash/ScoreFlash.cs:888)
ScoreFlash:Push(String) (at Assets/Plugins/NarayanaGames/ScoreFlash/ScoreFlash.cs:909)
SMessages:GameOver() (at Assets/Resources/Scripts/SMessages.js:77)
UnityEngine.GameObject:SendMessage(String)
SMain:Update() (at Assets/Resources/Scripts/SMain.js:250)

Any idea?
Thanks!

Fm.

I’ve posted an answer to the main thread. I don’t have a solution, yet, but some information … and am currently doing some more investigation :wink: