Awesome
<br> |
---|
Splashdown
A Unity open-source splash and icon tool that will generate custom icons with user-provided text. Allows for dynamic scripted content and to be incorporated into your build pipeline.
Its purpose is to aid in quick iteration of unity mobile games, and allow no-code team members such as Q.A testers, designers and general playtesters to quickly identify the build variant that is installed on their mobile device.
A quick glimpse at the generated icons and logos can give build release information without the need for opening the app or creating custom unity splashes.
The customizable text can be used to show things like date, author, build version, unity version, short release notes, beta tags, disclaimers, copyright notices, etc.
| | |
Installation
Install via OpenUPM (recommended)
- Install openupm-cli via npm if you havent installed it before. =>
npm install -g openupm-cli
) - Install com.ale1.splashdown via command line. Make sure to run this command at the root of your Unity project =>openupm add com.ale1.splashdown
Install via Git URL
Add the following line to the dependencies section of your project's manifest.json file
"com.ale1.splashdown": "git+https://github.com/Ale1.Splashdown.git#1.2.3"
The 1.2.3 represents the version tag to be fetched. Although it is discouraged, you can replace with master
to always fetch the latest.
Getting Started
(1) Hello World
Right-click on any location within the Assets Folder. Navigate to Create > New Splashdown
in the context menu.
A Splashdown file will appear.
Fill in the Splashdown Importer window and hit Apply
button.
Congrats! you generated your first custom Logo/Icon
(2) Using it as Splash Logo
This generated sprite can be used as a logo in your Player Settings.
By clicking Activate Splash
button, the playerSettings will start using this sprite as its splash image:
you can remove it by selecting "Deactive" in the splashdown editor |
(3) Using it as App Icon
The same generated sprite can be used as an app icon when you build. Similarly to Splash logos, you just need to set its icon state to active by pressing "Activate Icon:
:warning: Unlike splash logos, activating an icon does NOT apply it to Player Settings right away. It will wait for the start of a app build process. This is by design, as the icon is meant to be a temporary placeholder during development and applying icons during build process allows for a safer restore of your previous icons after build process is complete.
(4) Dynamic Options
The Dynamic Options feature will allow you to quickly update the splashdown file without manually typing in info. Its particularly useful for allowing splashdown to keep track of dates or build versions.
Create a script like below and place it anywhere in your project (though preferably in an Editor
folder).
The splashdown importer will automatically invoke methods with the [Splashdown.OptionsProvider]
attribute whenever its refreshed.
Dynamically created Options will override any manual inputs in the splashdown importer.
public static class Example
{
[Splashdown.OptionsProvider] //Method with this atrribute must return a Splashdown.Options
public static Splashdown.Options ProvideSplashdownOptions() => new()
{
line1 = Application.unityVersion, // e.g 2021.3.4f
line2 = DateTime.Now.ToShortDateString(),
line3 = Application.version, //e.g 2.1.0
textColor = Color.red,
// no need to set all of available options. Those without values will use the manual values instead.
// backgroundColor = Color.blue
};
}
Dynamic options can accept an optional filter parameter that filters by filename (without extension), so it will only apply to specific Spashdowns. E.g:
[Splashdown.OptionsProvider("MyBlueLogo")]
//will only affect options of splashdown with name: 'MyBlueLogo.splashdown'
public static Splashdown.Options ProvideSplashdownOptions() => new()
{
...
}
The optional filter can use "*"
as a wildcard regex character. For example:
[Splashdown.OptionsProvider("Dev*Logo")]
//will match with any splashdown with names such as: 'DevRedLogo.splashdown', 'DevBlueLogo.splashdown', etc
public static Splashdown.Options ProvideSplashdownOptions() => new()
{
...
}
Values in the inspector that have been overriden by dynamic options will have a yellow label, e.g, in example below, line1
, line2
and text color
values dont match the splashdown generated because these have been provided by a dynamic options script. The Class and Method name creating these overrides can be seen inside the information box.
(5) Add splashdown to your builds
Any splashdown file that is set to ACTIVE
will regenerate when unity is building.
This means the latest values from dynamic options will be used, as well as adding the splash and/or logo to your Player Settings.
If you dont desire this behaviour, simply leave the splashdown files in INACTIVE
state.
(6) Add Splashdown to your build pipeline through CLI
below will activate the splashdown file with the provided filename, and apply the options.
_yourUnityPath_ -batchmode -quit -projectPath _yourProjectPath_ -executeMethod Splashdown.Editor.CLI.SetSplashOptions -name MySplashdown -l1 hello -l2 banana -l3 world -size 44
//Mandatory param:
-name MySplashdown // the name of the splashdown file to apply. note that the default name is "MySplashdown" but you should replace with target filename if you've changed it in your project.
//Optional Flags:
-enable_splash // use as splash logo
-enable_icon // use as app icon
-disable_splash // remove logo from splash
-disable_icon // remove icons and restore previous icons
-enableDynamic //sets dynamic options to false
-disableDynamic //sets dynamic options to true
-size //sets the target font size (will be clamped if outside valid range)
Example for MacOS:
/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath ~/Desktop/MyCoolGame -executeMethod Splashdown.Editor.CLI.SetSplashOptions -name MySplashdown -activeSplash -l1 hello -l2 cruel -l3 world - size 44
Example for Windows:
"C:\Program Files\Unity\Editor\Unity.exe" -quit -batchmode -projectPath "C:\Users\UserName\Documents\MyProject" -executeMethod Splashdown.Editor.CLI.SetSplashOptions -name "MySplashdown" -disableDynamic -l1 "Banana" -l2 "Yellow" -size 52
MyEditorScript.PerformBuild
Advanced Customization
Conflicting Options Resolution
Since you can provide options through multiple avenues, keep in mind the order of priority below (most to least).
(1) Dynamic Options
(2) CLI Options
(3) Options set manually in inspector
(4) Default Options
Options with higher Priority will override ones with lower priority.
Managing multiple Splashdown files
[!IMPORTANT] Having Multiple Splashdown assets in your project is supported, but they each must have unique filenames.
How the system handles multiple Splashdown files varies between splash logos and app icons:
Multiple Splash logos
You can have any number of splashdown files set to "Active Splash". All the Splash logos will be present sequentially in your splash screen. When you activate/deactivate a splash in the Splashdown inspector, it is automatically added or removed from your Player Settings in editor-time.
Multiple App Icons
For App icons, the Player settings dont allow for multiple icons for each category. Hence, when you activate an Icon, the system will check for other existing activated icons and disable those first.
This silent behaviour will be modified in the future to introduce a warning when trying to activate an icon when another icon is already active.
Using a texture as background
Works best when using a square non-transparent texture of dimensions 360 x 360.
Switching Fonts
You can switch the font used by using the Font Selector field in the splashdown inspector. Any font asset in your project can be used. The label above the font selector should update to show the path to the font currently being used. Keep in mind the font Selector field is always shown empty as its used for drag-and-dropping font asset files.
After switching fonts, you will likey need to adjust the font size to fit your needs. A feature to auto-resize the text will be introduced in a future release.
Customizing the Border
Customizing the border is possible, but the feature is not high-priority in the roadmap. If there is a use-case where modifying the borders provides an additional benefit other than cosmetic, pls open an issue describing your use-case and I will gladly look into it.
Supported Unity Versions
Version | Supported | Notes |
---|---|---|
< 2021.X | ✖️ not supported | will support if error also applies to higher unity versions |
2021.X | ✅ supported | pls submit issue if encountering problems |
2022.X | ✅ supported | (same as above) |
> 2023.X | ❔ supported (untested) | (same as above) |
FAQ
- My Dynamic options are overriding the options passed through CLI!?
You can disable the dynamic options with the optional flag provided. You can also use Dynamic Options optional filter parameter or simply have the DynamicOptions only override a certain line and leave the rest for the CLI options to fill. See Conflicting Options Resolution section.
- I want to use the generated logo for something else, how can I extract the texture from the splashdown file?
A texture is generated and saved as a sub-asset of the splashdown file. you can copy it to your clipboard from the project hierarchy, and paste it elsewhere in your project to get a clone of the texture. There are several ways to programatically extract the texture -let me know your use-case if you need assistance with this.
- I want use a generated splashdown logo for a custom splash screen. How do I reference the generated sprite for use in my scene?
You can drag-and-drop any splashdown file unto the sprite field of an Image or Sprite Renderer component in your scene. When the original splashdown sprite regenerates, so will the sprite in your scene. If you want to keep the sprite static, see above about manually making a copy and using that as your Image/Sprite renderer sprite.
- Can I use non-latin alphabets (e.g Kanji, Akson Thai, Hangul) ?
Yes! but you will likely need to provide your own font as the built-in fonts are very limited in the amount of characters available. The package comes with NanumGothic as a sample font that is compatible with korean and RobotoMono (the default font) is compatible with cyrillic.
There are plenty of free fonts available that will work well with non-latin languages. I have not included them in this package to avoid bloating the size of the package with unecessary fonts.
See instructions for adding & switching fonts and feel free to open an issue if you are unable to get your preferred language working properly.
License
MIT License. Refer to the LICENSE.md file.