Page 1 sur 1

[Résolu]Screen orientation realtime

Publié : 06 Août 2019 12:19
par EmileF
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

Re: Screen orientation realtime

Publié : 06 Août 2019 12:52
par boubouk50
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.

Re: Screen orientation realtime

Publié : 06 Août 2019 13:11
par EmileF
Ah ok,

Je ne suis pas arrivé à trouver DeviceOrientation

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

Là ça marche

Merci Boubouk

Re: Screen orientation realtime

Publié : 06 Août 2019 18:51
par EmileF
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;
        }
    }
}


Re: Screen orientation realtime

Publié : 07 Août 2019 08:48
par boubouk50
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.

Re: Screen orientation realtime

Publié : 07 Août 2019 09:11
par EmileF
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