Newbie : écran 42'' tactile et rotation objet

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 14 Mai 2012 21:02

Yes tout à fait c'était juste le morceau qui me manquait :) j pensais que je pouvais pas mettre la fonction onGUI n'importe ou :)

Merci

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 14 Mai 2012 21:10

Yes, tant que ta caméra a le Layer du GUI (par défaut une caméra l'a) tu peux mettre du GUI ou tu veux.
Mais ceci dit, ça reste plus propre de déporter sur un seul script le GUI, surtout dès que tu as des fichier dans tous les sens.
Dans ce cas tu peux très bien appeller une fonction entre les script, si tu veux garder le même principe que mon exemple, tu créés un accesseur vers la variable en public, tu te débrouilles pour accéder à l'objet (GameObject.Find, puis GetComponent pour récupérer le script et ainsi appeler une fonction sur ce script).
Du genre (Exemple standard):

toto.cs

Code : Tout sélectionner


private bool  maValue = false;

public bool GetValue()
{
  return maValue;
}

titi.cs qui est sur le même gameObject que toto.cs

Code : Tout sélectionner

void GetTotoValue()
{
  print( GetComponent<toto>().GetValue() );
}

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 16 Mai 2012 20:40

Allo,

Bon j'avance pas si mal dans mes affaires ... cette fois-ci j'essaye de zoomer sur la zone cliquée.
À date, je suis arrivé à ce code ci :

Code : Tout sélectionner

	void Update () {
		if(Input.GetMouseButtonDown(0)) {
			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
			RaycastHit hit;
			float curFOV = Camera.main.fieldOfView;
			if(Physics.Raycast(ray,out hit)) {
				isObject = true;
				//essai 1
				//Camera.main.fieldOfView = Mathf.Lerp(curFOV, 15.0f , 1*Time.deltaTime);
				//essai2
				//while (Mathf.Abs(15.0f - Camera.main.fieldOfView) > 0.5f) {
				//    Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, 15.0f, Time.deltaTime * 1);
				 // } 
				Camera.main.transform.LookAt(hit.transform);
			} else {
				isObject = false;
				Camera.main.fieldOfView = 35.0f;
				Camera.main.transform.LookAt(Vector3.zero);
			}
		}
	
	}
Mon problème ici est que j'aimerai que mon changement de profondeur de champs soit moins brutale, j'ai essayé différentes choses (essai1 essai2) mais comme je suis pas encore super familier avec la façon dont travaille Unity je n'arrive pas du tout à mon résultat (voir même je tombe dans une boucle infinie lool).
Un pti hint ??
Merci d'avance

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 16 Mai 2012 20:52

Perso. je te conseillerai d'utiliser une lib d'animation.
Mais si tu veux faire sans, sort juste un booléen de l'event et fais ça:

Code : Tout sélectionner


private bool isObject = false;
private float currentFieldOfView = 35f, currentFieldOfViewRef = 0f;
   void Update () {

      if(isObject)
         currentFieldOfView = Mathf.SmoothDamp(currentFieldOfView, 15f, ref currentFieldOfViewRef, 1f);
      else
         currentFieldOfView = Mathf.SmoothDamp(currentFieldOfView, 35f, ref currentFieldOfViewRef, 1f);

      Camera.main.fieldOfView =currentFieldOfView;

      if(Input.GetMouseButtonDown(0)) {
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;
         float curFOV = Camera.main.fieldOfView;
         if(Physics.Raycast(ray,out hit)) {
            isObject = true;
 
            Camera.main.transform.LookAt(hit.transform);
         } else {
            isObject = false;
            Camera.main.transform.LookAt(Vector3.zero);
         }
      }
   
   }

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 16 Mai 2012 21:37

Allo,

Super merci pour l'exemple de code ... mais je vais tout de même regarder du coté des lib et si trop dur à mettre en place j'utiliserai le code.
D'ailleurs pour le coup j viens de voir mon "erreur" à chaque frame si j'ai un objet je zoom un peu :) j'aurais du y penser... merci :)

Ps : si t as une lib en tête hésites pas ;)

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 16 Mai 2012 22:38

iTween ou HOTween, iTween étant plus simple à utiliser mais HOTween étant plus performant et plus riche en possibilités.
ça te permettrais de faire des courbes de vitesse sympatiques, mais avec le code que je t'ai donné SmoothDamp fait déjà un bon boulot normalement.

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 18 Mai 2012 16:15

Allo,

J'essaye de trouver le script SmoothLookAt .. mais impossible de mettre la main dessus dans les assets.
Car le lookAt se fait dès le debut du zoom, ce qui fait un espece de saut bizarre. J'ai bien essayé de mettre le lookAt dans LateUpdate. Mais ca change rien.

Merci

Edit : J viens de voir qu'il existait un Quaternion.LookRotation je vais essayer avec ça.

Répondre

Revenir vers « Unity le logiciel »