Jump to content
Unity Insider Forum

Cxyda83

Members
  • Content Count

    85
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Cxyda83

  1. ... ziemlich sicher dein post ist im falschen forum gelandet ¯\_(ツ)_/¯ (@admin feel free to delete my post)
  2. ... dann bin ich mir ZIEMLICH sicher das es ein anwenderproblem ist... und mit einer derart schlechten Fehlerbeschreibung deinerseits fürchte ich dir kann nicht geholfen werden. Sorry
  3. Wenn du die bilder im Explorer / Finder in einen Ordner deines Projektes kopierst importiert Unity die Bilder ?
  4. da muss man denke ich ganz klar "Journey" nennen... wenns um narration geht würde ich sagen gehört das game zur pflicht"lektüre". "Ori And The Blind Forest" ist auch großartig. Da übernimmt die Narration auch die Umgebung
  5. na dann weiste wenigsten welche datei das problem ist ^^ 😛
  6. @Jomnitech ok ich hab mich etwas unglücklich ausgedrückt. Das log wird jedes mal wenn du Unity startest gelöscht und neu geschrieben. D.h. um da jetzt einen Fehler zu sehen / zu finden müsstest du natürlich wider den Fehlerfall herstellen und dann schauen was im log steht
  7. mhh ich würde dir mal den tipp geben ins Unity Log zu schauen ... da stehen ab und an die nötigen Infos die man gerne hätte.. die log dateien liegen in der regel hier: Windows : C:\Users\YOUR_USERNAME\AppData\Local\Unity\Editor. OS X: ~/Library/Logs/Unity/ Dann einfach mal das Editor.log aufmachen und schauen was als letztes drin steht
  8. 😉 @Sascha also nur um nach X Zeit eine funktion zu callen brauchst keine Coroutine da reicht auch ein einfaches Invoke(nameOf(MyStopFunction), 2f); ... und in deiner ersten coroutine fehlt ein "yield return" 🤓 aber ja... du bekommst den Keks für die ausführlichste Antwort ! 👍
  9. mit dem OnCollisionExit stimme ich zu allerdings kommt das auf deinen Anwendungsfall an, da gibt es sicher noch andere / leichtere lösungen für von der Lösung die @devandart vorgeschlagen hat würde ich jedoch abraten ... bei diesem Code wird das objekt sobald das level geladen ist erstmal direkt 2 sekunden steigen wenn nicht gleich OnCollisionExit aufgerufen wird. Besser ist es eine bool variable z.b. isGrounded = true und eine timerVariable zu haben. Wenn OnCollisionEnter eintritt setzt du die timerVariable auf 2f und isGrounded auf false. In der Update() funktion machste dann private bool isGrounded = true; private float moveUpTimer; private const float moveUpDuration = 2f; void OnCollisionEnter(Collision collisionInfo) { // Wenn collision mit ground isGrounded = true; } void OnCollisionExit(Collision collisionInfo) { // wenn keine collision mehr mit ground moveUpTimer = moveUpDuration; isGrounded = false; } public void Update() { if(isGrounded) return; moveUpTimer -= Time.deltaTime; if(moveUpTimer > 0f) { // move up } } gruß Cxyda
  10. Moin noah4004, Wenn du dein Android Studio startest, kannst du direkt in dem kleinen Menü am anfang (ohne das du ein projekt geöffnet hast) auf unten auf Configure und dann SDK Manager klicken (Siehe hier). Da kannst du dann alle verfügbaren SDK versionen und tools installieren. Wenn du mit deinem Unity SDK version 26 targetest dann musst du das in den SDK Tools da auswählen und installieren. Hat das nen Grund wieso du SDK version 26 willst? Die einfachste möglichkeit wäre das Android SDK nicht mit dem Android Studio zu installieren sondern über den Unity Hub und das dann Unity zu überlassen Gruß, Cxyda
  11. Moin, ja das vereinfacht deine Sache natürlich. Character Controller gibt es ziemlich viele im Netz, auch einige kostenlose die brauchbar sind ^^ Sollte auf jedenfall auch mit wenig Erfahrung machbar sein, tutorials gibts wie Sand am Meer... gutes gelingen 👍
  12. moin @Mustapha Mond ! Erstmal cooles video! 👍 Das ist auf jeden fall machbar, das (oder was ganz ähnliches) habe ich damals im studium auch gemacht und das ist wirklich kein problem. Die arbeit kommt mit der detailverliebtheit die du da rein stecken möchtest und mit dem polishen der User Experience. Ich habe damals auch angefangen mit dem First-Person-Controller, hab den dann aber irgendwann raus geworfen und einen eigenen, einfachen Controller geschrieben der mehr meinen anforderungen entsprochen hat weil irgendwas nicht richtig ging 🤔 ich weis aber nicht mehr was das war ¯\_(ツ)_/¯ du wirst es herausbekommen ob das deinen anforderungen entspricht oder nicht schätze ich ^^ Aber ja, erstmal deine ganzen meshes in Unity importieren, character controller einrichten, schauen das du dein nav mesh erzeugst (damit du nicht durch wände laufen kannst) und das wars dann für den anfang schon.... dann musst du dir eigentlich nur noch Unity3D und das WebGL package installieren und dann sollte das laufen... Allerdings sind die grafischen möglichkeiten im WebGL begrenzt wie ich damals bei mir feststellen musste (einige features wie Global Illumination sind im WebGL nicht möglich). Das hier ist mein WebGL projekt das ich damals gemacht hab, das Lighting ist ziemlich kacke wegen GI off und man muss auf jedenfalls auf Vollbild stellen sonst ist die steuerung ziemlich kacke. Einen screenshot aus von der Unity Standalone version habe ich unten angefügt. Unity war meine zielplattform deshalb hab ich nicht auf WebGL optimiert. Da kann man sicher noch einiges rausholen du könntest aber auch einfach in Blender ein interactives 360° video rendern falls du nur einen festen kamera punkt hast auf dem du dich drehen willst .. so wie das hier ... (dann könntest du auf Unity komplett verzichten) 360° Video demo: Gutes gelingen und viel spaß dabei
  13. Dafür musst du doch nur den anchor von dem ViewPort nach unten setzen 🤔 oder ich verstehe immer noch nicht was du möchtest ^^'
  14. hey @Tosek Text Mesh Pro kann das... TMP bringt auch per default ein sprite sheet mit emojis
  15. Moin @Splashy! Erstmal wilkommen im Forum! Schätze ich habe deinen Bug gefunden (gibts finderlohn ? 😜). So wie ich das sehe führst du PushAndDestroy aus wenn der spieler sich bewegt Checkst ob innerhalb 1 Unit in moveDirection ein cube is Wenn Ja setzt du MoveCube auf False Dann schaust du ob du den getroffenen Cube Pushen kannst (), falls ja (und die SPACE taste gedrückt ist) setzt du MoveCube wieder auf True Was jetzt aber passiert ist das in PushIceCube deine Update methode jedes frame aufgerufen wird. Wenn du jetzt aber im letzten Frame einen IceCube gepusht hast, du dich weiterhin bewegst während er noch näher als 1 unit ist, wird der IceCube angehalten und nicht wieder auf MoveCube = True gesetzt (wenn die space bar nicht gedrückt ist)
  16. hä? Vielleicht verstehe ich dich ja falsch aber mach einfach deinen Viewport von deinem Scroll rect am anfang nicht so groß bzw immer nur so groß wie er wegen dem Inhalt sein muss. Den rest macht das ScrollRect ganz alleine (sollte)
  17. Viel glück dabei ^^ Das ist glaube ich das meist gefragte und verlange feature im gesamten Unity UI. Ich habe auch schon wochen damit verbracht dafür eine lösung im Internet zu finden und bin gescheitert. Die einzige möglichkeit die dir bleibt ist selbst eine layout componente zu schreiben, aber ein paar worte der Warnung.... Das ist nicht trivial. Wenn du eine gut funktionierende Lösung hast die nicht nur für deinen Anwendungsfall funktioniert stelle sie in den Unity Store... damit wirst du ein paar euros verdienen können
  18. sehr schön. Du speicherst dir die GOs doch sicherlich eh in einem Array bzw einem grid ab oder ? Dann kannst du ja auch das verwenden und dir mithilfe der x und y koordinate (wenn du die eh schon hast) das GO holen und einfach mit x: +-1 und y:+-1 alle nachbarn holen 🤔 aber ja mit dem Dictionary geht auch
  19. Cxyda83

    Getrennt steuern

    Moin, eine einfache goolge suche hilft hier weiter. Wenn du z.B. "Unity Input system" suchst findest du das hier. Oder du suchst einfach nach Unity Local multiplayer
  20. Crafting MVP v0.1.0 Released! Changelog: Mehrere bugfixes im production cycle und im tutorial Werkzeuge können nun produktionen hinzugefügt werden (werden aber noch nicht konsumiert) Werkzeuge boosten die produktionen Werkzeuge haben eine haltbarkeit Werkzeuge werden bei benutzung beschädigt und ggf. zerstört Crafting MVP Demo v0.1.0
  21. Moin Hellhound, wie gesagt ich würde dir davon abraten da ich den mehrwert nicht so recht sehe ein komplexes system um eine unpassende datenstruktur zu konstruieren nur um SOs zu behalten. Aber gut wenn du das mal testen willst könntest du das schon so machen wie von Ryan beschrieben... 1) Wenn du deinen enemy spawnst registriert er sich bei einer Klasse z.B. dem EnemyHealthSystem 2) Das EnemyHealthSystem kennt alle Health SOs und informiert das UIHealthSystem darüber das eine neue HealthComponente gespawned werden soll (oder kümmert sich selbst drum) 3) Das UiHealthSystem spawned dann für jedes neue element in der liste eine neue UiHealthComponente und updatet die daten... am besten geht das wenn jede Health Componente eine einzigartige ID hat, wie z.B. die enemyID 4) Wenn der enemy stirbt meldet er sich beim EnemyHealthSystem ab und informiert dasUiHealthSystem darüber das die UIComponente despawned werden soll Das beschriebene vorgehen ist das gleiche wenn du keine SOs verwenden würdest. Du musst halt einen weg finden dieses 1:1 mapping (EnemyHealth zu UiHealthComponente) zu finden und das geht am besten mit einer ID. Eine andere möglichkeit wäre das SO direkt zu nehmen und wenn das SO dann zerstört würde davon auszugehen das auch die UIComponente gelöscht werden soll. Aber da Unity den equality comparer von System.Object überschrieben hat führt das manchmal zu seltsamen verhalten das Unity für das SO null zurück gibt (oder auch nicht) während das c# object eigentlich noch da (oder schon null) ist.
  22. Moin Hellhound, ich benutze tatsächlich auch sehr häufig ScriptableObjects sowohl in privaten als auch in professionellen Projekten und mag sie auch sehr. Allerdings gilt für SOs wie für alles andere eben auch das sie stärken und schwächen haben und eben nicht der Heilige Grahl der Spieleentwicklung sind. Sie sind super für settings oder voreingestellte Werte usw. SOs sind für die serialisierung gedacht, also um daten einfach zu Speichern und sie dann auf der Festplatte abzulegen. Ich würde dir nicht empfehlen laufzeit daten, vorallem nicht wenn du mehrere Instanzen hast mit ihnen zu realisieren. Klar geht das keine Frage und um das zur Lauzeit zu realisieren würdest du ScriptableObject.CreateInstance aufzurufen und schon hast du eine geklonte Instanz ohne referenz. Allerings schleppst du bei den SOs eben auch ne menge ballast mit der von Unity kommt und dir jede menge Tooling bietet. Wenn du diese Datenstruktur nun für 10, 100, 10.000 oder noch mehr Instanzen verwenden willst ist das sehr ineffiziet. Wie gesagt ich benutze SOs eben als Setting oder Blaupause für z.B. Werte für Einheiten. Wenn ich dann eine Instanz von der einheit erzeuge und kopiere die werte von dem SO in ein speziell dafür gedachtes struct das das ganze unnötige Zeug von SOs nicht hat (braucht man zur lauzeit eh aller höchstens beim entwickeln aber nicht mehr im fertigen Spiel). Gruß Cxyda
  23. joar das ist das typische Problem das du hier wie ein Mensch denkst (in einem 3D raum). Das ist aber nicht der Weg wie computer so etwas lösen. Im speicher liegt im prinzip alles kreuz und qure verteilt und wenn du so etwas wie ein grid haben willst ist das quasi nichts anderes als eine liste mit speicheradressen zu diesem objekt. Ein GameObject hat viele eigenschaften wie z.B. die position. Kennst du die Referenz zu dem Objekt kannst du auch die Position abfragen. Das ist das was Sascha meinte. Was du machen willst ist zum beispiel die IDs und die gameObjects in einem Dictionary ablegen Dictionary<int, GameObject> gameObjectDictionary = new Dictionary<int, GameObject>(); // dann kannst du beim erstellen alle GameObjects z.B. So adden gameObjectDictionary[ID] = myGameObject; // und wenn du dann dein GameObject wieder finden willst machst du GameObject myGameObject = gameObjectDictionary[ID];
  24. Moin @Prayer90 Dafür müsstest du dir ne eigene funktion schreiben und dann zum Beispiel über alle GameObjects gehen und die position vergleichen. Das ist ZIEMLICH ineffizient und ich würde dir je nach menge der GameObjects die du hast und nach häufigkeit des funktionsaufrufs stark davon abraten. Ich würde dir empfehlen eine andere möglichkeit einzubauen .. zum beispiel eine eigene Komponente (Monobehaviour) auf dem gameObject das sich dann z.B. Bei einer anderen Klasse (z.B. einem LocationService oder so) registriert .. wenn du dann ein GO an einer position haben willst musst du nur alle registrierten GOs (mit dieser komponente) durchsuchen und nicht alle GOs im spiel
×
×
  • Create New...