2013-07-03 8 views
0

Je veux créer l'effet d'inclinaison juste comme la course de temple. J'ai un contrôleur de caractère (joueur) dans le jeu qui se déplace sur son avant par le contrôleur. Déplacer (transformer.forward) après quoi je suis appliquer à l'inclinaison pour appuyer gauche et à droite .Previously pour l'inclinaison I Tried modifier la position du joueur à l'aide de /tranform.position transform.translate directement par les lectures de l'accéléromètre comme celui-ci:Contrôle de l'inclinaison Semblable à la course de Temple

mytransform.translate(acceleration.x*Time.delaTime*5.0f); 

mais qui avait un problème que quand je secoue l'appareil mon appareil photo commence à se branler et le joueur aussi puis j'ai utilisé le code suivant pour créer l'inclinaison sur l'axe Z positif

Vector3 dir = new Vector3(accel.x*8f, 0,0); 
    if (dir.sqrMagnitude > 1) 
{ 
    dir.Normalize(); 

} 
dir.x = Mathf.Round(dir.x * 10f)/10f; 

//mytemp is used for temp storage of player position added with the acceleration 
mytemp = mytransform.position+(mytransform.right*dir.x*Time.deltaTime*5.0f); 

Vector3 diffVec=Vector3.zero; 
///position of the element on which the player is colliding; 
Vector3 col_pos=Collidingelement.transform.position; 
Vector3 unitvec=new Vector3(1,0,0); 
//removing x and z of the collider 
diffVec= Vector3.Scale(col_pos,unitvec); 
//nullify the y,z of the updated mytransform position so that the distance is only measured on X 
Vector3 ppos = Vector3.Scale(mytemp,unitvec); 
//calculate the distance between player & colliding element 
disti=Vector3.Distance(ppos,diffVec); 
disti=Mathf.Clamp(disti,-1.5f,1.5f); 
disti = Mathf.Round(disti * 10f)/10f; 
//update the player position and apply tilt to it if the distance is less than 1.5f 
if(disti<=1.50f) 
{ 
mytransform.position=mytemp; 

} 

maintenant cela a un problème que si disons que j'ai une valeur de 0,1 dans l'accélération il continue à mettre à jour mon temp et si la distance est moins mon joueur commencera à pencher vers un côté si je tenais mon appareil sur la même position et la valeur d'accélération était toujours 0,1

Répondre

0

Pourquoi ne calculez-vous pas simplement l'accélération delta?

bool isMoved = false; 
Vector2 lastAccel = Vector2.Zero; 
Vector2 margin = new Vector2(0.05f, 0.05f); //not processing if its in margin. 
Vector2 deltaAccel = currAccel - lastAccel ; 

if(deltaAccel.x < margin.x) 
{ 
    //don't process 
    isMove = false; 
} 
else 
{ 
    isMove = true; 
    lastAccel = currAccel; 
} 

if(isMove) 
{ 
//Process with deltaAccel here 
}