Donner une limite au déplacement de ma camera

Pour les scripts écrits en C#
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
rick33290
Messages : 2
Inscription : 16 Sep 2015 23:13

Donner une limite au déplacement de ma camera

Message par rick33290 » 16 Sep 2015 23:30

Bonjour a tous,
Je commence à développer un jeu sous unity pour android et je souhaiterai bloquer le déplacement de ma vue ... Actuellement quand je déplace mon doigt sur mon écran, mon plateau de jeu (compose de 50 cubes par 50 cubes) suis le déplacement de mon doigt mais quand j'arrive au bout de mon plateau celui ci sort de l’écran. Je voudrais pouvoir lui donner une limite de déplacement pour pas qu'il ne sorte du champ de l'écran.

Voici mon code accroché à ma caméra:

Code : Tout sélectionner

using UnityEngine;

public class TouchCamera : MonoBehaviour {
	Vector2?[] oldTouchPositions = {
		null,
		null
	};
	Vector2 oldTouchVector;
	float oldTouchDistance;


	void Update() {
		if (Input.touchCount == 0) {
			oldTouchPositions[0] = null;
			oldTouchPositions[1] = null;
		}
		else if (Input.touchCount == 1) {
			if (oldTouchPositions[0] == null || oldTouchPositions[1] != null) {
				oldTouchPositions[0] = Input.GetTouch(0).position;
				oldTouchPositions[1] = null;
			}
			else {
				Vector2 newTouchPosition = Input.GetTouch(0).position;
				
				transform.position += transform.TransformDirection((Vector3)((oldTouchPositions[0] - newTouchPosition) * GetComponent<Camera>().orthographicSize / GetComponent<Camera>().pixelHeight * 2f));
				
				oldTouchPositions[0] = newTouchPosition;
			}
		}
		else {
			if (oldTouchPositions[1] == null) {
				oldTouchPositions[0] = Input.GetTouch(0).position;
				oldTouchPositions[1] = Input.GetTouch(1).position;
				oldTouchVector = (Vector2)(oldTouchPositions[0] - oldTouchPositions[1]);
				oldTouchDistance = oldTouchVector.magnitude;
			}
			else {
				Vector2 screen = new Vector2(GetComponent<Camera>().pixelWidth, GetComponent<Camera>().pixelHeight);
				
				Vector2[] newTouchPositions = {
					Input.GetTouch(0).position,
					Input.GetTouch(1).position
				};
				Vector2 newTouchVector = newTouchPositions[0] - newTouchPositions[1];
				float newTouchDistance = newTouchVector.magnitude;

				transform.position += transform.TransformDirection((Vector3)((oldTouchPositions[0] + oldTouchPositions[1] - screen) * GetComponent<Camera>().orthographicSize / screen.y));

				//La ligne suivante gére la rotation de la map FONCTION DESACTIVEE
				//transform.localRotation *= Quaternion.Euler(new Vector3(0, 0, Mathf.Asin(Mathf.Clamp((oldTouchVector.y * newTouchVector.x - oldTouchVector.x * newTouchVector.y) / oldTouchDistance / newTouchDistance, -1f, 1f)) / 0.0174532924f));

				GetComponent<Camera>().orthographicSize *= oldTouchDistance / newTouchDistance;

				transform.position -= transform.TransformDirection((newTouchPositions[0] + newTouchPositions[1] - screen) * GetComponent<Camera>().orthographicSize / screen.y);

				GetComponent<Camera>().orthographicSize = Mathf.Max(GetComponent<Camera>().orthographicSize, 4);
				GetComponent<Camera>().orthographicSize = Mathf.Min(GetComponent<Camera>().orthographicSize, 12);

				oldTouchPositions[0] = newTouchPositions[0];
				oldTouchPositions[1] = newTouchPositions[1];
				oldTouchVector = newTouchVector;
				oldTouchDistance = newTouchDistance;
			}
		}

	}
}


Merci d'avance.

Avatar de l’utilisateur
Yazza
Messages : 31
Inscription : 21 Avr 2015 10:45
Localisation : Paris

Re: Donner une limite au déplacement de ma camera

Message par Yazza » 17 Sep 2015 08:27

Hello !

Ce n'est pas très compliqué !
Avec 4 if par exemple, tu vérifies si la position dépasse des valeurs limites que tu définies, et si oui, tu forces la position à rester à cette valeur !

Bon courage ;)
Je me contredis toujours, voire jamais.

rick33290
Messages : 2
Inscription : 16 Sep 2015 23:13

Re: Donner une limite au déplacement de ma camera

Message par rick33290 » 17 Sep 2015 08:47

Merci pour ta réponse, j'ai essayé plusieurs solution mais rien ne marche. Je suis perdu ... Je doit vérifier la position de quelle valeur et comment récupérer ses coordonnées ?

Par exemple ici au début du code ?

Code : Tout sélectionner

if (Input.touchCount == 0  [b][u]ou input.LA POSITION DE LA TOUCHE[/u][/b]) {
         oldTouchPositions[0] = null;
         oldTouchPositions[1] = null;

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: Donner une limite au déplacement de ma camera

Message par Iwa » 17 Sep 2015 09:19

Solution assez basique :

Tu te créé une boite de collision avec 4 panneaux tournées tournés vers l'intérieur qui englobe ton plateau de jeu. Tu dégages le mesh renderer et tu mets des colliders. Tu mets un collider sur ta caméra et zouh! Le tour est joué, resizable facilement au moindre changement de ton plateau :).

Sinon pour l'histoire des 4 if c'est une bonne idée aussi il te faut fixer en gros les coordonnées desquelles ta Caméra ne doit pas sortir. Du genre tu te déclares 2 variables : une qui est le Vector3 de ta position mini et une de ta position maxi et tu checkes que ton centre de Camera est compris entre la coordonnées mini mini, mini maxi, maxi mini, maxi maxi. Après si tu veux en plus checker ta profondeur tu as quelques cas supplémentaires.

C'est pour ça que l'idée de la boite est la plus rapide niveau réalisation. Je ne crois pas que ça mange trop de mémoire donc ça vaut le coup :)
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Zim
Messages : 25
Inscription : 27 Déc 2013 01:46

Re: Donner une limite au déplacement de ma camera

Message par Zim » 20 Sep 2015 20:28

Tu peux aussi regarder du côté de http://docs.unity3d.com/ScriptReference ... Clamp.html qui sert à ce genre de choses

Répondre

Revenir vers « (C#) CSharp »