rotation de la camera autour d'un objet

Toutes les questions sur le développement Mobile, y compris la partie script.
thomasI
Messages : 6
Inscription : 03 Mai 2016 21:12

rotation de la camera autour d'un objet

Message par thomasI » 13 Déc 2016 00:38

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

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: rotation de la camera autour d'un objet

Message par boubouk50 » 13 Déc 2016 10:25

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
"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

thomasI
Messages : 6
Inscription : 03 Mai 2016 21:12

Re: rotation de la camera autour d'un objet

Message par thomasI » 28 Déc 2016 08:34

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:

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;
	}
}
es que quelqu'un pourrais m'aider.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: rotation de la camera autour d'un objet

Message par Moi 1971 » 28 Déc 2016 10:57

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 :

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;
}
}
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:

Code : Tout sélectionner

Void Deplacement()
{
Vector3 position = distanceVector + target.position;
transform.position = position;
}
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.

thomasI
Messages : 6
Inscription : 03 Mai 2016 21:12

Re: rotation de la camera autour d'un objet

Message par thomasI » 28 Déc 2016 15:43

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.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: rotation de la camera autour d'un objet

Message par Moi 1971 » 28 Déc 2016 17:54

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().

Code : Tout sélectionner

Vector2 angles = this.transform.localEulerAngles;
x = angles.x;
y = angles.y;
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.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »