Mouvement de camera avec la souris

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
castprofile
Messages : 3
Inscription : 10 Juin 2014 14:37

Mouvement de camera avec la souris

Message par castprofile » 10 Juin 2014 14:56

Bonjour, je suis nouveau a unity, et j'ai commencer a apprendre le C# il y a 2 mois.

je veut changer la position (left, right) de la camera horizontalement lorsque je glisse la souris


voici une condition qui fais exactement ce que je veux faire, sauf que ce dernier le fais dans la rotation, et moi je veux que ca soit dans la position(horizontal).

Code : Tout sélectionner

if (Input.GetMouseButtonDown(0))
		{
			oldInputPosition = Input.mousePosition;
		}
		if (Input.GetMouseButton(0))
		{
			float xDif = Input.mousePosition.x - oldInputPosition.x;
			if(!naturalMotion){
                              xDif *= -1;
                        }


			if(xDif != 0){
                             camParent.transform.Rotate (Vector3.up * xDif * tumbleSensitivity);
			}
			    oldInputPosition = Input.mousePosition;
		}
		if (Input.GetMouseButtonUp (0))
		{
			   oldInputPosition = Input.mousePosition;
		}


merci de votre temps ("excuse my French")

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: Mouvement de camera avec la souris

Message par NDrew » 10 Juin 2014 14:59

va voir la doc sur la class Tranform. Ca devrait te donner des idées.

http://docs.unity3d.com/ScriptReference/Transform.html

castprofile
Messages : 3
Inscription : 10 Juin 2014 14:37

Re: Mouvement de camera avec la souris

Message par castprofile » 10 Juin 2014 15:14

merci NDrew!

j'ai essaie plusieurs méthodes mais j'ai pas réussis.

j'ai essaie ca mais ca part dans une seule direction

Code : Tout sélectionner

camParent.transform.position += Vector3.right * 10.0f * Time.deltaTime;

Avatar de l’utilisateur
Dylan
Messages : 16
Inscription : 06 Avr 2014 05:16
Localisation : Montreal

Re: Mouvement de camera avec la souris

Message par Dylan » 10 Juin 2014 15:43

Salut castprofile !

tu peux toujours essayer avec ca : (j'ai repris ca de mon programme que j'ai légèrement modifié, qui est en Javascript, mais il y a peu de différences)

Code : Tout sélectionner

if(Event.current.type.Equals(EventType.mouseDrag)) //S'il y a un drag de la souris
{
	var Mouvement : Vector2 = Event.current.delta; //Ecart entre la derniere position de la souris et la nouvelle

	if(Mouvement.y < 0) //Mouvement en hauteur
		Cam.transform.Translate(0, Vector3(Mathf.Min(10, VitesseSourisHauteur*Mouvement.y/100), 0));

	if(Mouvement.y > 0) //Mouvement en bas
		Cam.transform.Translate(0, Vector3(Mathf.Max(-10, VitesseSourisHauteur*Mouvement.y/100), 0));			
}	
où Cam est ma caméra principale et VitesseSourisHauteur c'est ma vitesse la vitesse maximum que la caméra peut prendre

castprofile
Messages : 3
Inscription : 10 Juin 2014 14:37

Re: Mouvement de camera avec la souris

Message par castprofile » 10 Juin 2014 16:52

merci Dylan

j'ai essaie la méthode de Mathf min et max mais ça na pas marché :(

ole
Messages : 68
Inscription : 31 Mai 2014 20:09

Re: Mouvement de camera avec la souris

Message par ole » 10 Juin 2014 17:50

Salut,

je fais un str/gestion 2d et j'ai un systeme de mouvement de caméra qui fonctionne sans aucun problème. Je me suis inspiré d'un script du forum officiel pour le réaliser.

Par contre je ne peux plus te citer le nom de ma source :/...

Si tu veux t'en inspirer, il est tout à fait fonctionnel :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class CameraMoving : MonoBehaviour {
	public GameObject Camera;
	public float speed = 0.4f;
	private int mapsize;
	private float limitex;
	private float limitey;
	
	void Start(){

                //taille de la map
		mapsize = BackgroundGenerator.mapsize;
                //position initiale cam
		float campos = mapsize*10/2;
		Camera.transform.position = new Vector3 (campos, campos, -10);
                // limite droite et haute de la map
		limitex = (mapsize)*8-5;
		limitey = (mapsize)*8-2;
	}
	
	void Update(){

		//cam persp seulement
		/*
		if((Input.GetAxis ("Mouse ScrollWheel") > 0)&&(Camera.transform.position.z<-5))
		{
			Camera.transform.position = new Vector3(Camera.transform.position.x, Camera.transform.position.y, Camera.transform.position.z + (1 * speed));
		}
		if((Input.GetAxis ("Mouse ScrollWheel") < 0)&&(Camera.transform.position.z>-20))
		{
			Camera.transform.position = new Vector3(Camera.transform.position.x, Camera.transform.position.y, Camera.transform.position.z - (1 * speed));
		}
		*/


		if(( ((Input.mousePosition.x >= (Screen.width * 0.9))||Input.GetKey(KeyCode.RightArrow))&&(Camera.transform.position.x<limitex)))
			
			//Camera movement when the cursor is beyond a certain point of the screen
		{
			Camera.transform.position = new Vector3(Camera.transform.position.x + (1 * speed), Camera.transform.position.y, Camera.transform.position.z);
		}
		if(( ((Input.mousePosition.x <= (Screen.width * 0.1))||Input.GetKey(KeyCode.LeftArrow))&&(Camera.transform.position.x>3.2)))
		{
			Camera.transform.position = new Vector3(Camera.transform.position.x - (1 * speed), Camera.transform.position.y, Camera.transform.position.z);
		}
		if(( ((Input.mousePosition.y >= (Screen.height * 0.9))||Input.GetKey(KeyCode.UpArrow))&&(Camera.transform.position.y<limitey)))
		{
			Camera.transform.position = new Vector3(Camera.transform.position.x, Camera.transform.position.y + (1 * speed),Camera.transform.position.z);
		}
		if(( ((Input.mousePosition.y <= (Screen.height * 0.1))||Input.GetKey(KeyCode.DownArrow))&&(Camera.transform.position.y>0)))
		{
			Camera.transform.position = new Vector3(Camera.transform.position.x, Camera.transform.position.y - (1 * speed),Camera.transform.position.z);
		}
		
	}
}
si ça peut t'aider...

Avatar de l’utilisateur
Dylan
Messages : 16
Inscription : 06 Avr 2014 05:16
Localisation : Montreal

Re: Mouvement de camera avec la souris

Message par Dylan » 10 Juin 2014 19:32

castprofile a écrit :merci Dylan

j'ai essaie la méthode de Mathf min et max mais ça na pas marché :(
j'ai juste mis ca dans mon programme pour limiter la vitesse de la camera, t'es pas obligé de le mettre. Tu peux juste mettre une valeur fixe ou encore dépendre de ton mouvement.
Avec le code de ole, ca devrait aller, juste j'ai peut être mal compris la question au départ, mais est ce que tu veux bouger ta caméra en permanence avec la souris ou juste avec un drag ? Mon programme est fait pour le drag, c'est peu être pas ce que tu voulais

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

Re: Mouvement de camera avec la souris

Message par boubouk50 » 11 Juin 2014 09:56

castprofile a écrit :merci NDrew!

j'ai essaie plusieurs méthodes mais j'ai pas réussis.
j'ai essaie ca mais ca part dans une seule direction

Code : Tout sélectionner

camParent.transform.position += Vector3.right * 10.0f * Time.deltaTime;
Te rends tu compte de ce que tu fais exactement?

tu ajoutes à ta position actuelle un vecteur qui est toujours le même: la droite. Tu ne fais pas la distinction entre la droite et la gauche.
Cette distinction doit se faire grâce au mouvement de la souris. le vecteur que tu ajoutes doit en dépendre.
S'il est positif tu vas vers la droite, sinon vers la gauche.

Code : Tout sélectionner

//deltaPositionCamera contient la valeur du mouvement de celle-ci depuis la derniere frame dans l'ensemble [-1.0, 1.0], -1.0 équivaut à gauche pleine vitesse, 1.0 à droite pleine vitesse
camParent.transform.position += Vector3.right * TranslationSpeed * Time.deltaTime * deltaPositionMouse; 
"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 « Scripting »