18/08/2024
I den dynamiske verden af mobilspil er visuel flydendehed afgørende for en overbevisende brugeroplevelse. En af de mest almindelige visuelle forstyrrelser, der kan ødelægge immersionen, er skærmrivning (screen tearing). Dette fænomen opstår, når spillets billedhastighed er ude af synkronisering med skærmens opdateringshastighed, hvilket resulterer i synlige vandrette linjer på skærmen, hvor flere billeder vises samtidigt i en enkelt tegning. Heldigvis findes der effektive teknologier til at bekæmpe dette problem: V-Sync og Adaptive Sync. Denne artikel vil dykke ned i, hvordan du implementerer og forstår disse teknologier specifikt inden for Unity-miljøet, med et særligt fokus på mobiludvikling for iPhone og Android.

Uanset om du er en erfaren Unity-udvikler eller lige er begyndt, vil forståelsen af V-Sync og Adaptive Sync give dig de værktøjer, du skal bruge for at levere en poleret og professionel spiloplevelse. Vi vil udforske de forskellige metoder til implementering, deres fordele og ulemper, samt hvordan de påvirker ydeevnen på mobile enheder.
Forståelse af V-Sync (Vertikal Synkronisering)
V-Sync, eller Vertikal Synkronisering, er en ældre, men stadig relevant teknologi designet til at eliminere skærmrivning. Princippet er simpelt: det synkroniserer spillets billedhastighed med skærmens opdateringshastighed. Hvis din mobilskærm for eksempel har en opdateringshastighed på 60Hz (hvilket betyder, at den opdateres 60 gange i sekundet), vil V-Sync forsøge at begrænse dit spils billedhastighed til 60 billeder per sekund (FPS). Hvert nyt billede vil kun blive vist, når skærmen er klar til at tegne et nyt billede, typisk ved starten af en ny vertikal blankningsperiode (deraf navnet V-Sync).
Implementering af V-Sync i Unity
Unity tilbyder to primære måder at aktivere V-Sync på: via projektindstillingerne eller programmatisk via script.
1. Aktivering via Projektindstillinger:
- Gå til Edit > Project Settings > Quality i Unity-editoren.
- Under 'Quality Settings' finder du en rullemenu mærket 'VSync Count'.
- For at aktivere V-Sync skal du indstille den til 'Every V Blank' (synkroniserer med hver vertikale blankning, hvilket typisk betyder, at FPS vil matche skærmens opdateringshastighed, f.eks. 60 FPS på en 60Hz skærm).
- Hvis du ønsker at deaktivere V-Sync (f.eks. for benchmarking), skal du indstille den til 'Don't Sync'.
2. Aktivering via Script:
Du kan også styre V-Sync programmatisk ved hjælp af QualitySettings.vSyncCount-egenskaben. Dette giver dig større fleksibilitet, især hvis du vil give brugerne mulighed for at tænde eller slukke for V-Sync i spillets indstillinger, eller hvis du vil deaktivere det for specifikke testscenarier.
using UnityEngine;
public class VSyncControl: MonoBehaviour
{
void Start()
{
// Aktiver V-Sync (FPS vil matche skærmens opdateringshastighed)
QualitySettings.vSyncCount = 1;
// For at deaktivere V-Sync:
// QualitySettings.vSyncCount = 0;
// For at synkronisere hvert andet V Blank (halv opdateringshastighed):
// QualitySettings.vSyncCount = 2;
}
}Når QualitySettings.vSyncCount er sat til 1, vil Unity forsøge at matche spillets billedhastighed med skærmens opdateringshastighed. Hvis du sætter den til 0, deaktiveres V-Sync.
Fordele og Ulemper ved V-Sync
- Fordele:
- Eliminerer effektivt skærmrivning, hvilket giver et renere og mere stabilt billede.
- Giver en mere konsistent visuel oplevelse.
- Ulemper:
- Kan introducere inputforsinkelse (input lag), da spillet skal vente på skærmens næste opdateringscyklus, før det kan vise et nyt billede. Dette kan være mærkbart i hurtige spil.
- Begrænser billedhastigheden til skærmens opdateringshastighed. Hvis dit spil kan køre med 120 FPS, men skærmen kun er 60Hz, vil du kun se 60 FPS.
- Hvis spillets billedhastighed falder under skærmens opdateringshastighed, kan V-Sync forårsage pludselige fald i FPS (stuttering), da det kan tvinge spillet til at vente på den næste V-blank, hvilket kan føre til, at billeder vises med en uregelmæssig kadence.
Adaptive Sync (Variabel Opdateringshastighed)
Adaptive Sync er en nyere og mere avanceret teknologi, der adresserer nogle af V-Sync's begrænsninger, især inputforsinkelse og stuttering ved FPS-fald. Teknologier som NVIDIAs G-Sync og AMD's FreeSync falder ind under paraplyen Adaptive Sync. I stedet for at spillet tilpasser sig skærmen, tilpasser skærmens opdateringshastighed sig spillets billedhastighed. Dette kaldes også variabel opdateringshastighed (Variable Refresh Rate - VRR).
Implementering og Relevans for Unity og Mobil
Det er vigtigt at forstå, at Unity som spilmotor ikke direkte kontrollerer Adaptive Sync-indstillinger. Disse styres på hardware- og driverniveau af brugerens skærm og grafikkort (eller mobil-chipset). Dog kan du som udvikler optimere dit spil, så det bedst muligt kan drage fordel af Adaptive Sync, hvis det er tilgængeligt på brugerens enhed.
1. Tjek Hardwarekompatibilitet:
For at Adaptive Sync skal fungere, skal brugeren have en kompatibel skærm og et kompatibelt grafikkort/chipset, der understøtter teknologien (f.eks. FreeSync-skærm med AMD-GPU, eller G-Sync-skærm med NVIDIA-GPU). På mobile enheder understøtter nyere flagskibsmodeller som visse iPhones (ProMotion) og Android-telefoner (med LTPO-skærme) variabel opdateringshastighed. Brugere skal ofte aktivere dette i deres enheds indstillinger, men det sker i stigende grad automatisk for at spare på batterilevetid.
2. Optimering af Billedhastighed i Unity:
Selvom Unity ikke aktiverer Adaptive Sync, kan du sikre, at dit spil kører så optimalt, at det kan drage fordel af det. En stabil og ensartet billedhastighed er nøglen. Du kan bruge Application.targetFrameRate til at sætte en øvre grænse for spillets billedhastighed. Mens -1 betyder ingen begrænsning, kan det være nyttigt at sætte en realistisk grænse for mobil, f.eks. 60 eller 120 FPS, for at styre strømforbrug og varmeudvikling.

using UnityEngine;
public class FrameRateControl: MonoBehaviour
{
void Start()
{
// Sæt en mål-billedhastighed, f.eks. 60 FPS
Application.targetFrameRate = 60;
// For ingen begrænsning (kan bruges til benchmarking, men pas på batteri og varme):
// Application.targetFrameRate = -1;
}
}Fordele og Ulemper ved Adaptive Sync
- Fordele:
- Eliminerer skærmrivning fuldstændigt.
- Reduceret inputforsinkelse sammenlignet med traditionel V-Sync, da skærmen ikke venter på en fast tidsramme.
- Meget mere flydende oplevelse, især når spillets billedhastighed svinger, da skærmen dynamisk matcher FPS.
- Kan bidrage til bedre batterilevetid på mobile enheder med VRR-skærme, da skærmen kan sænke sin opdateringshastighed, når der ikke sker meget på skærmen.
- Ulemper:
- Kræver kompatibel hardware (skærm og GPU/chipset), som ikke alle brugere har.
- Ikke direkte kontrollerbar via Unity; afhænger af brugerens systemindstillinger.
V-Sync vs. Adaptive Sync: En Sammenligning
For at give et klarere billede af forskellene og lighederne mellem V-Sync og Adaptive Sync, se følgende sammenligningstabel:
| Funktion | V-Sync | Adaptive Sync |
|---|---|---|
| Formål | Eliminerer skærmrivning | Eliminerer skærmrivning, reducerer inputforsinkelse og stuttering |
| Synkronisering | Spil tilpasser sig skærmens faste opdateringshastighed | Skærmens opdateringshastighed tilpasser sig spillets dynamiske billedhastighed |
| Inputforsinkelse | Kan introducere mærkbar forsinkelse | Markant reduceret forsinkelse |
| FPS-begrænsning | Begrænser FPS til skærmens opdateringshastighed | Tillader variabel FPS inden for skærmens VRR-område |
| Stuttering ved FPS-fald | Kan forårsage stuttering, hvis FPS falder under skærmens opdateringshastighed | Mindre tilbøjelig til stuttering, da skærmen tilpasser sig |
| Hardwarekrav | Ingen specifikke krav udover en skærm | Kræver kompatibel skærm og GPU/chipset (f.eks. FreeSync/G-Sync) |
| Kontrol i Unity | Direkte kontrol via Quality Settings | Ingen direkte kontrol; Unity optimerer spillet, hardwaren håndterer synkronisering |
| Relevans for Mobil | Ja, ofte standard for at spare batteri og undgå rivning | Ja, på nyere enheder med variabel opdateringshastighed (f.eks. ProMotion), optimering hjælper med at udnytte det |
Mobil Specifikke Overvejelser og Benchmarking
Et almindeligt spørgsmål fra udviklere er: 'Kan jeg deaktivere V-Sync på en mobil enhed?' Dette er især relevant for benchmarking, hvor man ønsker at se den maksimale rå ydeevneoptimering af Unity-motoren uden begrænsninger.
Som nævnt tidligere, kan du deaktivere V-Sync i Unity ved at sætte QualitySettings.vSyncCount = 0; og Application.targetFrameRate = -1; (ingen begrænsning). Men selv med disse indstillinger kan du opleve, at din Unity-app på en mobil enhed stadig ikke kan komme over 60 FPS, selvom native benchmarks viser højere tal.
Dette kan skyldes flere faktorer, der er specifikke for mobile platforme:
- Operativsystemets V-Sync: Mobiloperativsystemer (iOS og Android) kan have deres egen V-Sync-implementering på systemniveau, der overstyrer applikationens indstillinger for at sikre en stabil brugeroplevelse, spare batteri og styre varme. Selvom din Unity-app forsøger at køre frit, kan OS'et stadig håndhæve en 60Hz (eller højere, hvis skærmen understøtter det) opdateringshastighed, og dermed begrænse FPS.
- Termisk Begrænsning (Thermal Throttling): Mobile enheder er designet til at styre varmeudvikling aggressivt for at beskytte hardwaren og opretholde en stabil drift. Hvis din app presser enheden for hårdt, vil systemet automatisk sænke CPU- og GPU-frekvenserne, hvilket resulterer i en lavere billedhastighed, selvom den potentielt kunne køre hurtigere.
- Batterilevetid: At køre med meget høj FPS (f.eks. over 60-90 FPS) på en mobil enhed bruger betydeligt mere strøm og dræner batteriet hurtigere. OS'et kan begrænse FPS for at prioritere batterilevetid.
- Skærmens Opdateringshastighed: Selvom mange flagskibstelefoner nu har 90Hz, 120Hz eller endda 144Hz skærme, er 60Hz stadig den mest udbredte standard. Hvis skærmen er 60Hz, vil selv en app, der kan generere 1000 FPS, kun vise 60 unikke billeder per sekund.
For benchmarking på mobil er det derfor vigtigt at overveje disse faktorer. Du kan opnå et 'råt' benchmark, men det er ofte ikke repræsentativt for den faktiske brugeroplevelse, da de fleste enheder vil anvende begrænsninger for at optimere batteri og varme.
Bedste Praksis for Unity Spil på Mobil
- Balancér Ydeevne og Visuel Kvalitet: På mobile enheder er der en fin balance mellem at opnå høj FPS og at opretholde en god batterilevetid samt undgå overophedning. Brug Unity's Profiler til at identificere flaskehalse og optimere dit spil.
- Overvej Standard Billedhastighed: For de fleste mobilspil er 30 FPS en acceptabel minimumsstandard, og 60 FPS er ideelt. At sigte efter meget højere kan være unødvendigt og kontraproduktivt for batteriet.
- Brug Application.targetFrameRate Strategisk: Hvis du har et spil, der ikke kræver en ekstrem høj billedhastighed, kan du med fordel indstille
Application.targetFrameRatetil f.eks. 60 FPS. Dette kan hjælpe med at spare batteri og reducere varme, selvom V-Sync er slået fra. - Informér Brugere: Hvis dit spil drager fordel af Adaptive Sync, kan det være en god idé at informere brugere med kompatibel hardware om at aktivere det i deres systemindstillinger. Dette er dog mindre relevant for mobil, hvor OS'et ofte håndterer dette automatisk.
- Test på Forskellige Enheder: Test altid dit spil på en bred vifte af mobile enheder for at sikre en ensartet oplevelse. Hvad der fungerer godt på en topmodel iPhone, fungerer måske ikke optimalt på en ældre Android-enhed.
- Kontinuerlig Overvågning: Overvåg billedhastighedsstabiliteten under udviklingen. Pludselige fald i FPS er ofte mere forstyrrende end en konstant lavere FPS.
Ofte Stillede Spørgsmål (FAQ)
Hvad er skærmrivning, og hvorfor sker det?
Skærmrivning opstår, når grafikkortet sender nye billeder til skærmen, hurtigere eller langsommere end skærmen kan opdatere sig selv. Dette resulterer i, at skærmen viser dele af to forskellige billeder samtidigt, hvilket skaber en synlig 'rive'-linje. Det sker, fordi skærmen tegner billeder fra top til bund, og hvis et nyt billede sendes midt i en opdatering, vises den øverste del af det nye billede og den nederste del af det gamle billede.
Kan jeg deaktivere V-Sync på en mobil enhed i Unity?
Ja, du kan deaktivere V-Sync i Unity ved at sætte QualitySettings.vSyncCount = 0; og Application.targetFrameRate = -1;. Dog kan mobiloperativsystemet (iOS/Android) stadig håndhæve en V-Sync-lignende begrænsning på et lavere niveau for at spare batteri, styre varme og sikre en stabil brugeroplevelse, hvilket kan forhindre dig i at opnå de højeste mulige FPS-tal, du måske ser i native benchmarks.
Hvorfor er min Unity-app stadig begrænset til 60fps på mobil, selvom V-Sync er slået fra?
Dette skyldes ofte faktorer uden for Unity's direkte kontrol: mobiloperativsystemets indbyggede V-Sync, termisk begrænsning af enheden for at undgå overophedning, eller at enhedens skærm simpelthen har en maksimal opdateringshastighed på 60Hz. Selvom din app producerer flere billeder, kan skærmen kun vise 60 af dem i sekundet.
Er Adaptive Sync relevant for mobilspil?
Ja, Adaptive Sync, eller variabel opdateringshastighed (VRR), bliver stadig mere relevant for mobilspil. Nyere flagskibstelefoner (som iPhones med ProMotion eller avancerede Android-enheder) har skærme, der understøtter VRR. Selvom Unity ikke direkte aktiverer det, drager et spil, der kan køre stabilt ved forskellige billedhastigheder, fordel af VRR, da skærmen dynamisk kan matche spillets FPS, hvilket giver en utrolig flydende oplevelse og potentielt sparer batteri.
Hvad er den bedste indstilling for flydende spil på mobil?
Den bedste indstilling afhænger af dit spil og målgruppen. Generelt anbefales det at sigte efter en stabil 30 eller 60 FPS. Aktiver V-Sync for at eliminere skærmrivning og opnå en jævn billedhastighed, især hvis du ikke oplever mærkbar inputforsinkelse. For benchmarking eller spil, der kræver den absolut laveste inputforsinkelse, kan du deaktivere V-Sync og sætte Application.targetFrameRate = -1;, men vær opmærksom på de begrænsninger, der er specifikke for mobilhardware og OS.
Konklusion
At forstå og implementere V-Sync og Adaptive Sync er afgørende for at levere en poleret og professionel spiloplevelse i Unity, især når du udvikler til mobile platforme som iPhone og Android. Mens V-Sync er en direkte kontrollerbar funktion i Unity, kræver Adaptive Sync, at du optimerer dit spil, så det kan drage fordel af brugerens hardware og operativsystemets muligheder. Ved at anvende disse teknikker korrekt kan du effektivt eliminere skærmrivning, reducere inputforsinkelse og sikre, at dine spillere får en uafbrudt og flydende visuel oplevelse, uanset hvilken mobil enhed de bruger.
Hvis du vil læse andre artikler, der ligner Optimer Spiloplevelsen: V-Sync & Adaptiv Synkronisering i Unity, kan du besøge kategorien Teknologi.
