2016-08-08 49 views
0

Ich benutze das folgende Skript, um einen Ball zu steuern, aber es tut nicht genau das, was ich will. Unser 3D-Spiel wird im Querformat mit der Home-Taste (oder unten) des Geräts in der rechten Hand gespielt. Wenn Sie das Gerät nach links kippen (nicht drehen), sollte der Ball nach links rollen. Wenn Sie ihn nach rechts neigen, sollte er nach rechts rollen. Wenn Sie das Gerät nach unten kippen (Gerät oben nach unten), sollte der Ball schneller rollen und das Gerät nach oben kippen sollte es verlangsamen. Ich möchte auch nicht, dass der Ball unendlich beschleunigt.Steuern Sie die Ballbewegung durch das Kippen des Geräts in Unity3D

Der folgende Code möchte, dass das Gerät gerade gehalten wird, anstatt flach zu liegen. Es bewegt den Ball, indem es das Gerät nicht durch Kacheln dreht.

 void FixedUpdate() 
    { 
     // Player movement in mobile devices 
     // Building of force vector 
     Vector3 movement = new Vector3(-Input.acceleration.x, 0.0f, -Input.acceleration.z); 
     // Adding force to rigidbody 
     var move = movement * speed * Time.deltaTime; 
     rigidbdy.AddForce(move);   
    } 
+2

Sie haben gesagt, was Sie wollen, aber Sie haben uns nicht gesagt, wie es falsch funktioniert. Bearbeiten Sie Ihre Frage und fügen Sie Details hinzu, wie Ihre aktuelle Implementierung nicht funktioniert. –

Antwort

2

Für Ihre Kippen Problem, das Sie wahrscheinlich brauchen nur etwas anderes als (-Input.acceleration.x, 0.0f, -Input.acceleration.z); zu wählen, in the example in the documentation sie (-Input.acceleration.y, 0.0f, Input.acceleration.x); tun Neigung Kontrollen zu tun.

Für die maximale Geschwindigkeit Problem, fügen Sie einfach einen Scheck für rigidbdy.velocity.magnitude > maxSpeed in Ihrem Code und den Wert, wenn es maximal ist.

public float maxSpeed; 
void FixedUpdate() 
{ 
    // Player movement in mobile devices 
    // Building of force vector 
    Vector3 movement = new Vector3(-Input.acceleration.y, 0.0f, Input.acceleration.x); 
    // Adding force to rigidbody 
    var move = movement * speed * Time.deltaTime; 
    rigidbdy.AddForce(move); 

    //Limits the max speed 
    if(rigidbdy.velocity.magnitude > maxSpeed) 
    { 
     rigidbdy.velocity = rigidbdy.velocity.normalized * maxSpeed; 
    } 
} 

, dass die Geschwindigkeit wird dazu führen, dass zu gedeckelt, was auch immer Wert für maxSpeed im Inspektor festgelegt haben.

+0

Danke, funktioniert perfekt! – jbassking10