2017-03-22 2 views
0

Tout d'abord, je tiens à préciser que ce n'est pas un double de cette question: unity 3d rotate the gameobject according to accelerometerobjet par accéléromètre ne Pivotée entrer en collision pas correctement dans l'unité

, j'ai réussi à faire pivoter un objet dans l'unité par en utilisant la boussole de l'accéléromètre &. Cela fonctionne normalement mais, lorsqu'un autre objet entre en collision avec lui, il se clipse à travers l'objet qui entraîne le déplacement aléatoire de l'objet.

Je me suis rendu compte que c'était dû au fait que j'étais directement en modifiant la transformation de l'objet. Je sais que je ne suis pas supposé modifier directement la transformée et que je devrais utiliser le corps rigide à la place, mais, je ne sais pas comment je peux le changer là où il ne modifie pas directement la transformation.

Voici comment je tourne actuellement l'objet:

float norm=0f; 
Rigidbody rb; 
// Use this for initialization 
void Start() { 
    rb = GetComponent<Rigidbody>(); 


} 

// Update is called once per frame 
void Update() { 
    Input.compass.enabled = true; 
    if (norm == 0) { 
     norm = Input.compass.trueHeading; 
    } 
    float val=Input.compass.trueHeading-norm; 


    transform.rotation=Quaternion.Euler(new Vector3 ((Input.acceleration.y-1)*90,val ,0)); 
    transform.Rotate (Input.acceleration.x*90*transform.forward); 

} 

Alors, comment pourrais-je changer cela pour que je ne modifie pas directement la transformation?

Merci à l'avance!

Répondre

1

Extrayez le Documentation for Rigidbody.MoveRotation. Il tournera votre RigidBody vers la rotation donnée alors que « conforme à la réglage d'interpolation de modèle du solide indéformable. »

Comme une note: Lorsque vous travaillez directement avec la physique des objets que vous devez utiliser FixedUpdate(), non Update(). Si vous ne savez pas pourquoi, ils couvrent les différences dans le Unity Tutorials. TL; DR Il fonctionne dans un "frame frame fixe" simulé.

+0

Merci beaucoup! – Paul