[Résolu]Screen orientation realtime

Modérateurs : Administrateurs Suppléants, Community Manager

EmileF
Messages : 394
Inscription : 18 Mars 2017 19:39

[Résolu]Screen orientation realtime

Message par EmileF » 06 Août 2019 12:19

Bonjour,

Je voudrais pouvoir adapter l'affichage à l'orientation du téléphone en cours d'exécution.

Les tutos que j'ai pu trouver concernent la rotation par défaut, mais pas en realtime.

J'ai essayé de lire le screen.orientation dans l'update, mais il ne change pas.

Est-ce que quelqu'un peut me mettre sur la voie s'il vous plait.

Merci
Dernière édition par EmileF le 07 Août 2019 09:27, édité 3 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: Screen orientation realtime

Message par boubouk50 » 06 Août 2019 12:52

Salut Emile,

Tu as plusieurs endroits à explorer:
- Les Players Settings > Resolution & Presentation: Tu peux définir une orientation de base (AutoRotation par ex)
- DeviceOrientation: L'input te donne l'orientation en cours. < C'est cette donnée qui possède l'info d'orientation de l'appareil

Code : Tout sélectionner

void Update () {
		//Vérifier pour un changement d'orientation réel (pas de FaceUp (5) ni de FaceDown (6) ni Unknown (0))
		if (previousOrientation != Input.deviceOrientation && (int) Input.deviceOrientation < 5 && (int) Input.deviceOrientation > 0) {
			//Actions

			//Tester l'orientation Portrait / Paysage
			if ((int) Input.deviceOrientation < 3) { //portait: 1 & 2
				//Actions
			}
			else	//Paysage 3 & 4
				//Actions

			//Récupérer la bonne rotation du panel
			previousOrientation = Input.deviceOrientation;
		}
- Screen.orientation: Permet de définir/fixer une orientation: (Autorotation par ex)
J'utilise ce code, et il marche bien:

Code : Tout sélectionner

public void BackToMenuSelection () { //Force l'écran à rester en Paysage gauche
		Screen.orientation = ScreenOrientation.LandscapeLeft;
...
	}
Je ne sais pas comment réagit l'autorotation si le joueur ne l'a pas activé depuis son téléphone.
"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

EmileF
Messages : 394
Inscription : 18 Mars 2017 19:39

Re: Screen orientation realtime

Message par EmileF » 06 Août 2019 13:11

Ah ok,

Je ne suis pas arrivé à trouver DeviceOrientation

je faisais avec Screen.Orientation mais biensûr...

Là ça marche

Merci Boubouk
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

EmileF
Messages : 394
Inscription : 18 Mars 2017 19:39

Re: Screen orientation realtime

Message par EmileF » 06 Août 2019 18:51

Je relance le post car je n'arrive pas à obtenir ce que je souhaite.

Je suis en train de faire un clone du sudoku pour android..

Je suis en 2D et travaille qu'avec des UI.

Au départ j'avais un panel avec la grille, et 2 autres panel avec le clavier pour les nombres normaux et un autre pour les minis.

La grille est à gauche et les 2 claviers à sa droite. Le telephone donc tenu horizontalement.

J'ai voulu donner la possiblité au joueur de tenir son téléphone verticalement. J'ai eu quelques difficultés pour repérer l'orientation de l'écran. Boubouk a solutionné mon problème, mais depuis, je n'arrive pas à faire pivoter convenablement mon écran.

J'ai même créé un 2ème système de panel positionné cette fois verticalement, et selon l'orientation, j'active un ou l'autre panel.

Mon problème maintenant est la résolution de l'écran. soit mon jeu est tout petit et ne remplit pas l'écran, soit il dépasse de chaque coté. J'essaye pourtant de corriger la résolution de l'écran à chaque rotation.

Voila mon script Si quelqu'un pouvait me donner un tuyau ce serait sympa

Code : Tout sélectionner

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

public class Manager : MonoBehaviour
{
    public GameObject[] Panels;
    DeviceOrientation previousOrientation;

    private void Update()
    {
        if (previousOrientation != Input.deviceOrientation)
        {
            switch (Input.deviceOrientation)
            {
                case DeviceOrientation.Unknown:
                    break;
                case DeviceOrientation.Portrait:
                    Panels[0].SetActive(true);
                    Panels[1].SetActive(false);
                    Screen.SetResolution(480, 854, true);
                    break;
                case DeviceOrientation.PortraitUpsideDown:
                    break;
                case DeviceOrientation.LandscapeLeft:
                    Panels[0].SetActive(false);
                    Panels[1].SetActive(true);
                    Screen.SetResolution(854, 480, true);
                    break;
                case DeviceOrientation.LandscapeRight:
                    break;
                case DeviceOrientation.FaceUp:
                    break;
                case DeviceOrientation.FaceDown:
                    break;
                default:
                    break;
            }
            previousOrientation = Input.deviceOrientation;
        }
    }
}

La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: Screen orientation realtime

Message par boubouk50 » 07 Août 2019 08:48

Salut,

je pense que tu ne devrais pas toucher à la résolution, tes canvas sont basés dessus. Ça double un peu l'effet en fait.
Enlève les SetResolution pour voir.
"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

EmileF
Messages : 394
Inscription : 18 Mars 2017 19:39

Re: Screen orientation realtime

Message par EmileF » 07 Août 2019 09:11

Merci Boubouk

je viens de trouver. Tu as raison.

En fait, j'avais autorisé toutes les orientations dans le player setting,
Dans mon cas, il ne faut pas. il faut prévoir une orientation, seulement.
Et ensuite, j'avais prévu un panel par rotation.
Il ne faut pas non plus. tout ce passe dans le même panel.
Il suffit d'orienter et repositionner les éléments du panel selon l'orientation.

il n'y a que comme ça que j'ai réussi à faire fonctionner le truc

La nuit porte conseil et Boubouk aussi.

Merci
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »