Jump to content
Unity Insider Forum

All Activity

This stream auto-updates     

  1. Yesterday
  2. Ist halt auch nicht gerade günstig: https://assetstore.unity.com/packages/tools/terrain/path-painter-163352 kostet weniger aber ob es was taugt weiß ich nicht: https://assetstore.unity.com/packages/tools/terrain/terrain-mountain-road-maker-60550 Ansonsten die Terrain Splatmap(s) exportieren, in Photoshop bearbeiten und dann wieder importieren ist am billigsten. PS: Ich bin gerade dabei eine Art Terrain-Deformer zu erstellen, theoretisch sollte dieser in der Lage sein einen Pfad auf einem Terrain zu berechnen. Ich müsste das Tool nur im einen Spline und Meshgenerator ergänzen. Das Tool ist wenn es fertig ist dazu in der Lage das Terrain an beliebige Geometrie anzupassen. Vornehmlich war die Idee damit Häuser ins Terrain einzubetten ...
  3. Wichtig ist die Frage wo du die Physik, Collider und so was berechnen willst. Ich selbst schreibe meinen Server in Unity. Dort läuft auch eine Map und die NPC's werden dord berechnet und alles. Diesen builde ich dann Headless als Linux build. Es wird also grafisch nichts berechnet aber ich kann die Grundfunktionen, Physik, Collider und alles auf dem Server berechnen. Wenn du alles auf dem Client berechnen lässt wird es leicht hackbar nach meinen Erfahrungen. Schau dir doch mal die Videos von Tom Weiland an. Das ist ein Kollege der mal eine gute Tutorialreihe dazu gemacht hat. (C# Networking Tutorials)
  4. Hallo Ich benutze einfach eine statische Klasse und packe dort die entsprechenden Funktionen rein. Diese Date nehme ich dann von Projekt zu Projekt mit. Ist nicht sehr elegant, aber wunderbar simpel: namespace Chrische { public static class Tools { public static Vector3 GetMouseWorldPostion(Vector2 mousePosition) { return Camera.main.ScreenToWorldPoint(Input.mousePosition); } public static T GetChildComponentByName<T>(GameObject objectToSearch, string componentName) where T : Component { foreach (T component in objectToSearch.GetComponentsInChildren<T>(true)) { if (component.gameObject.name == componentName) return component; } return null; } public static List<T> GetChildComponentsByName<T>(GameObject objectToSearch, string componentName) where T : Component { var items = new List<T>(); foreach (T component in objectToSearch.GetComponentsInChildren<T>(true)) { if (component.gameObject.name == componentName) items.Add(component); } return items; } public static T GetMax<T>(params T[] numbers) { return numbers.Max(); } public static T GetMin<T>(params T[] numbers) { return numbers.Min(); } Christoph
  5. Ich suche ein Tool (kostenlos oder kosten-günstig) um Wege und Pfade in Terrains zu erstellen. Also so eine Art Spline-Tool, was die Oberfläche des Terrains modelliert. Bis lang habe ich EasyRoads gefunden, aber vielleicht gibt es noch alternative Tools ? Mir geht es in erster Linie um das Modellieren des Terrains und nicht um die Strassenmeshs. LG Vreezer
  6. Ich würde sogar empfehlen, ein Git-Repo zu erstellen, aber... eins nach dem anderen. Github hat auch eine nette "Gists"-Sektion, die sieht bei mir so aus. Sachen, die du nicht (oder zumindest: nicht ausschließlich) alle in einem Paket haben willst, können da sehr schön hin. Das geht auch mit einem Git-Repo sehr gut - du musst es ja nicht bei Github oder so hochladen, sondern kannst es lokal behalten. Namespaces sind nett, um den Scope etwas kleiner zu halten. Oder anders gesagt: Wenn du anfängst, zu tippen, dann ploppen dir da ja Vorschläge auf. Und diese Liste kann man etwas kürzer halten, indem man seine Sachen in Namespaces packt. Namespaces erlauben dir aber nicht, Code in dein Projekt zu importieren oder so. Der Code liegt entweder vor oder er tut es nicht. Eine using-Direktive hat darauf keinen Einfluss. Gerne! Was du haben willst, ist ein Paket, das der Paketmanager für dich importiert. Seit Unity 2018.irgendwas hast du ja zwei Hauptordner in deiner Project View: "Assets" und "Packages". Assets ist für alle Dinge, die für dein Projekt spezifisch sind, während Packages eben Pakete enthält, die nicht speziell für dieses Projekt sind, sondern generell eingesetzt werden können. Ein Paket erstellst du, indem du ein Paket-Manifest in einen Ordner voller Assets legst. Dafür will Unity afaik noch Editor-Support bauen. Laut Manual funktioniert das Manifest Window in 2019.4, tut's bei mir aber nicht. Also bastelst du dir im Moment einfach eine json-Datei in einem beliebigen Text-Editor. Das sieht dann etwa so aus. Die Datei muss dabei genau "package.json" heißen. Erstelle dir gerne eine Kopie von meinem Manifest und passe es an. Nette Falle: Die Versionsnummer muss dem Schema "x.x.x" entsprechen, "x.x" (z.B. "0.1" statt "0.1.0") ist nicht erlaubt. Dann müssen noch alle Scripts einer Assembly Definition untergeordnet sein. Dazu kannst du in deinen Assets rechtsklicken, "Create", und dann "Assembly Definition". Dem Ding gibst du einfach einen sinnvollen Namen - bei mir gibt's ein Paket namens "Unity-Essentials" (), und die asmdef-Datei heißt dann "ThirteenPixels.Unity-Essentials". Schau dir den Aufbau auch gerne genauer in meinem Projekt an, das ich verlinkt habe. Wenn das Paket so eingerichtet ist (klingt nach viel Arbeit, aber da gewöhnt man sich ganz schnell dran), dann kannst du in deinem Projekt, in dem du das Paket importieren willst, den Paketmanager dafür benutzen. Den findest du oben unter "Window", "Package Manager". Damit der auch richtig funktioniert, solltest du auf jeden Fall Unity 2019.3 oder höher benutzen, davor hatte der noch erhebliche Mängel und man musste per Hand Dinge in eine Textdatei eintragen. Sobald du den Paketmanager offen hast, kannst du das hier auswählen: Und dann im Dialog die package.json raussuchen und auswählen. Der Paketmanager importiert jetzt das Paket und packt es in den Packages-Ordner deines Projekts: Um da jetzt noch auf den Anfang zurück zu kommen: Du kannst wunderbar aus deinem Paket ein Git-Repo machen, dann hast du schon einmal Versionierung (was super ist). Optional kannst du das Repo dann auch noch auf Github oder sonstwo hinpushen, dann hast du direkt noch ein Online-Backup und kannst von überall auf das Paket zugreifen (wenn du mal an einem anderen Rechner sitzt oder jemand anderes mit dir arbeitet). Öffentlich kann so ein Ding auch super für dein Portfolio sein. Zu guter Letzt finde ich es irgendwie simpler, Updates von Paketen zu ziehen, wenn diese in einem Git-Repo sitzen. Statt "from disk" wählst du sonst im Paketmanager dann "from git URL" aus und fertig. Jedenfalls ist das dann auch nicht mit Kanonen auf Spatzen schießen Damit sage ich nicht, dass du das machen musst - wie gezeigt kannst du Pakete auch einfach von der Platte laden.
  7. Hallo zusammen, langsam wächst mein Anfängerwissen über Unity, und ab und zu schreibe ich eine Funktion/Method, die ich in anderen kleinen Projekten wiederverwenden möchte. Github möchte ich dafür nicht in Anspruch nehmen, das halte ich für Schießen mit Kanonen auf Spatzen. Mein Gedanke ging in die Richtung, dass ich gern eine zentrale Sammlung lokal auf meinem Rechner erstellen möchte, wo ich meine Methods sammle und von wo aus ich mein gesammeltes Wissen anzapfen kann. Da ich am Beginn eines C#-Scripts gesehen habe, dass ich dort eine Using-Anweisung platzieren kann, versuchte ich, selbst so etwas zu erstellen und stieß auf den Begriff "Namespace". Doch es will mir einfach nicht gelingen, so etwas hinzubekommen. Leider finde ich auch in den einschlägigen Foren und im Internet nichts darüber. Ich weiß auch nicht, ob das mit dem Namespace tatsächlich richtig ist. Ich dachte, ich könnte zum Nachvollziehen der Vorgehensweise die dort oben im C#-Script genannten Dateien auf meiner Festplatte finden, indem ich nach "UnityEngine.UI" oder ähnlichem suche, doch dann wird man mit Ergebnissen zugeschüttet. Mehrere hundert wenn nicht tausend Dateien vom Typ DLL erscheinen, mit denen ich so direkt nichts anfangen kann. Half also nichts. Es muss doch einfacher gehen. Deshalb meine Frage ins Forum, ob sich jemand damit auskennt und mir mit ein paar Worten erklären kann, wie man das macht. Ich wäre euch sehr dankbar, dann müsste ich meine Funktionen nicht in jedes C#-Script kopieren. Diese Kopiererei macht die Pflege der Funktionen/Methoden nicht gerade einfach, vor allem dann nicht, wenn man mal etwas daran ändert. Viele Grüße aus Brühl, André
  8. Moin, in der Regel wird bei Game Servern TCP, oder UDP verwendet. Du kannst einen TCP Server ohne Probleme in C# mit .Net Core auf Windows entwickeln und auf Linux laufen lassen. Der Linux Server muss nur .Net Core installiert haben. Es gibt eine Reihe von Videos, die zeigen, wie man einen TCP Server für Unity in .Net Core baut: Tom Weiland Wenn du den Server rein aus Interesse an der Materie selber machen möchtest hast du damit auf jeden Fall schon einmal einen Anhaltspunkt. Wenn dich Networking nicht so interessiert und du lieber weiter an deinem Spiel arbeiten möchtest, würde ich dir eher raten auf etwas zurückzugreifen, was schon existiert. Ich persönlich bin kein großer Fan von Photon, weil du da pro CCU zahlen sollst. Habe aber schon ziemlich viel gute Erfahrung mit Mirror gemacht, das ist kostenlos, Open Source und hat eine gute Dokumentation. Liebe Grüße
  9. Last week
  10. Ja ist ein Webserver (und Apache kann man natürlich auch verwenden) und die Kommunikation läuft über HTTP, aber HTTP zu verwenden sollte für einen Gameserver in Ordnung sein. Klar hat HTTP einiges an Overhead das durch die Leitung geht, daher kann eine Lösung wohl auch ein TCP-Server oder sowas sein, aber damit kenne ich mich nicht aus. Ich denke je höher der Traffic des Spiels später sein wird desto mehr sollte man vielleicht in Richtung TCP gehen um Bandbreite zu sparen. Man kann sogar mit Unity einen "schlanken" Server bauen, hätte den Vorteil das Client und Server zusammenpassen. Und dann gibt es auch noch Frameworks wie Photon- oder Smartfox-Server ... Einige Smartphonespiele verwenden sowas und sind vollkommen zufrieden damit. Hier hat auch mal jemand danach gefragt, aber so genau kenne ich mich mit Socket-Programmierung nicht aus:
  11. Hi, Tomcat ist doch ein Webserver, oder? Kann man da mit Sockets arbeiten, oder läuft was alles über Web-Requests? Bei Web-Requests bin ich mir nicht sicher, wie performant das Alles dann wird, da man ja zB bei Json auch jede Menge Overhead hat. (Ich bin eigentlich Web-Entwickler, aber eher PHP, dH ich könnte doch auch einen Apache nutzen, oder?) Gruß
  12. Danke für die Rückmeldung! Freut mich das es geklappt hat
  13. Problem gelöst: Ich hatte "AudioClip" statt "AudioSource" in meinem Skript😀
  14. Danke für die vielen Antworten! Ich habe es gemacht wie Hermetes es erklärt hat. Trotzdem bekomme ich nur diese Fehlermeldung: Assets\Scripts\SlimeControl.cs(43,27): error CS1061: 'AudioClip' does not contain a definition for 'volume' and no accessible extension method 'volume' accepting a first argument of type 'AudioClip' could be found (are you missing a using directive or an assembly reference?)
  15. Ja, du musst auch nicht den ganzen Server "neu" entwickeln. Man nimmt beispielsweise einen Tomcat-Server (ist derzeit recht verbreitet), dieser läuft sowohl auf Windows als auch auf Linux problemlos. Im nächsten Schritt entwickelt man dafür beispielsweise ein Servlet (in Java) welches die Kommunikation mit den Clients implementiert. Das fertig programmierte Servlet wird dann auf den bereits laufenden Tomcat unter Linux deployed. Während der Entwicklung lässt man den Server dann lokal unter Windows laufen. Ein Servlet ist zumindest für kleinere Games völlig ausreichend, aber selbst größere Games könnte ich mir damit gut vorstellen, wenn man entsprechend die Skalierbarkeit mit einplant. Die Verwendung eines Tomcat hat auch den Vorteil das einige "sicherheitsrelevante" Mechanismen bereits implementiert sind und man sich darum nicht mehr im Detail kümmern muss. Zudem kann man in der Entwicklung ein "Hot-Deploy" einrichten wobei der Server nicht neu gestartet werden muss, wenn man Änderungen am Servlet deployen möchte.
  16. Hi, Danke für die Antwort. Wenns möglich ist, würde ich gerne nen Linux Server verwenden, da er einfach billiger ist. Kann ich denn mit Java lokal auf Windows entwickeln und dann das Programm auf dem Linux-Server laufen lassen? Meine Java-Zeit ist leider schon ein paar Jahre her, und da waren es auch nur Android Apps Gruß
  17. Ich kann dir nur berichten, dass es mit Java kein Problem darstellt. Mit C# unter Linux habe ich keine Erfahrung, lese aber gerade Mono und .Net Core wird unter Linux unterstützt. Nach meiner Erfahrung lässt man C# dann aber eher auf Windows-Servern laufen und die meisten Cloud-Anbieter bieten beide Servertypen an. Da jetzt Java und C# sich doch ziemlich ähnlich sind würde ich in deinem Fall dann eher in Java entwickeln.
  18. Hi, die Frage hat nur peripher mit Unity zutun. Ich möchte (bzw. bin dabei) ein Online RPG zu erstellen. Der Client läuft natürlich unter Unity. Den Server würde ich gerne auf einem Linux-Server laufen lassen, allerdings nicht mit Unity. Welche Möglichkeiten hab ich als Programmiersprache für den Server? Macht es Sinn, bzw. ist es ohne Weiteres möglich, den Server in C# zu entwickeln und dann auf dem Linux Server laufen zu lassen? (Mono?). Alternativ wäre noch Java eine Möglichkeit. Kann man da auf Windows Entwickeln und dann auf den Linux-Server hochladen und starten? Oder muss ich da auch auf einem Linux-Rechner entwickeln? Oder gibt es noch einfachere Möglichkeiten? Für Tipps bin ich dankbar ;) Gruß
  19. Danke,es war das mit den Billboards.
  20. Nur der Vector3 wird nicht erkannt. Das mit dem Rigidbody usw. hat bisher alles funktioniert. Bin halt noch am lernen.
  21. Joa, Physik und eigentlich alles, was nicht streng linear ist und immer überall konsistent passieren soll, sollte in (einem) FixedUpdate passieren.
  22. Hier mal der gesamte Code : https://hastebin.com/bipiwotuli.cs So was ich nach etwas mehr Debugen gemerkt habe ist das die neue Position zwar neu berechnet wird aber Unity wohl manchmal zu langsam ist den Player zu bewegen . Also rb2d.MovePosition. Wenn ich die position mit transform.position ändere funktioniert alles. Jetzt noch meine Frage muss ich die position mit rb2d.MovePosition in fixedUpdate ändern oder geht das noch anders. Danke für die Hilfe
  23. Ich vermute mal du hast die Bäume auf das Terrain gemalt... Ab einem bestimmten Abstand rendert Unity dabei nicht mehr die Bäume, sondern ersetzt diese durch einfache Billboards (die sind einfache 2D-Grafiken die sich immer zu der Kamera drehen) die das Terrainsystem automatisch erzeugt. Die Bäume werden dann über einen Billboard-Renderer gerendert. Du kannst einmal Testen, ob die grauen Bäume tatsächlich Billboards sind, indem du die Distanz ab dem die Billboards angezeigt werden verschiebst. Dabei müsst du den "Billboard Start" verändern: https://docs.unity3d.com/Manual/terrain-OtherSettings.html Leider kenne ich das Problem mit den grauen Billboards. Das Problem kann dabei folgende (mir bekannte) Ursachen haben: Deine Light-Settings in der Scene sind noch nicht korrekt eingestellt. Hier kann man beispielsweise die Lightmap für die Scene erzeugen (siehe "Generate Lightning"): https://docs.unity3d.com/Manual/Lightmapping.html Damit bekommen auch die Billboards eine andere "Beleuchtung": Eine andere Ursache war einmal die Fog-Einstellungen in Unity. War der Fog aktiviert, dann führte dies dazu das die Billboards quasi als im Nebel dargestellt wurden und damit grau wurden. Die Einstellung für Fog ist ebenfalls im Lightning-Fenster im Szene-Tab (oder bei HDRP im Post-Processing Profil). Du kannst ja mal schauen, ob hier ein Haken gesetzt ist. Sollte man hier die Einstellung verändert haben, dann kann es sein, dass man noch einmal all Texturen der Bäume bzw. das Asset neu importieren muss, damit Unity die Billboard-Texturen neu berechnet. Eine weitere Ursache (und auf diese Ursache würde ich tippen) kann das verwendete Baum-Asset sein, es gibt leider Assets bei denen die Erzeugung der Billboards über Unity nicht richtig funktionert, hier hilft es meist nur das Asset auszutauschen. Dabei kann das Problem die verwendeten Shader dieses Assets sein, das verwendete Baummodel oder allgemein ein "falsch" eingestelltes Asset. Es gibt auch "Lösungen" die dann den Billboard-Renderer manipulieren, aber meist erzeugt man dann damit nur andere Probleme (wie glänzende oder weiße Bäume in der Nacht etc.) Bezüglich der Shader, du kannst auch einmal prüfen, ob dein Baum-Asset einen der folgenden Shader in seinen Materials verwendet, wenn nicht, dann könnten die verwendeten Shader "inkompatibel" mit dem Unity-Terrain sein und so das Problem verursacht werden:
  24. Hallo ich bin derzeit an einem Unity Projekt seit kurzem habe ich das Problem,dass Bäume welche weiter vom Spieler entfernt sind weiß sind. Kann man dagegen was machen?
  25. "Mein Input wird manchmal nicht erkannt" klingt ganz stark nach Get(Button/Key/MouseButton)(Down/Up) in FixedUpdate. Denk dran, dass FixedUpdate mehrere Male oder kein Mal zwischen zwei Updates vorkommen kann und das Input immer in Update aktualisiert wird. Wenn du also den Knopf drückst und dann zwei FixedUpdates hast, dann ist GetKeyDown in FixedUpdate zweimal hintereinander true, weil es erst beim nächsten Update wieder false wird. Wenn du kein FixedUpdate zwischen dem Drück-Update und dem danach hast, in dem der Input wieder false wird, dann fällt der Input komplett flach. Daher: Down- und Up-Inputs in Update abfragen und bis zum nächsten FixedUpdate behalten; dann wieder auf false setzen.
  26. Schwer zu erkennen, da ich den Inhalt einiger Variablen nicht kenne, normal sollten Input-Eingaben immer in der Update-Methode gemacht werden. Ansonsten bau doch mal ein Debug.Log ein und schau was bei dem Mausklick herauskommt: (siehe Scene-View) Vector2 moveToPos = playerPosition - direction * distance Debug.Log("Wir bewegen uns zu: " + moveToPos); Debug.DrawLine(new Vector3(playerPosition.x,playerPosition.y,transform.position.z) , new Vector3(moveToPos.x,moveToPos.y,transform.position.z), Color.red, 2.5f); rb2d.MovePosition(moveToPos);
  27. There are some Bluetooth assets in the asset store.
  1. Load more activity

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...