Jump to content
Unity Insider Forum

RayCastHit reagiert zu langsam


jan1267

Recommended Posts

Hi, 

ich habe in Unity eine kleine Sache programmiert. Ihr müsst es euch so vorstellen. Ich verwende 64 Cubes als eine Art Bildschirm. Jeder Cube kann durch Berührung der Maus seine Fabre ändern. Also ich habe noch drei Farben hinzugefügt. Das heißt, wenn man auf eine Farbe klickt und dann über die 64 Cubes streicht (zum Beispiel) auf dem Handy, verändern die Cubes ihre Farbe. Im Prinzip kann man so diese Fläche aus Cubes anmalen. Das ganze mache ich mit einem Ray. Dieses folgt durchgehend dem Mauszeiger und, wenn ein Hit von einem Cube kommt wird halt der jeweilige Cube gefärbt. Das klappt auch wunderbar, allerdings werden bei sehr schnellem Wischen manche Cubes übersprungen. Wahrscheinlich kommt der/das Ray nicht schnell genug hinterher. Nun frage ich mich wie man das ganze verbessern kann, damit es auch bei schnellen Wischgesten flüssig aussieht? 

Danke schon mal :)

Forum.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin mir da nicht sicher, ob dein Ray zu selten schießt oder ob deine Fingerposition einfach zu selten abgefragt wird.

Du kannst jedenfalls den Fixed Timestep im Time Manager verringern. Der steht wahrscheinlich bei dir auf 0.02. Setz den mal auf 0.01 und schau ob sich etwas verbessert.

Der Fixed Timestep ist der Zeitintervall, in dem alles Physikalische berechnet wird und ein Raycast ist auch eine  physikalische Berechnung.
Jeder Verringerung des Intervalls kostet einiges an Performance und ich weiß nicht, wie weit die Handys da mitspielen. Also geh vorsichtig mit diesen Werten um.

Sollte sich durch die Verringerung nichts verbessern, dann wird entweder zu langsam oder zu ungenau die Fingerposition abbgefragt, oder du machst das im Code nicht in der FixedUpdate und somit ist die Abfrage der Position nicht synchron mit der Physik..
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für ein 8x8 'Pixel' Feld sollte die Abfragerate zu erhöhen ganz gut funktionieren.

Falls du in Zukunft aber auch mit größeren Feldern arbeiten willst, wirst du damit evtl. Performance Probleme bekommen..

Alternativ kannst du dir immer die Fingerposition vom vorherigen Frame merken und dann alle Würfel anmalen, die zwischen der alten und neuen Position liegen.

Unter 'line rasterization' solltest du da fündig werden..

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 14 Stunden schrieb malzbie:

Der Fixed Timestep ist der Zeitintervall, in dem alles Physikalische berechnet wird und ein Raycast ist auch eine  physikalische Berechnung.

Tut mir Leid, "that guy" sein zu müssen, aber das ist einfach völlig falsch. Der Fixed Timestep ist dafür da, zwei Dinge auszulösen: Das FixedUpdate-Event und das Physik-Update über PhysX bzw. Box2D.

Physics.Raycast ist eine ganz normale Funktion - man ruft sie auf, sie wird ausgeführt, sie gibt etwas zurück, fertig. Das passiert sofort und ansich unabhängig von jeder Art von Timestep.

Wovon das Ergebnis in dieser Situation tatsächlich abhängt, ist die Rate, in der das Event passiert, in dem Physics.Raycast durch @jan1267s Code ausgeführt wird. Ich gehe stark davon aus, das der Aufruf in Update passiert. Damit hängt die Genauigkeit von der Framerate des Programms ab, und damit von der Leistungsfähigkeit des Geräts. Dass das keine gute Sache ist, kann man sich vorstellen.

@Mr 3d hat daher schon die richtige Richtung vorgeschlagen. Du willst nicht jeden Frame schauen, wo der Finger gerade drüber ist und dann damit etwas machen. Wenn der Finger sich kaum oder gar nicht bewegt, ist das auch unnötige Arbeit, die das Programm da verrichten muss. Stattdessen willst du den Weg anschauen, den der Finger zwischen letztem Frame und jetzigem zurückgelegt hat, und dann mit einem passenden Algorithmus ausrechnen, welche Würfel alle von diesem Weg abgedeckt werden. Es bleibt nur zu bestätigen:

vor 14 Stunden schrieb Mr 3d:

Unter 'line rasterization' solltest du da fündig werden.. 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...