Jump to content
Unity Insider Forum

Gameobject rotieren mit Graphics.DrawMesh


Damon93

Recommended Posts

Guten Morgen :)

 

Ich habe mir gestern ein Video angesehen von der Unite2016.

(so ab der 21 Minute)

 

Da erzählt der Typ, wie er mit Graphics.DrawMesh es schafft ganz viele Coins zu drehen ohne für jeden irg. wie eine extra Animation zu erstellen was Performance sparen soll.

 

Habe dazu schon etwas recherchiert aber bin zu keine brauchbaren Ergebnis gekommen.

 

Könnte einer der weiß wie das funktioniert mir da vllt bisschen auf die Sprünge helfen?

 

Also Prinzipiell wie ich die Klasse verwende auf meinen Gameobjects und wieso ich damit mehrere Objects animieren kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe es kurz überflogen und er zeichnet damit seine "Pickup"-Coin-Meshes und animiert sie "indirekt" über die Rotation des Coin-Meshes:

public Transform[] pickups;

public void Update() {
 foreach (Transform pickup in pickups) {
Graphics.DrawMesh(coinmesh, pickup.position, manager.transform.rotation, pickup.material, 0);
 }
}

Er geht dabei über eine Schleife durch alle seine Coins (ist wohl ein Array oder eine Collection, die die Positionen für die Coins definiert) und ein Managerobjekt steuert dabei die aktuelle Rotation der Coins (somit rotieren alle Coins gleich, sieht man auch in seinem Video, finde ich aber eher unschön).

Der Code wird denke ich in einer Updatemethode einer Klasse aufgerufen, da "Graphics.DrawMesh" den Mesh nur für 1 Frame darstellt.

Ich stelle mir nur die Frage, wie er das Einsammeln der so erzeugten Coins erledigt, da so natürlich keinerlei Collider erzeugt werden (ggf. kann er aber über die Positionen der Coins gehen, diese sind ja fest definiert).

 

https://docs.unity3d...s.DrawMesh.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Coins, die er da in siner Liste hat, sind mit Sicherheit GameObjects, die wiederum Collider haben. Das macht allerdings die Verwendung eines Arrays zum Halten der Transform-Referenzen ein wenig stussig.

 

Was ich mich halt frage ist, wieso Graphics.DrawMesh günstiger sein soll als normales Rendern.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wusste gar nicht dass es so eine Funktion gibt.

 

Den Docs nach sparst du dir halt, dass das Mesh als GameObject in der Szene sein muss. So gesehen also weniger "Datenmüll"

Denke aber mal dass das in den meisten Fällen kaum einen Unterschied macht :D

 

https://docs.unity3d.com/ScriptReference/Graphics.DrawMesh.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast das Mesh ja trotzdem geladen, sonst könntest du keine Referenz an DrawMesh übergeben.

 

Die Funktion ist an einigen Stellen sinnvoll, aber wenn du 20 Coins in deiner Szene hast, die im Laufe von 20 Minuten alle verschwinden, dann ist das keine nennenswerte Menge an GameObject-Instanziierungen.

DrawMesh wird wohl nicht mehr Batching machen als es Unity sowieso schon mit jedem MeshRenderer macht :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke er hat in seinem Array nur Transforms gehalten (und auch die finde ich überflüssig) und die Funktion kommt eben ohne GameObjekts aus. Ich könnte mir vorstellen, das es bei vielen Kopien des gleichen Meshes in einer Szene Sinn macht. Viele instanziierte Objekte in einer einer Szene verbrauchen schon Performance und Speicherplatz, und die spart man sich so. Man sagt quasi, render mir mal in diesem Frame 200 Kopien von dem übergebenen Mesh, aber wie Sascha schon sagt, ob es bei 20 Kopien groß ins Gewicht fällt bezweifel ich auch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also meint ihr alle das es nicht wirklich Sinn macht. Der Typ aus dem Video sagt ja dass er durch ne große Anzahl von ca. 30 fps durch diese Methode auf 60 fps gekommen ist. Is für mich schon ein großer Performance unterschied.

 

Da ich in meiner Szene aber maximal 50 Coins haben werde denke ich werde ich nach euren Aussagen alles separat Animieren :) Zumal ich die Klasse etc. auch nicht wirklich verstehe^^

 

Danke dennoch für eure Antworten!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nene, nicht falsch verstehen! Wenn er sagt, das wprde helfen, dann probier's halt aus! Werde ich wohl auch nochmal bei Gelegenheit machen. Was ich nur meinte ist, dass ich nicht ganz sehe, wie das helfen soll.

Wenn sich bei einem Experiment jetzt ergibt, dass das wirklich ganz toll hilft, dann wäre der nächste Schritt zu ermitteln, warum das so ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...