bonjour a tous, j'ai un problème, j'aimerais faire une rotation de camera autour d'un objet su un téléphone android mais je n’arrive pas a trouver de tuto, es-que quelqu'un pourrais m'aider svp.
j'aimerais également savoirs comment empêcher le téléphone de se maitre en veil pendant de le jeux est en marche
rotation de la camera autour d'un objet
- boubouk50
- ModoGenereux
- Messages : 6222
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: rotation de la camera autour d'un objet
Pour faire tourner une caméra autour d'un objet, cela s'appelle avoir une camera orbitale (orbital camera en anglais). Android ou pas, le code ne changera pas.
Pour la mise en veille: https://docs.unity3d.com/ScriptReferenc ... meout.html
Pour la mise en veille: https://docs.unity3d.com/ScriptReferenc ... meout.html
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: rotation de la camera autour d'un objet
j'ai réussi pour le blocage de la mise en veille mais je n'arrive pas a faire ma camera orbital, le problème est que si on arête d’appuiller sur l'écran tactile, la camera ar¨ête de suivre la balle et quand on rapuit sur l'écran la position de la camera par rapport a ma balle se réinitialise, voici le code source de ma camera orbital:
es que quelqu'un pourrais m'aider.
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class OrbitCamera : MonoBehaviour
{
public Transform target;
public float distance = 20.0f;
public float xSpeed = 1f;
public float ySpeed = 1f;
private float x = 0.0f;
private float y = 0.0f;
private Vector3 distanceVector;
void Start ()
{
distanceVector = new Vector3 (0.0f, 0.0f, -distance);
Vector2 angles = this.transform.localEulerAngles;
x = angles.x;
y = angles.y;
this.Rotate(x, y);
}
void LateUpdate ()
{
if (target)
{
this.RotateControls ();
}
}
void RotateControls ()
{
if (Input.GetButton ("Fire1"))
{
x += Input.GetAxis ("Mouse X") * xSpeed;
y += -Input.GetAxis ("Mouse Y") * ySpeed;
this.Rotate (x, y);
}
}
void Rotate (float x, float y)
{
Quaternion rotation = Quaternion.Euler (y, x, 0.0f);
Vector3 position = rotation * distanceVector + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
Re: rotation de la camera autour d'un objet
Bonjour,
Il faut que tu utilises le bouton "balises code" pour poster du code (5ème bouton en partant de la gauche dans le menu des boutons)
Ça donne ça :
Pour ton problème de suivi de la caméra, si j'ai bien compris ton problème, la caméra cesse de suivre le GameObjet "target" si il n'y a pas de rotation. Ce qui est normale puisque le code n'actualise la position de la caméra que lors d'une rotation.
=> "transform.position"
Pour corriger il faut utiliser le "if" qui détecte le "input" =>" if (Input.GetButton ("Fire1"))" et faire un "else" pour le déplacement.
Ce "else"appellerait une fonction où il y aurait dedans:
Le problème est que le "if" en question se trouve dans la fonction "RotateControls()" qui est appelée depuis la fonction LateUpdate()!!!
Tout est de travers...
Il te faut utiliser la fonction "Update()" à la place de "LateUpdate()"pour la gestion des touches et la position de la caméra.
Il faut éviter de créer des variables dans des boucles. Il faut les créer au début et les réutiliser à chaque passage dans la boucle.
Bon courage.
Il faut que tu utilises le bouton "balises code" pour poster du code (5ème bouton en partant de la gauche dans le menu des boutons)
Ça donne ça :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class OrbitCamera : MonoBehaviour
{
public Transform target;
public float distance = 20.0f;
public float xSpeed = 1f;
public float ySpeed = 1f;
private float x = 0.0f;
private float y = 0.0f;
private Vector3 distanceVector;
void Start ()
{
distanceVector = new Vector3 (0.0f, 0.0f, -distance);
Vector2 angles = this.transform.localEulerAngles;
x = angles.x;
y = angles.y;
this.Rotate(x, y);
}
void LateUpdate ()
{
if (target)
{
this.RotateControls ();
}
}
void RotateControls ()
{
if (Input.GetButton ("Fire1"))
{
x += Input.GetAxis ("Mouse X") * xSpeed;
y += -Input.GetAxis ("Mouse Y") * ySpeed;
this.Rotate (x, y);
}
}
void Rotate (float x, float y)
{
Quaternion rotation = Quaternion.Euler (y, x, 0.0f);
Vector3 position = rotation * distanceVector + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
=> "transform.position"
Pour corriger il faut utiliser le "if" qui détecte le "input" =>" if (Input.GetButton ("Fire1"))" et faire un "else" pour le déplacement.
Ce "else"appellerait une fonction où il y aurait dedans:
Code : Tout sélectionner
Void Deplacement()
{
Vector3 position = distanceVector + target.position;
transform.position = position;
}
Tout est de travers...
Il te faut utiliser la fonction "Update()" à la place de "LateUpdate()"pour la gestion des touches et la position de la caméra.
Il faut éviter de créer des variables dans des boucles. Il faut les créer au début et les réutiliser à chaque passage dans la boucle.
Bon courage.
Re: rotation de la camera autour d'un objet
merci pour ta réponse, j'ai résolu le problème de la position de la camera, il reste encore le problème de la rotation de la camera qui se réinitialise encor a chaque clic, que je n’arrive pas a résoudre, j'avais oublier de le mentionner dans le premier message, es-que tu pourrais m'aider.
Re: rotation de la camera autour d'un objet
La rotation de la caméra se fait par l'utilisation des deux variables float x et y.
Ces deux variables sont initialisées par le code suivant dans le start().
Quand la camera suit le GameObjet "target" sans faire de rotation, le x et le y conservent la dernière position de la caméra lors de la dernière rotation. Pour faire une nouvelle rotation, il faut ré-initialiser x et y avec le bout de code ci-dessus.
Ces deux variables sont initialisées par le code suivant dans le start().
Code : Tout sélectionner
Vector2 angles = this.transform.localEulerAngles;
x = angles.x;
y = angles.y;