Comment travailler avec différentes résolutions d'écran

J'utilise Unity 4.3.3 pour mon jeu. Je crée un jeu pour les appareils Android et iOS. Comme je suis assez nouveau dans l'unité, je ne peux pas trouver un moyen de travailler avec une résolution d'écran différente. J'utilise c # pour mes scripts.

Je veux que mon jeu s'exécute en plein écran. Je l'ai testé sur iPad 2 et il fonctionne parfaitement, mais pour iPhone 4, les côtés sont clipsés et pour iPhone 5, ils sont encore plus clipsés. Quelle est la solution? Quelle option dois-je choisir sous Paramètres du lecteur> iOS> OtherSettings> Résolution cible?

  • Pourquoi nextFocusDown ne fonctionne-t-il pas avec la navigation TalkBack?
  • Intégrez la visionneuse PDF pour l'application PhoneGap
  • Faire une forme de triangle en utilisant les définitions xml?
  • Est-il possible de désinstaller un package dans Android par programme
  • Obtenir des coordonnées en cliquant sur la carte (openstreetmaps)
  • Obtenez les coordonnées d'un événement tactile sur Android
  • Comment implémenter un double-double-doigts dans Android?
  • Puis-je désactiver automatiquement AdB lorsque Eclipse est ouvert?
  • Dessiner trace de ligne sur une toile
  • Android: Comment vérifier le courrier électronique à un moment précis avec AlarmManager?
  • ListView addHeaderView provoque une augmentation de la position par un?
  • Différence entre la tâche en cours et le processus en cours sur Android
  • 9 Solutions collect form web for “Comment travailler avec différentes résolutions d'écran”

    L'unité change sa caméra de jeu pour correspondre aux dimensions du rapport d'aspect de l'écran qu'elle utilise. De toute évidence, cela n'est pas toujours souhaité, il y a donc plusieurs façons:

    1) La première méthode est très facile à mettre en œuvre, même si elle est rarement bonne. Vous pouvez simplement modifier le rapport d'aspect de la caméra pour correspondre à celui que vous avez conçu. Donc si, par exemple, vous avez conçu votre jeu à 4: 3, vous feriez quelque chose comme ceci:

    Camera.aspect = 4f/3f; 

    Il suffit de garder à l'esprit que cela va fausser le jeu sur différents ratios d'aspect.

    2) L'autre méthode est un peu plus complexe, mais le résultat semble beaucoup mieux. Si vous utilisez une caméra orthographique, une chose importante à garder à l'esprit est que, indépendamment de la résolution d'écran utilisée, la caméra orthographique maintient la hauteur à une valeur définie et ne change que la largeur. Par exemple, avec une caméra orthographique d'une taille de 10, la hauteur sera réglée sur 2. Dans cet esprit, vous devriez compenser la caméra la plus large possible dans chaque niveau (par exemple, avoir un fond plus large ) Ou changer dynamiquement la taille orthographique de la caméra jusqu'à ce que sa largeur corresponde à ce que vous avez créé.

    Les composants de l'interface graphique sont plus faciles à mettre en œuvre simplement en configurant leur position en fonction de la résolution de l'écran là où cela est nécessaire. Par exemple, si vous souhaitez qu'un bouton apparaisse dans le coin supérieur droit, il suffit de régler sa position sur quelque chose comme position = new Vector2(Screen.width - 50, 50);

    EDIT: Depuis que vous avez mentionné les appareils que vous avez utilisés, j'ai cherché à trouver quel rapport d'aspect utilise chacun: Ipad2 = 4: 3, Iphone4 = 3: 2 et Iphone5 = 16: 9

    Étant donné que vous avez dit que cela ressemble parfaitement à l'iPad2, je suppose que vous avez conçu votre jeu pour utiliser un format 4: 3, de sorte que le "coupure" que vous mentionnez est que votre caméra orthographique s'est élargie. La solution consiste à utiliser l'une des deux méthodes que j'ai décrites ci-dessus.

    Vous pouvez voir comment il se verra sur chaque périphérique dans l'éditeur d'unité assez facilement. Si vous accédez à l'onglet du jeu (ce qui apparaît lorsque vous appuyez sur jouer dans l'éditeur d'unités), vous verrez qu'il a un nom de périphérique, ainsi qu'une résolution et un rapport d'aspect. En modifiant, cela vous permettra de voir à quoi il ressemblera à différents rapports d'aspect.

    Vous pouvez essayer de capturer la résolution de l'appareil en utilisant Camera.ScreenWidth et Camera.ScreenHeight.

    Ensuite, faites des calculs pour calculer la différence à partir de la résolution que vous avez et appliquez-la à l'objet parent.

    Cela augmentera tout ce qui est plus grand ou plus petit pour s'adapter à la résolution de l'appareil sans avoir plusieurs résolutions d'image, etc. pour différents appareils de résolution.

    Si votre objectif est d'obtenir la largeur précédente:

     [RequireComponent(typeof(Camera))] public class ResizeCamera : MonoBehaviour { private float DesignOrthographicSize; private float DesignAspect; private float DesignWidth; public float DesignAspectHeight; public float DesignAspectWidth; public void Awake() { this.DesignOrthographicSize = this.camera.orthographicSize; this.DesignAspect = this.DesignAspectHeight / this.DesignAspectWidth; this.DesignWidth = this.DesignOrthographicSize * this.DesignAspect; this.Resize(); } public void Resize() { float wantedSize = this.DesignWidth / this.camera.aspect; this.camera.orthographicSize = Mathf.Max(wantedSize, this.DesignOrthographicSize); } } 

    Vous devez modifier la fenêtre de visionnage de l'appareil selon le rapport d'aspect de l'appareil. Supposons que vous ayez fait le jeu pour 720×1080

    Ensuite, dans le script, vous devriez faire

     float xFactor = Screen.width / 720f; float yFactor = Screen.height / 1080f; Camera.main.rect = new Rect(0,0,1,xFactor/yFactor); 

    Ou

    D'une autre façon, si vous faites un jeu pour le rapport d'aspect 9:16, alors

    Faites ceci dans votre script,

     public float targetRatio = 9f/16f; //The aspect ratio of your game void Start() { Camera cam = GetComponent<Camera>(); cam.aspect = targetRatio; } 

    La manière la plus simple pour laquelle j'ai résolu cela a été souligné par Steven, forcer mon rapport d'aspect de la caméra en perspective à celui que je développe. Bien sûr, cela déforme certains objets si la ration d'aspect pour laquelle j'ai développé est différente de celle du périphérique. Pour les objets UI, si vous utilisez la compilation, je crée les rectangles en fonction d'un pourcentage de la taille de l'écran

     Rect(0.5 * Screen.width, 0.5 * Screen.height, 0.25 * Screen.width, 0.25 * Screen.height) 

    Cela placera le coin supérieur gauche au centre de l'écran et créera un rectangle de 1/4 de hauteur et 1/4 de largeur de l'écran. J'utilise NGUI 2.7 pour l'interface utilisateur et je n'ai vu aucun problème avec des rapports d'aspect différents jusqu'à présent, et l'on utilise une caméra orthographique pour rendre l'interface utilisateur

    Je sais que c'est un vieux fil, mais les gens peuvent encore finir par chercher une réponse.

    Pour ajuster une caméra en perspective à différents rapports d'aspect de l'écran avec un comportement différent de l'unité par défaut, vous avez besoin de trigonométrie. Toutes les informations nécessaires à ce sujet sont ici: https://en.wikipedia.org/wiki/Angle_of_view

    Si vous voulez une solution facile, voici une solution qui fonctionne avec tous les types de caméras: http://u3d.as/oUX

    Si vous développez un jeu 2d, c'est que votre caméra est en vue orthographique. Il suffit de faire le code suivant et de l'attacher avec votre gameobject. Il sera à l'échelle de l'objet du jeu (dans ce cas le sprite) avec la résolution de l'écran.

     void Resize() { SpriteRenderer sr=GetComponent<SpriteRenderer>(); if(sr==null) return; transform.localScale=new Vector3(1,1,1); float width=sr.sprite.bounds.size.x; float height=sr.sprite.bounds.size.y; float worldScreenHeight=Camera.main.orthographicSize*2f; float worldScreenWidth=worldScreenHeight/Screen.height*Screen.width; Vector3 xWidth = transform.localScale; xWidth.x=worldScreenWidth / width; transform.localScale=xWidth; Vector3 yHeight = transform.localScale; yHeight.y=worldScreenHeight / height; transform.localScale=yHeight; } 

    Il existe un atout gratuit dans Asset-store concernant ce problème … Regardez juste …

    http://u3d.as/content/palash-bhowmick/fit-all-screen-size/9q9

    Si la forme de votre objet est modifiée, supprimez les lignes qui commencent par: –

    Transform.localScale.x =

    C'est très simple pour Unity Now que Unity3D possède son propre système UI. Pour 3D Unity Règle automatiquement la caméra avec la taille de l'écran. Le problème surgit pour l'interface utilisateur et c'est un peu délicat. Tout d'abord, essayez de déterminer quels éléments doivent changer de position et de taille avec la taille de l'écran. Par exemple, si vous avez un bouton exactement au centre de l'écran. Ensuite, il n'a pas besoin de changer de position en fonction de l'écran. Il restera au centre.

    Maintenant, passez un scénario dans lequel vous avez un bouton dans le coin de l'écran comme nous voyons le bouton de pause en haut à droite ou en haut à gauche. Maintenant, vous devrez ancrer votre bouton dans le coin en conséquence. Il n'a pas d'importance sur la taille d'écran du jeu en cours d'exécution, le bouton de pause devrait tenir au coin.

    Maintenant, passez un autre cas dans lequel vous avez un arrière-plan dans votre menu. Maintenant, vous devrez appliquer une étirement pour ce sprite BG. Ce BG sera étiré et rétréci en conséquence, mais tous les éléments sur celui-ci auront une taille fixe. Pour cela, il est recommandé d'avoir des BG à plat de sorte qu'un même BG puisse avoir une bonne qualité pour 16:10 ou 4: 3 (Il s'agit de l'Unity Native UI)

    Si vous parlez plus loin, merci d'envoyer un courriel à ch.mubasher.ikram@gmail.com

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.