Jump to content
Unity Insider Forum

Zer0Cool

Members
  • Content Count

    2,005
  • Joined

  • Last visited

  • Days Won

    141

Zer0Cool last won the day on July 18

Zer0Cool had the most liked content!

Community Reputation

406 Excellent

8 Followers

About Zer0Cool

  • Rank
    Advanced Member
  • Birthday 01/04/1974

Profile Information

  • Gender
    Male
  • Location
    Germany

Contact Methods

  • Skype
    zer0f0rce

Recent Profile Visitors

8,085 profile views
  1. Wie @SkipToPlay schon sagte sind Reflection Probes statisch im Raum verteilt (um eine entsorechende Abdeckung zu erzeugen) und normalerweise auch "baked" in einem Raum dessen Lichtverhältnisse sich nicht ändern und beides trifft bei dir denke ich zu. Möchte man dynamische Objekte in die "Reflection Probes"-Berechnung mit einfließen lassen, dann verwendet man Typ "Realtime". Ansonsten wenn sich beim Bewegen des Characters die Reflections ändern stimmt etwas anders nicht... bspw. Lichtquellen, Lightmap-Settings oder verwendete Shader.
  2. Stoppt wirklich dein Skript oder aktualisiert sich nur deine UI nicht? Ich würde eher auf letzteres Tippen. Tue mal ein Debug.Log in deine Update-Methode rein und schau ob die Logausgaben tatsächlich stoppen.
  3. Ich hatte die Punkte und Linien so "gemalt" und den Quellcode unterschlagen, da es quick und dirty war, aber wenn es dir hilft. Diese Klasse an den 2D-Collider hängen der die Collision bekommt (die Gizmos siehst du nur im Sceneview). Wenn gerade keine Collision stattfindet zeichnet er trotzdem die letzte Collision. using System.Collections; using System.Collections.Generic; using UnityEngine; public class DrawCollider2D : MonoBehaviour { private List<Vector3> contactPoints; private List<Vector3> normalPoints; void OnCollisionEnter2D(Collision2D collision) { contactPoints = new List<Vector3>(); normalPoints = new List<Vector3>(); ContactPoint2D[] contactPoint2d = collision.contacts; foreach (ContactPoint2D cPoint in contactPoint2d) { contactPoints.Add(cPoint.point); normalPoints.Add(cPoint.normal); } } void OnDrawGizmosSelected() { if (contactPoints != null) { Gizmos.color = Color.blue; foreach (Vector3 cPoint in contactPoints) { Gizmos.DrawWireSphere(cPoint, 0.02f); } } if (normalPoints != null) { Gizmos.color = Color.red; int i = 0; foreach (Vector3 nPoint in normalPoints) { Gizmos.DrawLine(contactPoints[i], contactPoints[i] + nPoint); i++; } } } }
  4. Wenn du die Kontaktpunkte und die Normalen-Vektoren bei einer Kollision ausliest, dann sieht das in etwa so aus. An der Richtung der (beiden) Normalenvektoren kannst du also erkennen, auf welcher Seite des Box-Colliders die Kollision stattgefunden hat (wie Sascha schon geschrieben hatte). (rot = Normalenvektoren / blau = Kollisionspunkte / grün Boxcollider)
  5. @peachplayer Du musst immer Referenzen auf deine instanzierten GOs behalten (indem du die GOs in eine Liste oder in ein Array packst), dann kannst du diese später auch wieder mit Destroy löschen. Wenn diese immer noch nicht gelöscht werden, dann erzeugst du vermutlich immer noch irgendwo mit Instantiate GOs die du in keiner Liste zwischenspeicherst. Ansonsten waren deine Codebeispiele mit dem Löschen der GOs anhand einer Liste soweit richtig.
  6. Du kannst deinen Prefabs auch eine Klasse verpassen und dann einfach alle Objekte in der Scene mit dieser Klasse suchen. Wenn du alle Instanzen dieser Klasse hast, dann gehst du einfach die Positionen ihrer Transforms durch: MeineKlasse[] allObjects = FindObjectsOfType<MeineKlasse>(); foreach (MeineKlasse go in allObjects) { Debug.Log(go.transform.position); }
  7. Dein Problem ist ja eigentlich, dass deine Kamera unter den Horizont schaut und der ist halt grau. Ich würde die Scene nach hinten soweit verlängern, dass der Boden mit dem Horizont abschließt. Hierfür müsstest du eigentlich nur den Boden verlängern. Zusätzlich könntest du die Szene mit einer Art "Wall" umschließen damit die Kamera nicht unter den Horizont blicken kann. Diese Wall würde dann ebenfalls Nebel erzeugen. Hier das Ergebnis von einem kleinen Test:
  8. Schau mal ob das Windows-Form oder Formular folgende Eigenschaft hat. Diese Eigenschaft sollte das Formular permanent im Vordergrund halten. this.TopMost = true;
  9. Das Terrain hat diverse Settings die die Performance beeinflussen: Pixel Error (higher = faster) Base Map Dist. (lower = faster) Cast Shadows (off = fastest) Reflection Probes (off = fastest) Detail Distance (lower = faster) Detail Density (lower = faster) Tree Distance (lower = faster) Billboard Start (lower = faster) Max Mesh Trees (lower = faster) Detail Resolution Per Patch (higher = faster) Detail Resolution (lower = faster) Am meisten Performance verbrauchen die Terrain Details. Beispielsweise Gras und oder auch Bäume. Das LOD für den Terrainmesh berechnet Unity selbst. Für Bäume gibt es kein LOD, hier werden entweder die Meshes als ganzes verwendet oder Billboard (siehe Billboard Start). Eine Ausnahme bilden spezielle "Asset-Bäume" wie SpeedTree. SpeedTree besitzt LODs und diese werden auch vom Terrainsystem berücksichtigt.
  10. Sehe ich auch so, einige Kurse oder Zertifikate sind das Papier nicht wert auf dem sie stehen. Ich denke ein gutes Portfolio und Referenzen über die Mitarbeit bei anderen Projekten ist hier mehr Wert als solche Zertifikate. Man muss sich immer die Frage stellen, welche Programmierer würde ich selbst für mein Projekt einstellen.
  11. Es sollte auch gehen die im Shader berechneten Höhen und Tiefen über eine Rendertexture auszugeben (siehe auch Graphics.SetRenderTarget() und Graphics.DrawMeshNow). Diese Rendertexture würde dann über einen 2. "Spezialshader" erzeugt, der diese Höhendaten dann über die RGBA-Channels ausgibt. Dieser 2. Shader muss natürlich mit den gleichen Eingabedaten wie der Originalshader laufen.
  12. Hab mir nicht alles im Detail angeschaut, aber was er hier macht ist, er erzeugt eine Instanz aus dem Ability-Asset (ScriptableObject) mit dem Namen "_abilityName" und läd das Asset dabei über Resources.Load. Danach packt er diese Ability zu den verfügbaren Abilities des Spielers.
  13. Erst einmal der Mesh-Renderer hat dem Collider direkt nichts zu tun, außer das der Mesh für die "Konstruktion" des Colliders benötigt wird. Stellst du also den Mesh-Renderer aus ist der Collider ggf. immer noch aktiv. Zum anderen kann es an Einstellungen deines Spieler-Controller liegen, dieser hat zumeist "Slope"-Einstellungen und "Step-Offset"-Einstellungen für den Charakter, d.h. eine Einstellung dafür wie steil oder wie hoch ein Collider sein darf, damit der Charakter diesen Collider noch überwinden kann. Für deine Treppen müsste man die "Step-Offset"-Einstellung erhöhen (d.h. die Höhe die der Charakter überwinden kann). Ist diese zu niedrig eingestellt kommt der Charakter die Treppen nicht hoch. Wenn dein Charakter in der Luft stehen bleibt kann dies auch wieder ein entsprechendes Setting des Controllers sein. Einige Controller (wie z.b. der Third Person Controller aus den Unity Standard Assets) haben ein Setting welches bestimmt wie weit der Charakter nach dem Boden sucht. Dieses Setting heißt beim TPC aus den Standard Assets von Unity beispielsweise "Gound Check Distance". Ist diese zu klein eingestellt, dann findet der Controller den Boden nicht mehr und der Charakter bleibt einfach in der Luft stehen.
  14. Rechenleistung ist halt sehr relativ und hängt stark von dem Spiel ab und von der Optimierung des Game-Servers. 1000 Spieler sollte ein durchschnittlicher Server eigentlich leicht verkraften können. Ich würde mir bei einem Game-Server eher Sorgen um die verfügbare Bandbreite machen sowohl Up- als auch Downstream und auch um die Datenkapazität insgesamt (traffic per month). Viele Cloud-Anbieter verdienen sich genau daran eine goldende Nase. Mehrere 1000 Spieler können dich bei einem Cloud-Anbieter leicht mal zwischen 1000-2000 Euro im Jahr kosten. Daher macht dies meiner Meinung nach erst Sinn, wenn über das Spiel auch Einnahmen generiert werden.
  15. Meinst du 2D-Figuren, dann die Z-Koordinate der Figuren entsprechend anpassen bis sie sich vor dem Hintergrund befinden (in Richtung negativ).
×
×
  • Create New...