Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Unity3d] mouvement de caméra

    2 août 2015 à 5:26:59

    Bonjour,
    depuis plusieurs jours j'essaie de trouver une solution à mon problème. Cependant, les résultats ne sont pas convaincants, en fait je tourne un peu en rond.

    J'essaie de faire une caméra qui suit mon personnage, mais que je pourrais faire pivoter quand j'appuie sur ma souris et faire en sorte que cette caméra revienne à son point initial, et cela de façon «smooth».

    Ceci étant dit, mon problème, pour le moment, est que la caméra suit mon personnage de façon « smooth » en permanence, ce qui provoque un certain décalage entre le personnage et la caméra au moment du déplacement de mon héros. 

    Voici mon code :

    using UnityEngine;
    using System.Collections;
    
    public class Follow : MonoBehaviour {
    	[SerializeField]
    	private Transform Target;
    	// Use this for initialization
    	void Start () {
    
    
    	}
    	
    	// Update is called once per frame
    	void Update () {
    
    
    
    		if (Input.GetMouseButton (0)) {
    				
    
    			transform.position = Target.transform.TransformPoint (new Vector3 (0f, 2f, -10f));
    			transform.Rotate (new Vector3 (Input.GetAxis ("Mouse Y") * 350, Input.GetAxis ("Mouse X") * 350, 0) * Time.deltaTime);
    
    		} else if ((int)transform.eulerAngles.y == (int)Target.eulerAngles.y) {
    
    			transform.position = Target.transform.TransformPoint (new Vector3 (0f, 2f, -10f));
    			transform.rotation = Target.transform.rotation;
    
    
    
    		} 
    		else
    		{
    			transform.position = Target.transform.TransformPoint (new Vector3 (0f, 2f, -10f));
    			
    			transform.rotation = Quaternion.Slerp (transform.rotation, Target.rotation, Time.deltaTime * 5);
    			
    
    		}
    
    	}
    }
    

    -
    Edité par Lich_King 2 août 2015 à 5:27:32

    • Partager sur Facebook
    • Partager sur Twitter
      2 août 2015 à 17:16:32

      Hello,

      La technique utilisée dans cette vidéo devrait surement te mettre sur une piste ;) .

      Cdt

      • Partager sur Facebook
      • Partager sur Twitter
        2 août 2015 à 21:28:39

        En fait, mon problème n'est pas là. Jusqu'à ce moment tout fonctionne. Cependant, quand je veux faire une rotation indépendante de ma caméra quand j'appuie sur ma souris, les problèmes surviennent.
        • Partager sur Facebook
        • Partager sur Twitter
          3 août 2015 à 0:52:18

          Voila une solution :

          - Créer un empty1, le mettre en enfant de ton perso et le placer sur ce dernier

          - Créer un empty2, le mettre enfant de l'empty1 et le placer à l'endroit ou tu souhaite avoir ta camera

          - Faire suivre empty2 par la caméra et la faire regarder ton perso (comme dans la vidéo)

          - Faire tourner empty1 sur l'axe Y pour faire tourner ta camera autour de ton joueur

          Pour ce qui est de la faire revenir à la position de base il suffit d'enregistrer la localPosition de base de l'empty2 et la rotation de base de l'empty1 puis :

          Si resetCamera

          pos = startPos; 

          ...

          J'espère t'avoir aidé :)

          • Partager sur Facebook
          • Partager sur Twitter
            5 août 2015 à 3:23:21

            Merci pour la réponse.

            J'aurais une autre question.

            if (Input.GetMouseButton (0)) {
            
            
            			transform.RotateAround(Target.position, new Vector3 (Input.GetAxis ("Mouse Y"), Input.GetAxis ("Mouse X")), 300 * Time.deltaTime);
            
            
            		} 
            Je fais une rotation de ma caméra avec ce code. Cependant, je voudrais limiter à 90 degrés la rotation sur l'axe des X et Y.

            J'ai essayé plusieurs manipulations avec mathf.clamp, mais je n'arrive à rien.

            • Partager sur Facebook
            • Partager sur Twitter
              5 août 2015 à 12:37:24

              Il suffit de vérifier la valeur de tes angles après ta rotation :

              Vector3 tmp = tranform.eulerAngles;
              tmp.x = tmp.x > 90f ? 90f : tmp.x; //Si < 90f remplacer par 90f
              //Pareil pour angle y
              
              tranform.eulerAngles = tmp; //Changer la rotation de l'objet



              • Partager sur Facebook
              • Partager sur Twitter
                5 août 2015 à 23:30:58

                Salut, j'ai essayer cela :
                if (Input.GetMouseButton (0)) 
                		{
                
                
                			if (LimitAxis.x >= 80f && LimitAxis.x < 330f)
                			{
                				LimitAxis.x = 80f;
                			}
                			else if(LimitAxis.x == 330f)
                			{
                				LimitAxis.x = 330f;
                			}
                			else
                			{
                			transform.RotateAround(Target.position, new Vector3 (Input.GetAxis ("Mouse Y"), Input.GetAxis ("Mouse X")), 300 * Time.deltaTime);
                			}
                	
                		} 


                Cependant, quand la rotation se bloque, je ne peux effectuer de rotation sur la caméra.




                En fait, il serait plus approprié d’utiliser transform.rotate. Cependant, la caméra tourne sur elle même et non pas autour du personnage. 

                Voilà mon code. 

                transform.Rotate (new Vector3 (Input.GetAxis ("Mouse Y") * 350, Input.GetAxis ("Mouse X") * 350, 0) * Time.deltaTime);



                -
                Edité par Lich_King 6 août 2015 à 5:34:08

                • Partager sur Facebook
                • Partager sur Twitter
                  9 août 2015 à 22:42:33

                  C'est normal que ta rotation se bloque

                  if (Input.GetMouseButton (0))
                          {
                   
                              //Si la condition d'ici est true ton angle va etre égal à 80f et tu auras toujours true ensuite, donc tu n'entrera pas dans les autres conditions
                              if (LimitAxis.x >= 80f && LimitAxis.x < 330f)
                              {
                                  LimitAxis.x = 80f;
                              }
                              else if(LimitAxis.x == 330f)
                              {
                                  LimitAxis.x = 330f;
                              }
                              else
                              {
                              transform.RotateAround(Target.position, new       Vector3 (Input.GetAxis ("Mouse Y"), Input.GetAxis ("Mouse X")), 300 * Time.deltaTime);
                              }
                       
                          }

                  Il faut effectuer la rotation dans tous les cas (même si elle dépasse les limites que tu désires) et ensuite faire les vérifications/corrections de tes angles.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 août 2015 à 23:49:30

                    J'ai essayé 

                    if ( LimitAxis.x > 80f)
                    			{
                    				LimitAxis.x = 80f;
                    				transform.eulerAngles = LimitAxis;
                    			}

                    Et la rotation des X reste bien à 90, cependant la caméra fait une étrange rotation.  Elle se met à descendre.

                    Je viens de découvert que lorsque j'atteins 90 degrés, le compteur descend pour finalement atteindre 0, puis ensuite être à 360 degrés et atteindre 270 degrés. Cela fait bien 360 degrés, mais pourquoi ce n'est pas 0 à 360.

                    -
                    Edité par Lich_King 11 août 2015 à 0:32:16

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [Unity3d] mouvement de caméra

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown