|
Sometimes it is useful for a game to display version information, or a revision number such as is assigned by version control or continuous integration solution. What's a good way to do this for a Unity game?
(comments are locked)
|
|
The usual way how this is done is by having keywords which are expanded by the version control on checkin. You can then use that keyword in a string in your game and simply display that. Something like:
Now, as far as I know, Asset Server doesn't have such keywords (that would be a feature-request ;-) ). Examples of keywords used by other version control systems: Of course, you might want to be doing some string-cleanup to remove the "cryptic" parts of the version control keywords. Personally, I prefer to use labels I manually assign for releases (you could do that in a property in one of your "core management" prefabs that you can easily change in the Unity editor and that is accessible from where ever you have the GUI code to display that information). Usually, that creates more meaningful information for actual users and seems like a small extra-step to take while creating my builds. However, using the automatic assignment of dates through version control might be helpful in "hot development" (when you push out releases every few days). Keep in mind, though: That value will only change when you actually made a change to that file. Finally, there's yet another solution: If you have a custom build-system (which can be implemented Unity's batch mode features), you might do your own replacement in the code during the build; and you'd increase the number for each build (or include the build-date, or whichever information you find useful). You could also keep that number / text in a little text-file that your game-code can access (might be easier to set up than doing the string replacement in your code but adds a little complexity in your game-code). In my opinion, that's the optimal solution (meaningful values + no manual work involved once it's set up + totally customizable) - but also the most complex one to set up. But when you know how to set up a build-system, that should be one of your smaller concerns ;-) I like the build system solution. A simple way to do that is to put some constants in a class (AppStuff.BUILD_DATE or whatever). Have those be empty string in your project code then use scripting to create the class with the constants' values and overwrite the class at build time. Then the rest of your code need only access the constant to display the right build date, version, or whatever info you desire.
Feb 04 '10 at 09:21 PM
Ben 2
(comments are locked)
|
|
EDIT: updated code to make copy of string before returning to C# Okay here it is: To be able to show date/time of a build (useful to make sure your testers are using the right version) I made a very simple plugin that adds two functions to retrieve date and time string of the build process. To use it, add the Test.h and http://Test.mm to the xcode project and JBuildInfo.cs to your unity project. Shouldn't be hard to figure out how to use this I guess... BuildInfo.h:
BuildInfo.mm:
JBuildInfo.cs: I think it should be noted that this is a iPhone specific solution.
Nov 30 '09 at 10:03 AM
jashan
Has anyone tried to use this recently? In Xcode 3.2.5 / SDK 4.2, I receive this runtime error when calling either getBuildDate() or getBuildTime() malloc: *** error for object 0xce35b0: pointer being freed was not allocated
Dec 04 '10 at 01:08 AM
CapnCromulent
You're right, code was wrong, but never gave problems with Unity iPhone 1.7.x, fixed it :-)
Dec 31 '10 at 07:13 AM
Jaap Kreijkamp
(comments are locked)
|
|
You can use a compile-time language to create a string. At least I know that Boo has this. Has anyone done the above in C#?
Feb 12 at 09:11 PM
wrxmarcus
I don't think C# can do this, but you can use this class from C# if you place the script under /Assets/Plugins, and the C# code somewhere else.
Feb 12 at 09:27 PM
steinbitglis
Thanks. Still being quite new to this, do you know how I would access this info from C#? Does it require an extern - and if so how would I set that up for Boo? I assume I should put this in a file called "BuildtimeInfo.BOO" UPDATE: I find you can call this directly from C#. Too bad Visual Studio is sure this is an error.
Feb 12 at 10:57 PM
wrxmarcus
My .unity3d web player binary increased by over 500K simply by adding this .boo file to my project :( . Maybe Unity is including a large Boo runtime.
May 25 at 10:17 PM
darrinm
maybe it's debug symbols for boo? As far as I know, there is no "boo" runtime, only ordinary mono.
May 25 at 10:37 PM
steinbitglis
(comments are locked)
|
|
There is another way for those who don't want to use source control keywords or a custom build pipeline. The idea is to read the COFF header as described here ("The new way"): http://stackoverflow.com/a/1601079/786656 Now, it's Unity so there is no main assembly. What I check instead is the DLL built from my C# scripts which is in "/Managed/Assembly-CSharp.dll". Note that it only works outside of the Unity Editor, with an actual built game. To summarize (C#):
(comments are locked)
|
|
For iPhone projects, you can use Apple's built-in tool, agvtool, described here. You can probably even use Jaap's answer to provide the generated strings to Unity.
(comments are locked)
|

Jaap Kreijkamp already has a solution for build-time; I'd like him to move that answer over here. But I'd also welcome solutions for embedding information such as the SubVersion revision.