How do I create a UI based on a screen size?

Optimering af Unity iOS Apps: En Dybdegående Guide

03/02/2023

Rating: 4.39 (8915 votes)

At udvikle spil og applikationer til iOS-platformen med Unity er en spændende rejse, der åbner op for et stort publikum. Men for at sikre, at din app ikke kun fungerer, men også yder optimalt og ser fantastisk ud på tværs af et utal af iPhone- og iPad-modeller, er det afgørende at forstå og konfigurere Unitys iOS Player Settings korrekt. Disse indstillinger giver dig fuld kontrol over alt fra skærmopløsning og ydeevne til brugerfladens tilpasning og appens opførsel under kørsel. I denne dybdegående guide vil vi udforske de vigtigste indstillinger, der kan hjælpe dig med at levere en poleret og effektiv mobiloplevelse.

Should I change camera FOV to make UI fit on the screen?
If you're only looking at UI, you should definitely not be changing the camera FOV to make the UI fit on the screen. Use the RectTransform layout options to ensure your UI layout adapts to the screen. For example, if something should be aligned to the bottom-left of the screen, anchor it to the bottom-left of the screen.
Indholdsfortegnelse

Afstemning af Skærmopløsning og Ydeevne

En af de mest kritiske aspekter ved mobiludvikling er at balancere visuel kvalitet med ydeevne og batteriforbrug. iOS-enheder kommer med et bredt spektrum af skærmopløsninger og DPI-værdier (Dots Per Inch), og det er her, Unitys indstillinger for opløsning og præsentation kommer ind i billedet.

DPI-indstillinger i Unity for iOS

I sektionen 'Resolution and Presentation' under iOS Player Settings finder du 'Resolution Scaling'. Denne indstilling er nøglen til at styre, hvordan din app renderer i forhold til enhedens native skærmopløsning. Du har to primære valgmuligheder:

  • Disabled: Hvis denne indstilling vælges, vil din app altid rendere i enhedens native skærmopløsning. Dette giver den højeste visuelle kvalitet, men kan være krævende for ydeevnen og batterilevetiden på enheder med meget høj DPI.
  • FixedDPI: Dette er den mest fleksible indstilling for optimering. Når du vælger 'FixedDPI', vises en ny egenskab kaldet Target DPI.

Target DPI giver dig mulighed for at angive en specifik DPI-værdi, som spilskærmen skal målrette. Hvis enhedens native skærm-DPI er højere end den indstillede 'Target DPI', vil Unity nedskalere spilskærmen, så den matcher denne indstilling. Dette er en fremragende metode til at:

  • Optimere ydeevnen: Ved at rendere i en lavere DPI reduceres den mængde pixels, der skal behandles af GPU'en, hvilket kan føre til højere framerates.
  • Forlænge batterilevetiden: Mindre GPU-arbejde betyder mindre strømforbrug.
  • Målrette en specifik DPI-indstilling: Hvis du har en bestemt visuel stil eller ydeevnemål i tankerne, kan du tvinge renderingen til en bestemt DPI.

Unity beregner skaleringen som min(Target DPI * Factor / Screen DPI, 1). Her er 'Factor' værdien fra 'Resolution Scaling Fixed DPI Factor' i Quality Settings. Det er vigtigt at eksperimentere med 'Target DPI' for at finde den optimale balance mellem visuel kvalitet og ydeevne for din specifikke app.

Optimering af Brugerflade (UI) på tværs af Enheder

At designe en brugerflade, der tilpasser sig elegant til forskellige skærmstørrelser, opløsninger og billedformater på iOS-enheder, inklusive "safe area" (det område af skærmen, der ikke er dækket af hak eller afrundede hjørner), er en kompleks, men afgørende opgave. Unitys uGUI-system med Canvas Scaler-komponenten er dit primære værktøj her.

Canvas Scaler tilbyder indstillingen 'Scale with Screen Size', som automatisk skalerer UI-elementerne baseret på skærmstørrelsen. Dette er effektivt til at sikre, at dine UI-elementer forbliver proportionale. Dog, som eksemplerne viser:

  • iPhone 6 (1334 x 750, ratio 1.77) og iPhone 8 Plus (1920 x 1080, ratio 1.77): En UI-element, som et kvadrat placeret i nederste højre hjørne, kan skaleres op, men forbliver på sin relative placering, da billedformatet er ens.
  • iPhone 13 Pro Max (2778 x 1284, ratio 2.16): Kvadratet kan ende uden for "safe area" eller være forkert placeret. Dette skyldes, at selvom skaleringen fungerer, er det billedformatet og safe areas, der ændrer den faktiske tilgængelige plads og relative positioner.
  • iPad 5th Gen. (2048 x 1536, ratio 1.33): Kvadratet kan forsvinde helt, da billedformatet er markant anderledes, og den faste position ikke længere giver mening.

Problemet ligger ikke primært i skaleringen (som Canvas Scaler håndterer), men i positioneringen og forankringen af UI-elementerne. uGUI tilbyder et robust forankringssystem ('Anchors' og 'Pivots' i Rect Transform-komponenten), der er designet til at håndtere netop dette. Ved at korrekt forankre dine UI-elementer til skærmens kanter, hjørner eller midterpunkter – og endnu vigtigere, til "safe area" – kan du sikre, at de altid vises som tilsigtet, uanset enhedens opløsning eller billedformat. Dette kræver en omhyggelig tilgang til UI-design, hvor du tænker i relative positioner og ikke faste pixelværdier.

Tilpasning af din App's Udseende

Ud over ydeevne er appens visuelle identitet og brugeroplevelse afgørende. Unitys iOS Player Settings giver omfattende kontrol over ikoner, lanceringsskærme og skærmorientering.

Ikoner og Lanceringsskærme

Appens ikoner er det første indtryk. Unity giver dig mulighed for at tilpasse ikoner til forskellige formål:

  • Application icons: De ikoner, der vises på brugerens startskærm.
  • Spotlight icons: Til søgeresultater i Spotlight.
  • Settings icons: Til appen i telefonens Indstillinger-menu.
  • Notification icons: Til notifikationer fra din app.
  • Marketing icons: Til App Store-visning.

For at give din app et professionelt og hurtigt første indtryk, er lanceringsskærmen (splash screen) essentiel. Unity tilbyder flere måder at implementere den på:

Use Storyboard for Launch: Dette er den anbefalede og mest moderne tilgang. Ved at aktivere denne indstilling kan du vælge en storyboard-fil (oprettet i Xcode) til din lanceringsskærm. Storyboards er dynamiske og kan bedre tilpasses forskellige enheder og orienteringer.

How do I set a target DPI in Unity?
When you select this value, the Target DPI property appears. Use the Target DPI property to set the target DPI of the game screen. Unity downscales the game screen to match this setting if the device’s native screen DPI is higher than this value. This helps you optimize performance and battery life.

Alternativt kan du vælge Launch Screens eller Legacy Launch Images:

Launch Screens (XIB-filer)

En XIB-fil, hvor iOS dynamisk opretter en splash screen. De tilbyder mere fleksibilitet end statiske billeder, men har visse begrænsninger (f.eks. for iPad-orienteringer). Du kan vælge forskellige typer:

VærdiFunktion
DefaultLigner et lanceringsbillede; et billede vælges til portræt og landskab.
NoneOpfører sig som om kun lanceringsbilleder bruges.
Image and background (relative size)Centreret billede med solid baggrundsfarve; billedstørrelse er en procentdel af skærmstørrelsen.
Image and background (constant size)Samme som ovenfor, men billedstørrelsen defineres af et fast antal punkter.
Custom XIBEn brugerdefineret XIB-fil fra en hvilken som helst placering.

Legacy Launch Images (Statiske Billeder)

Dette er statiske billeder, der dækker hele skærmen. De skal defineres i et Asset catalog (Images.xcassets/LaunchImage) og kræver et specifikt billede for hver understøttet størrelse og orientering. Dette er den mest vedligeholdelseskrævende metode, da hver ny enhed eller opløsning kræver nye billeder. Unity understøtter et bredt udvalg af opløsninger, fra iPhone 3.5" Retina (640x960) til iPhone X Landscape Retina (2436x1125) og diverse iPad-opløsninger.

Vigtigt: Siden iOS 11 og fremefter er det stærkt anbefalet at bruge Launch Screens via Storyboards for at sikre korrekt visning på alle moderne enheder.

Skærmorientering

Valg af skærmorientering er afgørende for brugeroplevelsen. Under 'Resolution and Presentation' kan du indstille 'Default Orientation':

IndstillingHjemmeknap PositionBeskrivelse
PortraitBundStandard portrætvisning.
Portrait Upside DownTopPortrætvisning på hovedet.
Landscape LeftHøjre sideLandskabsvisning (hjemmeknap til højre).
Landscape RightVenstre sideLandskabsvisning (hjemmeknap til venstre).
Auto RotationSkærmorientering ændres med enhedens orientering (standard).

Hvis du vælger 'Auto Rotation', kan du yderligere finjustere opførslen:

  • Use Animated Autorotation: Aktiverer animerede overgange ved skærmrotation.
  • Allowed Orientations for Auto Rotation: Begrænser, hvilke orienteringer der er tilladt, selvom enheden roteres (f.eks. kun landskab).

Disse indstillinger deles mellem iOS- og Android-enheder, hvilket forenkler cross-platform udvikling.

Avancerede Indstillinger for iOS-udviklere

Ud over de grundlæggende visuelle indstillinger tilbyder Unity en række avancerede konfigurations- og optimeringsmuligheder, der er afgørende for en professionel app-udvikling.

Ydeevne og Optimeringsstrategier

For at maksimere ydeevnen og minimere appstørrelsen er optimeringsindstillingerne under 'Other Settings' afgørende:

  • Strip Engine Code: Denne indstilling (kun tilgængelig med IL2CPP Scripting Backend) fjerner ubrugt kode fra Unity Engine-funktioner. Det kan betydeligt reducere den færdige apps størrelse, hvilket er vigtigt for mobilapps.
  • Managed Stripping Level: Kontrollerer, hvor aggressivt Unity fjerner ubrugt managed (C#) kode.
IndstillingEffektBemærkninger
NormalFjerner utilgængelig managed kode for at reducere build-størrelse og .NET/IL2CPP build-tider.God balance mellem størrelse og sikkerhed.
AggressiveFjerner kode mere aggressivt.Kan føre til mindre builds, men også fjerne kode, der bruges via refleksion. Kræver muligvis en link.xml-fil for at bevare specifikke klasser/metoder.
  • Script Call Optimization: Vælger, hvordan undtagelsesbehandling håndteres for at forbedre hastigheden.
  • Vertex Compression: Komprimerer vertex-data for at reducere hukommelsesforbrug og forbedre rendering.
  • Optimize Mesh Data: Fjerner unødvendige data fra meshes, der ikke bruges af det påførte materiale (f.eks. tangenter, normaler, farver, UV'er), hvilket reducerer filstørrelse og VRAM-forbrug.

For information om multithreaded rendering i Unity på iOS, giver de angivne kilder ikke specifikke detaljer inden for Player Settings. Unity benytter sig generelt af multithreaded rendering for at optimere ydeevnen, men de specifikke indstillinger er ikke eksponeret direkte her.

App-konfiguration og Identifikation

Disse indstillinger er fundamentale for din apps identitet og funktionalitet:

  • Bundle Identifier: Din apps unikke identifikator (f.eks. com.CompanyName.ProductName). Afgørende for App Store-udgivelse og provisionering.
  • Version: Appens udgivelsesversionsnummer (f.eks. 4.3.6).
  • Build: Build-nummeret for den specifikke version.
  • Signing Team ID: Dit Apple Developer Team ID, nødvendigt for automatisk signering i Xcode.

Scripting Backend: Dette er en af de mest kritiske indstillinger for iOS:

  • Mono: Kompilerer C#-kode til .NET Common Intermediate Language (CIL). Advarsel: Mono-builds accepteres ikke længere i Apple App Store og understøttes ikke af iOS 11 og nyere. Denne indstilling er forældet for iOS-udvikling.
  • IL2CPP: Kompilerer C#-kode til CIL, konverterer CIL til C++, og kompilerer derefter C++ til native maskinkode. Dette er den anbefalede og praktisk talt obligatoriske scripting backend for moderne iOS-udvikling og App Store-udgivelse, da det giver bedre ydeevne og er i overensstemmelse med Apples krav.

API Compatibility Level: Bestemmer hvilke .NET API'er du kan bruge. 'Net Standard 2.0' og '.Net 4.x' er de moderne valg. '.Net Standard 2.0' giver mindre builds og fuld cross-platform support, mens '.Net 4.x' inkluderer flere API'er, men kan resultere i større builds.

Apple-specifikke informationer: Her kan du angive årsagen til, at din app anmoder om adgang til kamera, lokation eller mikrofon. Disse beskrivelser er obligatoriske og vises til brugeren, når appen første gang anmoder om adgang.

How much does iPhone 8 Plus weigh?
The device weighs 202 g. iPhone 8 Plus has a large-sized Retina IPS LCD display with a 5.5-inch screen (83.4 cm 2, 16:9 aspect ratio), and an approximate 67.4% screen-to-body ratio. The display is a touch screen, meaning that it supports touch events - interactions using a finger or stylus. 1 Property is displayed as width × height × thickness.
  • Mute Other Audio Sources: Hvis aktiveret, stopper din Unity-app lyd fra andre apps, der kører i baggrunden.
  • Requires Persistent WiFi: Sikrer, at iOS opretholder en aktiv Wi-Fi-forbindelse, mens appen kører.
  • Allow downloads over HTTP (nonsecure): Tillader download af indhold over HTTP. HTTPS er dog standard og anbefales.

Fejlfinding og Rapportering

For at diagnosticere og rette fejl tilbyder Unity flere nyttige værktøjer:

  • Enable Internal Profiler: Aktiverer en intern profiler, der indsamler ydeevnedata og udskriver en rapport til konsollen. Dette hjælper med at identificere flaskehalse i din app.
  • Enable Crash Report API: Aktiverer en brugerdefineret crash reporter, der fanger crashes og gør crash-logs tilgængelige for scripts. Dette er uvurderligt for at forbedre stabiliteten af din app efter udgivelse.

    Ofte Stillede Spørgsmål

    Her er svar på nogle af de mest almindelige spørgsmål vedrørende Unitys iOS Player Settings:

    Hvad er formålet med Target DPI?

    Target DPI giver dig mulighed for at specificere en mål-DPI for din apps rendering. Hvis enhedens native DPI er højere, vil Unity nedskalere renderingen for at matche din mål-DPI. Dette er primært en optimeringsfunktion, der kan forbedre ydeevnen (højere framerates) og reducere batteriforbruget, især på enheder med meget høj opløsning som de nyeste iPhones og iPads, uden at ofre for meget visuel kvalitet.

    Hvordan sikrer jeg, at min UI ser godt ud på alle iOS-enheder, inklusive "safe areas"?

    Brug Unitys uGUI-system med Canvas Scaler-komponenten indstillet til 'Scale with Screen Size'. Det er dog lige så vigtigt at bruge Rect Transform-komponentens 'Anchors' og 'Pivots' korrekt. Forankr dine UI-elementer til de relevante kanter eller hjørner af skærmen, og husk at tage højde for "safe areas" (f.eks. ved at justere offsets eller bruge Layout Groups), så elementerne ikke skjules af hak eller afrundede hjørner på nyere enheder. Test på forskellige enhedssimulatorer og virkelige enheder er afgørende.

    Skal jeg bruge Mono eller IL2CPP som Scripting Backend for iOS?

    Du skal bruge IL2CPP som Scripting Backend til iOS-udvikling. Apple accepterer ikke længere apps bygget med Mono i App Store, og Mono understøttes ikke fuldt ud af iOS 11 og nyere. IL2CPP kompilerer din C#-kode til C++, som derefter kompileres til native maskinkode, hvilket resulterer i bedre ydeevne og fuld kompatibilitet med Apples krav.

    Hvad er forskellen mellem Launch Screens og Legacy Launch Images?

    Launch Screens (via Storyboards eller XIB-filer) er den moderne og anbefalede metode. De er dynamiske og kan bedre tilpasse sig forskellige skærmstørrelser og orienteringer uden at kræve specifikke billeder for hver enhed. Legacy Launch Images er statiske billeder, der skal oprettes for hver enkelt understøttet opløsning og orientering. Dette er en forældet og vedligeholdelseskrævende metode, der bør undgås for nye projekter.

    Hvad er Managed Stripping Level, og hvilken skal jeg vælge?

    Managed Stripping Level bestemmer, hvor aggressivt Unity fjerner ubrugt C#-kode fra din app for at reducere filstørrelsen. 'Normal' er en god standard, der fjerner utilgængelig kode. 'Aggressive' fjerner mere kode, hvilket kan resultere i en mindre app, men der er en risiko for, at kode, der bruges via refleksion, fjernes fejlagtigt. Hvis du vælger 'Aggressive', skal du muligvis oprette en link.xml-fil for at bevare specifikke klasser eller metoder, der ellers ville blive fjernet. Start med 'Normal' og skift til 'Aggressive' kun hvis du har brug for yderligere størrelsesoptimering og er villig til at teste grundigt.

    Konklusion

    At mestre Unitys iOS Player Settings er en uundværlig færdighed for enhver mobiludvikler. Ved omhyggeligt at konfigurere DPI, UI-skalering, lanceringsskærme og de mange avancerede optimeringsmuligheder kan du skabe applikationer, der ikke blot fungerer problemfrit, men også leverer en enestående brugeroplevelse på tværs af et mangfoldigt økosystem af iOS-enheder. Tag dig tid til at udforske disse indstillinger, eksperimenter med dem, og test din app grundigt for at sikre, at den opfylder både dine og dine brugeres forventninger.

Hvis du vil læse andre artikler, der ligner Optimering af Unity iOS Apps: En Dybdegående Guide, kan du besøge kategorien Mobiludvikling.

Go up