[DB-AL] Besoin d'aide pour un reset camera

Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
herve
Messages : 3
Inscription : 14 Juin 2018 16:01

[DB-AL] Besoin d'aide pour un reset camera

Message par herve » 14 Juin 2018 17:17

Bonjour,

Je travail sur un mini jeu de sphère qui roule et se déplace dans un décor.
Ma camera suit le déplacement de la sphère(en faite elle suit un cube enfant de la sphère) je pilote la rotation de la caméra avec deux touches de manière indépendante.
Lorsque la sphère sort du parcours je réinitialise sa position au niveau du dernier check-point.
Mon soucis c'est que je n'arrive pas a repositionner ma caméra dans l'axe de la sphère.
voici le code de mon controler pour la caméra.
Mon Quaternion.LookRotation(direction) n'a aucun impacte sur la caméra.

Merci d'avance pour vos conseils ou solutions.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraControler : MonoBehaviour {

    public Transform player;
    private Vector3 offset;
    public static bool initCamera;

    private Quaternion startRotation;
    private float currentRotX;
    private float currentRotY;
    private float currentRotZ;

    private Vector3 direction;

    // Use this for initialization
    void Start () {
        offset = transform.position - player.transform.position;
        currentRotX = player.transform.rotation.eulerAngles.x;
        currentRotY = player.transform.rotation.eulerAngles.y;
        currentRotZ = player.transform.rotation.eulerAngles.z;
    }
	
	// Update is called once per frame
	void LateUpdate () {
       transform.position = player.transform.position +offset;
    }
    void FixedUpdate()
    {
        float rotation = Input.GetAxis("Rotation");
        offset = Quaternion.AngleAxis(Input.GetAxis("Rotation") * 2, Vector3.up) * offset;
        transform.position = player.position + offset; 
        transform.LookAt(player.position);

        if (initCamera)
        {
            offset = Quaternion.AngleAxis(0, Vector3.down) * offset;
            direction = player.position - transform.position;
            transform.rotation = Quaternion.LookRotation(direction);
        }

    }

}
Dernière édition par herve le 15 Juin 2018 13:51, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4469
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Besoin d'aide pour un reset camera

Message par boubouk50 » 14 Juin 2018 17:32

Pas évident à répondre comme ça.
Que signifie dans l'axe? -> Peut-être peux-tu récupérer la rotation de ta sphère pour l'appliquer à ta caméra. Il y a forcément un axe qui doit t'indiquer cet axe.
"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

herve
Messages : 3
Inscription : 14 Juin 2018 16:01

Re: Besoin d'aide pour un reset camera

Message par herve » 15 Juin 2018 09:41

Image

L'image de droite est la position de départ la caméra suite la sphère. Si je change l'angle de la caméra avec les touches du clavier lorsque ma boule tombe je me retrouve avec une caméra qui a conservé son angle de rotation que je n'arrive pas a recaler comme sur l'image de droite. J'ai joint précédemment le code du controler de la camera. je souhaite simplement lui redonner une direction sud nord.
Je précise que dans mon initcaméra peut importe les valeurs que je passe à ma caméra elle ne réagit pas.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4469
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Besoin d'aide pour un reset camera

Message par boubouk50 » 15 Juin 2018 09:53

Comment gères-tu le booléen initCamera?
Il devrait être activé (true) depuis un événement externe, par contre, le retour à son état désactivé (false), devrait être fait dans la condition du FixedUpdate () et pas ailleurs.
"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

herve
Messages : 3
Inscription : 14 Juin 2018 16:01

Re: Besoin d'aide pour un reset camera

Message par herve » 15 Juin 2018 13:48

boubouk50 a écrit :
15 Juin 2018 09:53
Comment gères-tu le booléen initCamera?
Il devrait être activé (true) depuis un événement externe, par contre, le retour à son état désactivé (false), devrait être fait dans la condition du FixedUpdate () et pas ailleurs.
intiCamera est bien passé a true depuis un script externe j'ai juste supprimer temporairement le passage a false. Je passe bien dans le if c'est juste que ma camera ne réagit pas.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4469
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [DB-AL] Besoin d'aide pour un reset camera

Message par boubouk50 » 15 Juin 2018 14:08

Code : Tout sélectionner

direction = player.position - transform.position;
D'après cette ligne, la direction est dépendante de la position de ton objet, alors qu'il n'a pas encore été repositionné. Enfin, si, mais en fonction des dernières données, non réinitialisées.
Il faut donc refaire une transformation de position pour positionner la caméra derrière la sphère avant de la tourner.

Sinon, tu peux tenter une autre approche, comme des points de spawn. Ces points seront définis avec une rotation et position et lors d'une réinitialisation, il suffira de copier les données et de les injecter.

Aussi, tu pourrais jouer sur la hiérarchie. La caméra serait enfant d'un Empty GameObject qui copierait la position et la rotation verticale de la sphère. Tourner la caméra reviendrait donc à tourner autour de ce gameObject. Le réinitialiser reviendrait donc à remettre à zéro les transformations de la caméra.

Il y a plusieurs manières de procéder en fonction du point de vue: ça va de tout programmer à "skinner" au maximum, avec des possibilités intermédiaires. Peut-être la solution envisagée n'est pas si évidente à mettre en place. En tout cas, moi d'ici, ce n'est pas évident.
"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

Répondre

Revenir vers « (C#) CSharp »