2017-09-17 2 views
0

Ich versuche ein Spin-Rad zu machen, das in 6 Abschnitte unterteilt ist. Jeder Abschnitt ist mit einem gameObject markiert, das in diesem Bereich zentriert ist. Nachdem der Spieler das Rad gedreht hat, dreht es sich, bis es anfängt zu stoppen und dann bewegt sich das Rad und stoppt in der Mitte basierend auf dem ausgewählten Abschnitt (Zufällig). Ich habe den folgenden Code verwendet, um das Rad in Richtung 0 auf der X-Achse zu drehen. Dieser Code funktioniert gut und das Rad dreht sich gut, aber nur, wenn der ausgewählte Abschnitt auf der positiven X-Achse war.Drehrichtung einstellen Unity C#

float rotateFloat = (((randomReward + 1) * 60) - 30) - transform.rotation.z; 
Quaternion targetRotation = Quaternion.Euler(new Vector3(0, 0, rotateFloat)); 
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, f_difX * Time.deltaTime); 

Ich habe einige graben und fand, dass Quaternion.RotateTowards() den nächsten Weg zum Ziel findet und dreht sich diese Richtung mit (dies ein Problem mit der Drehrichtung verursacht).

Beispiel (Bild folgen): Der Spieler wischt und randomReward (Nummer 5 am Spin-Rad) und das Rad beginnt zu drehen. Wenn das Rad langsamer wird, bewegt es sich in Richtung der Mitte. Dann hört es auf, sich entlang der Wischrichtung zu drehen und dreht sich zur anderen Seite hin (Weil der Abstand zur Mitte näher an der linken Seite ist).

Wie kann ich es so einstellen, dass es der gleichen Wischrichtung folgt, unabhängig davon, welcher Punkt näher an der Mitte ist. Und vielleicht, wenn es einen besseren Weg gibt, dies zu tun, bitte erleuchte mich. Vielen Dank.

enter image description here

Antwort

0

Ich denke, der einfachste Weg, ein Gameobject ist durch die Verwendung zu drehen:

float Speed = 1f; 

void Update() 
{ 
    // Rotate the object around its local X axis at 1 degree per second 
    transform.Rotate(Vector3.right * Time.deltaTime * Speed); 
} 

Sie mehr lesen über seine here

Es ist manchmal der Mitte des Gameobject kann es passieren kann Ist nicht in der Mitte des Mesh oder Sprite platziert. Wenn Sie dies aus irgendeinem Grund nicht ändern können, können Sie dieses Modell/Sprite als untergeordnetes Element eines leeren GameObject platzieren und dann das Drehskript an das leere GameObject anhängen.

0

Während ich verstehe, dass Sie nicht wollen, dass die Leute die Festplatte auf die Belohnung drehen, die sie wollen. Warum benutzt du eine zufällige Belohnung und machst die Schwierigkeit, die Rotation an die Belohnung anzupassen?

Sie sollten in der Lage sein zu sagen, fangen Sie eine 'Swipe-Zeit', dann etwas Mathe dazu (sagen, so dass es mindestens einmal dreht, wenn die Bildschirm-Touch-Zeit sehr kurz ist) und fügen Sie einen zufälligen Bereich hinzu ist innerhalb des Umfangs der Scheibe. Dann, wenn die Scheibe fertig ist, einen Strahl an der obersten Stelle werfen, um die Belohnung zu bestimmen? (könnte auch die Spinnzeit mit der Wischzeit verknüpfen, so dass die Belohnung in etwa dem gleichen Zeitintervall angeboten wird).

// Dieser Kommentar wäre als Kommentar gemacht worden, hätte ich die Rechte dazu gehabt, da ich denke, dass diese Antwort der Fragestellerin helfen kann, wird sie stattdessen als Antwort zur Verfügung gestellt. Ich hoffe, das pisst niemandem zu viel :(

+0

Diese Art von was tat ich eigentlich. Aber anstatt die 'Swipe-Zeit' zu verwenden, habe ich f_difX verwendet, das ist im Grunde der Punkt, wo der Spieler seine Linke Finger vom Bildschirm - der Punkt, an dem er den Bildschirm berührte, bevor er wischte. Mir gefällt die Idee, die Spinnzeit mit der Wischzeit zu verbinden. Ist es möglich, diese Idee zu vertiefen? Oder wie man eine Funktion so macht? Danke für die Antwort :) –