AgentCodeMonk Geschrieben 8. Oktober 2014 Melden Share Geschrieben 8. Oktober 2014 (bearbeitet) Moin, sowas gefällig? Build und Revisionsnummer laufen automatisch. Haupt und Nebennummer müssen von Hand eingestellt werden. Folgendes Script irgendwohin (jedoch NICHT in den Editor oder Plugins-Ordner oder ähnliches!!!): using System.Reflection; [assembly: AssemblyVersion("0.0.*.*")] namespace GameFramework { public static class Version { public static int Major = 0; public static int Minor = 2; public static int Patch = 0; public static readonly string Current; static Version() { var build = Assembly.GetExecutingAssembly().GetName().Version.Build; var revision = Assembly.GetExecutingAssembly().GetName().Version.Revision; Current = string.Format("{0}.{1}.{2}.{3}.{4}", Major, Minor, Patch, build, revision); } } } Folgendes in den Editor-Ordner: using System; using UnityEditor; using UnityEngine; [initializeOnLoad] public class OnUnityStartup { static OnUnityStartup() { OnFocus(); } public static void OnFocus() { OnDestroy(); SceneView.onSceneGUIDelegate += OnSceneGUI; } static private void OnDestroy() { SceneView.onSceneGUIDelegate -= OnSceneGUI; } private static void OnSceneGUI(SceneView sceneView) { if (EditorApplication.currentScene == null) return; string currentScene = EditorApplication.currentScene.Substring(EditorApplication.currentScene.LastIndexOf('/') + 1); currentScene = currentScene.Substring(0, currentScene.Length - 6); //Handles.BeginGUI(new Rect(Screen.width - 100, Screen.height - 80, 90, 50)); Handles.BeginGUI(); GUILayout.BeginArea(new Rect(5, Screen.height - 55, 1000, 50)); GUILayout.Label(String.Format("{0} v{1} -- {2}", PlayerSettings.productName, GameFramework.Version.Current, currentScene)); GUILayout.EndArea(); Handles.EndGUI(); } } Viel Spass damit! bearbeitet 28. Oktober 2014 von AgentCodeMonkey 3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
donbruno Geschrieben 23. Oktober 2014 Melden Share Geschrieben 23. Oktober 2014 hey cool sowas brauche ich! wo müssen den die Scripte genau hinkopiert werden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mark Geschrieben 23. Oktober 2014 Melden Share Geschrieben 23. Oktober 2014 Folgendes Script irgendwohin: Folgendes in den Editor-Ordner: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. Oktober 2014 Melden Share Geschrieben 23. Oktober 2014 Gibt's irgendeinen Grund, dass Build als Variable vorhanden ist, obwohl sie immer nur lokal verwendet wird? Und dass GetBuild in der Methode darüber nicht verwendet wird? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 23. Oktober 2014 Autor Melden Share Geschrieben 23. Oktober 2014 Gibt's irgendeinen Grund, dass Build als Variable vorhanden ist, obwohl sie immer nur lokal verwendet wird? Und dass GetBuild in der Methode darüber nicht verwendet wird? Ach, das Build war so ein Überbleibsel und das GetBuild brauchte ich noch woanders. Hab es nal angepasst: using System.Reflection; [assembly: AssemblyVersion("0.0.*.*")] namespace GameFramework { public class Version { public static int Major = 0; public static int Minor = 2; public static int Patch = 0; private static string _getVersion() { return Major + "." + Minor + "." + Patch + "." + Assembly.GetExecutingAssembly().GetName().Version.Build //+ "." + Assembly.GetExecutingAssembly().GetName().GetVersion.Revision ; } private static string _version; public static string GetVersion { //get { return _version ?? (_version = Assembly.GetExecutingAssembly().GetName().GetVersion.ToString()); } get { return _version ?? (_version = _getVersion()); } } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
donbruno Geschrieben 24. Oktober 2014 Melden Share Geschrieben 24. Oktober 2014 @Mark: hilf nicht, weiß immer noch nicht wo es hin kommt :-( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mark Geschrieben 24. Oktober 2014 Melden Share Geschrieben 24. Oktober 2014 Das könnte man etwas kürzen/einfacher schreiben: using System.Reflection; [assembly: AssemblyVersion("0.0.*.*")] namespace GameFramework { public static class Version { public static int Major = 0; public static int Minor = 2; public static int Patch = 0; public static readonly string Current; static Version() { var build = Assembly.GetExecutingAssembly().GetName().Version.Build; var revision = Assembly.GetExecutingAssembly().GetName().Version.Revision; Current = string.Format("{0}.{1}.{2}.{3}.{4}", Major, Minor, Patch, build, revision); } } } @donbruno: Genauer gehts aber nicht, das eine Script irgendwo hin schmeißen, das andere Script in ein Verzeichniss mit dem Namen "Editor" legen. 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
donbruno Geschrieben 24. Oktober 2014 Melden Share Geschrieben 24. Oktober 2014 ok und auf welcher Ebene ich den Ordner mit dem Namen "Editor" anlege ist egal? und das andere Script an ein GO heften? und zusätzlich bekomme ich nen Error: Assets/Editor/BuildVersion2.cs(29,102): error CS0117: `System.Version' does not contain a definition for `GetVersion' Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 25. Oktober 2014 Autor Melden Share Geschrieben 25. Oktober 2014 (bearbeitet) ok und auf welcher Ebene ich den Ordner mit dem Namen "Editor" anlege ist egal? Ja. Im Idealfall machst du dir ne Sammlunng hilfreicher EditorScripte und anderem Zeugs. Beispiel: Scripts/Utils/Editor/OnUnityStartup.cs und das andere Script an ein GO heften? Nein, wie du siehst erbt Version nicht von MonoBehaviour -> merken: nur MonoBehaviours können an Objekte gehängt werden. und zusätzlich bekomme ich nen Error: Ich empfehle dir Marks Variante des Scripts. Schau mal, da steht was von namespace GameFramework. Wenn du nur Version.Current nutzt, und in deinem Script System eingebunden hast, guckt das Script in den falschen namespace, den dort gibts auch eine Version-Klasse, die hier aber nicht genutzt werden soll. ...au0derdem wollte Ich keinen sinnlosen neuen Namen für "Version" erfinden, also habe ich einfach einen neuen namespace erstellt. du kannst es so verwenden: GameFramework.Version.Current; ...oder oben im Header des Scripts ein using GameFramework; hinschreiben, dann geht das auch so: Version.Current; Wenn du allerdings auch den namespace System nutzt, kommst du um Variante 1 nicht herum. Da kann man jetzt noch ein paar Sachen kürzen: using Ver = GameFramework.Version; Ver.Current; aber ... muss man nicht... Edit: ich habe beide Scripte im ersten Post aktualisiert, sollte klappen. bearbeitet 28. Oktober 2014 von AgentCodeMonkey Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
donbruno Geschrieben 28. Oktober 2014 Melden Share Geschrieben 28. Oktober 2014 ok erstmal danke :-) nun habe ich folgendes gemacht: import GameFramework; function Start () { GameFramework.Version.Current; } so nun bekomme ich aber: Namespace 'GameFramework' not found, maybe you forgot to add an assembly reference? kann man Unity3d irgendwo sagen, wo er suchen soll? früher war es mal im compiler -L oder so, für den Lib-Path dachte eigentlich, das es klappen sollte, da ich die beiden Scripte unterhalb von Scripte/Utils/Editor gepackt habe.... was ich noch vergessen habe... ich arbeite in Javascript und das ist ja C# Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 28. Oktober 2014 Autor Melden Share Geschrieben 28. Oktober 2014 dachte eigentlich, das es klappen sollte, da ich die beiden Scripte unterhalb von Scripte/Utils/Editor gepackt habe.... Mein Fehler. Ich habe nicht gesagt, das "irgendwohin" den Editor-Ordner auschließt, außerdem im letzten Post einen Fehler gemacht und den falschen Pfad aufgeschrieben, das wurde berichtigt. das Script namens "Version.cs" kommt irgendwohin, jedoch NICHT in irgendeinem der unity-Ordner wie Editor, Plugins, etc pp. Pack es einfach in deinen Scripts-Ordner. Dann wird alles gut. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
donbruno Geschrieben 28. Oktober 2014 Melden Share Geschrieben 28. Oktober 2014 also was ich gemacht habe: das Script OnUnityStart.cs habe ich in "..Assets\Scripte\Utils\Editor" kopiert und das andere Version.cs --> "..Assets\Scripte\" Aber irendwie will es trotzdem nicht :-( gleicher Fehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
donbruno Geschrieben 29. Oktober 2014 Melden Share Geschrieben 29. Oktober 2014 Hey... heute morgen als ich noch fast geschlafen habe... erscheint sowas: v0.2.0.5414.24161 -- Level0 ich dachte ich müsste noch was in meine Scripte schreiben, damit es funktioniert... ABER es funktioniert ohne :-) THX @ ALL!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ismoh Geschrieben 13. September 2015 Melden Share Geschrieben 13. September 2015 Ich bekomme folgende Exception geworfen, wenn ich Build&Run ausführe: ArgumentOutOfRangeException: Cannot be negative. Parameter name: length System.String.Substring (Int32 startIndex, Int32 length) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/String.cs:348) OnUnityStartup.OnSceneGUI (UnityEditor.SceneView sceneView) (at Assets/Editor/OnUnityStartUp.cs:27) UnityEditor.SceneView.CallOnSceneGUI () (at C:/buildslave/unity/build/Editor/Mono/SceneView/SceneView.cs:1999) UnityEditor.SceneView.HandleSelectionAndOnSceneGUI () (at C:/buildslave/unity/build/Editor/Mono/SceneView/SceneView.cs:1352) UnityEditor.SceneView.OnGUI () (at C:/buildslave/unity/build/Editor/Mono/SceneView/SceneView.cs:1188) System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222) UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() Jemand eine Idee? Ebenso bekomme ich folgenden Fehler, wenn ich das Projekt über UnityVSTool ausführe: Fehler 1 Fehler beim Ausgeben des 'System.Reflection.AssemblyVersionAttribute'-Attributs -- 'Die angegebene Version 0.0.*.* ist ungültig.'. D:\Dropbox\shared\FatDogGames\___The Lost Rescue Capsule\Unity\Assets\_\Scripts\HelperClasses\VersionHelper.cs 3 12 UnityVS.Unity.CSharp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 18. September 2015 Melden Share Geschrieben 18. September 2015 [assembly: AssemblyVersion("0.0.*.*")] Wahrscheinlich sind die Sternchen ein Platzhalter? Ist jetzt nur geraten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ismoh Geschrieben 18. September 2015 Melden Share Geschrieben 18. September 2015 Jetzt wo du es sagst, könnte das durchaus der Grundgedanke dahinter gewesen sein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 19. September 2015 Autor Melden Share Geschrieben 19. September 2015 Japp, so ist es. Tritt der Fehler noch auf? Ansonsten habe ich hier noch eine Version: http://www.3dan.de/build-numbers/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ismoh Geschrieben 19. September 2015 Melden Share Geschrieben 19. September 2015 Ne kommt nicht mehr, danke Ist das nicht das selbe? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 20. September 2015 Autor Melden Share Geschrieben 20. September 2015 das Prinzip ist identisch, ja. Ein Stück weiter entwickelt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 17. Oktober 2015 Melden Share Geschrieben 17. Oktober 2015 Hab mal das neue angeschaut aus interesse jedoch kriege ich eine Fehlermeldung, dass GameSettings.Instance nicht existiert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 29. November 2015 Autor Melden Share Geschrieben 29. November 2015 Hab mal das neue angeschaut aus interesse jedoch kriege ich eine Fehlermeldung, dass GameSettings.Instance nicht existiert. Das ist eine Leiche und muss ausgetauscht werden. GameSettings.Instance verweist einfach auf den Ort, an dem du das machst: public class GameSettings : ScriptableObject { public VersionControl VersionControl = new VersionControl(); } ergo müsstest du etwa sowas machen: public class GameSettings : ScriptableObject { private static GameSettings _instance; public static GameSettings Instance{ get{ if(_instance) return _instance; instance = Resources.Load<GameSettings >("PATH_TO_SCRIPTABLE"); return _instance; } public VersionControl VersionControl = new VersionControl(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.