Jump to content
Unity Insider Forum

AgentCodeMonkey

Members
  • Content Count

    1,103
  • Joined

  • Last visited

  • Days Won

    63

Everything posted by AgentCodeMonkey

  1. Ich überlege ein Tutorial zum Thema automatisierte build Prozesse mit unity + jenkins zu schreiben. Gibt es generell Interesse?

    1. Ismoh

      Ismoh

      Klingt schon mal spannend. Was genau hast du geplant? Inwiefern willst du das Build via Jenkins prüfen? Mir fehlt da gerade noch die Vorstellungskraft..

    2. AgentCodeMonkey

      AgentCodeMonkey

      Es geht im allgemeinen und das builden via Jenkins. Wie setzt man das auf, was ist zu beachten, wie sehen die Editor scripts aus. Irgendwelches Unit Testing mal völlig außen vor gelassen.

    3. Sid Burn

      Sid Burn

      Ich würde es mir durchlesen. Auch wenn ich derzeit keine pläne hätte CI mit Unity zu machen. Interessant halte ich das Thema aber.

  2. 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(); }
  3. das Prinzip ist identisch, ja. Ein Stück weiter entwickelt.
  4. Japp, so ist es. Tritt der Fehler noch auf? Ansonsten habe ich hier noch eine Version: http://www.3dan.de/build-numbers/
  5. *Update Das Script geht jetzt durch alle Directories im Assets Dir
  6. jur inglisch sounds rili dschörmän end ei kennt stop lafing oal se teim execute me... äh...eksqius mi...no, ei min eim sorry batt se gaim starts to luk gud... ei still dount leik se wey its kreätet, batt it luks gud. häf fann!
  7. Hmmm, warum ist held1Preis dann ein float oÄ. ? Warum, willst du den Preis quasi "verfälschen"? Warum nicht gleich mit Integers arbeiten?
  8. http://docs.unity3d.com/ScriptReference/AssetDatabase.ExportPackage.html
  9. Kannst du das genauer aufschreiben? Dein Ausdruck lässt ein wenig zu wünschen übrig
  10. Easy...hier gibts einige Leute mit Skillz Da zieh ich auch hin und wieder meinen Hut! ..viel zu lernen wir haben, junger Padawan und niemals aufhören zu lernen wir werden...
  11. Ich würde die so ranhängen...aber eigentlich ist es egal, du willst an denen ja nichts modifizieren, eher auch mal zur Laufzeit laden...
  12. Das Ganze kann man noch weiterspinnen. GameSates können auch so aussehen: public abstract class GameSate : ScriptableObject { public bool IsActive = false; public abstract void OnStart(); public abstract void OnUpdate(); public abstract void OnDisable(); } public class GameStateAB : GameSate{ public override void OnStart(){IsActive = true; Debug.Log("Start GameStateAB");} public override void OnUpdate(){ Debug.Log("Update GameStateAB"); } public override void OnDisable(){Debug.Log("Disable GameStateAB");} } public class GameStateXY : GameSate{ public override void OnStart(){IsActive = true; Debug.Log("Start GameStateXY");} public override void OnUpdate(){ Debug.Log("Update GameStateXY"); } public override void OnDisable(){Debug.Log("Disable GameStateXY");} } public class StateManager : MonoBehaviour{ public GameState CurrentState; public GameSate State1; // <-- GameStateAB public GameSate State2; // <-- GameStateXY IEnumerator Start() { SwitchGameState(State1); yield return new WaitForSeconds(3); SwitchGameState(State2); } public void Update(){ if(CurrentState.IsActive) CurrentState.OnUpdate(); } public void SwitchGameState(GameSate gameState){ if(CurrentState){ CurrentState.IsActive = false; CurrentState.OnDisable(); } CurrentState = gameState; CurrentState.OnStart(); } } Warum mal wieder ScriptableObjects? ...du kannst damit die States an verschiedene Objekte packen Ich seh gerade, ich habe das nur in NotePad++ runtergeschrieben...die kleinen Fehlerchen sind ja schnell zu korrigieren und ich deklariere das aufgrund dieser Tatsache als "PseudoCode"
  13. Hier mal ein kleines Script, dass das ewig-nervige Rumgeklicke durch die Projektordner zu den Szenen ein wenig abkürzen soll. Zumindest mich nervt sowas ziemlich Es lohnt sich vorallem, wenn man Unity schön über 2 Monitore fahren kann und Platz für ein paar extra Fenster hat. Ihr könnt einfach "ScenesFolder" anpassen und dort den Pfad zu euren Szenen angeben. Der Ordner sollte NUR Szenen beinhalten (macht Sinn bei einem Ordner für Szenen ) Unter "Window" findet ihr dann einen Menüpunkt namens "ShowScenes" - hiermit öffnet ihr das Fenster. Natürlich gehört das Script in einen Editor-Ordner. Wie immer ist das ein Snippet und lässt sich locker verbessern, erweitern etc pp. Sieht so aus: Script: using System.Collections.Generic; using System.IO; using System.Linq; using UnityEditor; using UnityEngine; public struct SceneInfo { public string SceneName; public string ScenePath; } public class SceneListWindow : EditorWindow { [MenuItem("Window/ShowScenes")] public static void Init() { // Get existing open window or if none, make a new one: SceneListWindow window = (SceneListWindow)GetWindow(typeof(SceneListWindow)); SearchForScenes(); } private Vector2 _scrollPosition; private static readonly string RootFolder = "Assets"; private static readonly List<SceneInfo> Scenes = new List<SceneInfo>(); private void OnGUI() { if (GUILayout.Button("reload")) { SearchForScenes(); } GUILayout.Space(10); _scrollPosition = GUILayout.BeginScrollView(_scrollPosition, GUILayout.Height(position.height - 40)); foreach (var scene in Scenes.Where(scene => GUILayout.Button(scene.SceneName))) { EditorApplication.OpenScene(scene.ScenePath); } GUILayout.EndScrollView(); } public static void SearchForScenes() { Scenes.Clear(); ProcessDirectory(RootFolder); } public static void ProcessDirectory(string targetDirectory) { // Process the list of files found in the directory. string[] fileEntries = Directory.GetFiles(targetDirectory); foreach (string fileName in fileEntries) ProcessFile(fileName); // Recurse into subdirectories of this directory. string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory); foreach (string subdirectory in subdirectoryEntries) ProcessDirectory(subdirectory); } // Insert logic for processing found files here. public static void ProcessFile(string fileName) { if (!fileName.Contains(".unity") || fileName.Contains(".meta")) return; var name = fileName.Substring(fileName.LastIndexOf('\\') + 1); name = name.Substring(0, name.Length - 6); var sceneInfo = new SceneInfo { SceneName = name, ScenePath = fileName }; Scenes.Add(sceneInfo); } }
  14. Die wird NACH Awake() aufgerufen. Edit: Sorry, vertippert http://docs.unity3d.com/Manual/ExecutionOrder.html
  15. ...seltsames Zeug wird dir da beigebracht, bzw. schickt dich auf einen seltsamen Weg. Nicht jedes Tutorial vermittelt gute Sachen! GameObject.Find, SendMessage/BroadcastMessage... sind so Dinge... kann man machen. Schön ist aber anders. Das geht weiter mit so Sachen, dass man Scripte im Idealfall nicht auf Childs legt, da du das spätestens nach ner Woche nicht wiederfindest und und und ... meist lässt sich sowas sehr einfach umgehen. Auch das kann man wieder machen, die Erfahrung sagt aber: best practice ist das nicht.
  16. Deine Graviation müsste immer entgegen der Richtung der Normalen des Faces wirken auf dem du gerade stehst. Also mindestens 1 Raycast abwärts, die Richtung der Normalen im WorldSpace abholen und sowohl die Ausrichtung des Spielers anpassen, als auch die Gravitation. Jetzt erwarte aber nicht, dass das einer schreibt Dazu gibt es sicher Scripte im Netz... sowas haben sicher schon x andere gemacht.
  17. Damit ists offiziell: gerade den Arbeitsvertrag für einen neuen Job unterzeichnet :) Und das an einem so schönen sonnigen Tag :) Besser geht´s nicht!

    1. Show previous comments  6 more
    2. Ismoh

      Ismoh

      Glückwunsch :)

    3. MadLion

      MadLion

      Glückwunsch! Viel Erfolg und natürlich Spass bei der neuen Arbeit. :)

    4. AgentCodeMonkey
  18. Genau das meinte ich. Fällt mir gerade auf, dass ich das hätte genauer schreiben können
  19. Es wird Zeit, dass das Syntax Highlighting wieder Einzug ins Forum hält... Interessanter Ansatz! Werde ich mir nochmal genau durchlesen. Ohne Syntax Highlighting... ist das nicht so cool Da ich an ähnlichem werkel, ist das Thema sehr spanned für mich. Trotzdem habe ich mich für ein eher starreres System entschieden und nutze enums. Auch dort gibt es nur ein paar Stellen, an denen man Hand anlegen muss, wenn man es in einem anderen Projekt mit anderen Stats nutzen will.
  20. Naja... die InstanceID ist jedes mal anders. Beispiel: Wenn du deinem Character ein Item in das Inventar legen willst, ist das per ID garnicht verkehrt. (AddItem(int id){// clone from itemDatabase} ) sowas mit strings zu machen ist ein gutes Stück fehleranfälliger. Da man sicher nicht in jedem Frame ein Item ins Inventar schiebt, ist das Prüfen des strings wohl auch nicht DER Performancekiller ...angenommen du hast aber schon beim Testen deine Spielstände gesichert oder du entscheidest dich ein Item umzubenennen, ist es der ID des Items völlig egal wie dein Item heißt - es lädt einfach das "richtige" Item. Bei der Erstellung im Editor kannst du dir die neue ID ja automatisch erstellen lassen, indem du nach der letzten ID in der Datanbank schaust. Vorrausgesetzt, du sortierst auch aufsteigend nach ID. Ob du dann mal Items löscht und dann zwischen 2 IDs einen Sprung von X hast, ist doch egentlich völlig egal. Nächster Punkt: speicherst du dein Inventar in einer Datenbank, musst du nur die ID übergeben, nicht den Namen des Items...wo wir wieder bei den möglichen Fehlern sind. Was wenn sich der Name ändert?
×
×
  • Create New...