15/06/2025
Unity 5.4: En Dybdegående Gennemgang af Nye Funktioner og Opgraderingsdetaljer
Unity 5.4 repræsenterer et betydeligt spring fremad for spiludviklere, der bringer en række nye funktioner, forbedringer og vigtige ændringer til platformen. Denne opdatering fokuserer på at optimere ydelsen, udvide grafiske muligheder og strømline udviklingsprocessen. For dem, der opgraderer eksisterende projekter fra tidligere versioner, er det afgørende at forstå disse ændringer for at sikre en problemfri overgang. Denne artikel vil udforske de mest markante nye funktioner, dykke ned i API-ændringer, shader-opdateringer og give vejledning til opgradering fra Unity 5.3.

- Nye Funktioner i Unity 5.4
- API- og Shader-ændringer
- Playables: Migration til 5.4
- Oculus Rift: Opgradering fra Unity 5.3
- Reordering Siblings og Runtime Hierarkier
- Windows Store og Script Serialization
- Understøttelse af Retina Skærme
- Fysik: Meshes og Transform Drift
- Web Player
- Tabel: Vigtigste Ændringer i Unity 5.4
- Ofte Stillede Spørgsmål
Nye Funktioner i Unity 5.4
Unity 5.4 introducerede flere banebrydende funktioner designet til at forbedre både visuel kvalitet og udviklingseffektivitet.
Light Probe Proxy Volumes
En af de mest bemærkelsesværdige tilføjelser er Light Probe Proxy Volumes. Denne funktion giver udviklere mulighed for at udnytte mere detaljeret lysinformation på tværs af overfladen af store dynamiske objekter. Dynamiske objekter, som typisk ikke kan bruge baked lightmaps, kan nu blive belyst forskelligt i forskellige områder af deres overflade, baseret på placeringen af flere light probes inden for et afgrænset volumen. Dette resulterer i mere realistisk og nuanceret belysning af komplekse, bevægelige genstande i spilmiljøer.
GPU Instancing Support
GPU Instancing Support er en yderst optimeret metode til at tegne store mængder identiske modeller. Ved at udnytte GPU'ens hardware kan modeller, der deler samme materiale og mesh, instansieres. Dette reducerer markant antallet af draw calls, hvilket fører til en mærkbar forbedring af renderingens ydeevne, især i scener med mange ensartede objekter som f.eks. træer, græs eller fjender.
Texture Array Support
Med introduktionen af Texture Array Support, en funktion der stammer fra Direct3D 10, OpenGL 3, OpenGL ES 3 og lignende moderne platforme, kan udviklere nu samle en samling af 2D-teksturer, der alle har samme størrelse og format. Disse teksturer behandles som et enkelt objekt af GPU'en og kan samples i shaders ved hjælp af en tekstur-elementindeks. Brugen af tekstur-arrays giver en potentiel ydelsesforbedring sammenlignet med at håndtere flere individuelle teksturer.
Fast Graphics CopyTexture
Unity 5.4 introducerer også en ny, hurtigere metode til at kopiere teksturinformation fra en tekstur til en anden med Fast Graphics CopyTexture. Dette kan være særligt nyttigt i grafikintensive applikationer, hvor hyppig teksturmanipulation er nødvendig.

Particle Trigger Module
Partikelsystemer har fået en væsentlig opgradering med Particle Trigger Module. Dette modul giver partikelsystemer evnen til at udløse en callback-funktion, når de interagerer med en eller flere Trigger Colliders i scenen. En callback kan aktiveres, når en partikel indtræder eller forlader en Collider, eller mens en partikel befinder sig inden for eller uden for Collideren. Ydermere introduceres en ikke-uniform skaleringsmulighed for partikler, der tillader separate bredde- og højdeværdier.
API- og Shader-ændringer
Opgradering til Unity 5.4 medfører også ændringer i eksisterende API'er og shaders, som udviklere skal være opmærksomme på.
Networking: Multiplayer Service API ændringer
Der er foretaget adskillige ændringer i Multiplayer Service API. Disse ændringer kan påvirke projekter, der benytter Unitys netværksfunktioner til multiplayer-spil.
Networking: WebRequest er ikke længere eksperimentel
WebRequest-interfacet er blevet promoveret fra UnityEngine.Experimental.Networking til UnityEngine.Networking. Projekter, der bruger UnityWebRequest, skal opdateres for at afspejle denne ændring.
Scene View: Tone mapping ikke automatisk anvendt
Effekter med attributten ImageEffectTransformsToLDR anvendes ikke længere automatisk på Scene View. En ny attribut, ImageEffectAllowedInSceneView, er introduceret for effekter, der skal anvendes i Scene View. Standard Assets i 5.4 er blevet opdateret for at reflektere denne ændring.
Shaders: Omdøbte variabler
En række indbyggede shader-variabler er blevet omdøbt for at sikre konsistens:
_Object2Worldog_World2Objecter nuunity_ObjectToWorldogunity_WorldToObject.- Variabler relateret til skygger og lysmatricer er blevet præfiks med
unity_for at give en mere ensartet navngivning.
Variabelreferencer omdøbes automatisk i .shader- og .cginc-filer ved import. Det er dog vigtigt at bemærke, at shaders, der er blevet omdøbt, ikke vil være kompatible med Unity 5.3 eller tidligere versioner uden manuel omdøbning.

Shaders: Uniform Arrays
Håndteringen af arrays af shader-egenskaber er ændret. Der er nu "native" understøttelse for float/vector/matrix arrays i shaders via nye API'er som MaterialPropertyBlock.SetFloatArray og Shader.SetGlobalFloatArray. Disse nye API'er tillader arrays op til 1.023 elementer. Den gamle metode med nummer-suffiksnavne (f.eks. _Colors0, _Colors1) er deprecated.
Shaders: Diverse ændringer i 5.4
- Standard shader-kompileringstarget er ændret til "#pragma target 2.5".
Material(string)konstruktøren er deprecated og vil udskrive en fejl, hvis den bruges.- Den interne shader til beregning af screen-space directional light shadows er flyttet til Graphics-indstillingerne. Hvis du bruger en tilpasset version, skal du vælge din brugerdefinerede shader under Edit > Project Settings > Graphics.
- Reflection probes deler en sampler mellem to teksturer. Hvis du sampler dem manuelt i din shader, kan du opleve en "undeclared identifier samplerunity_SpecCube1" fejl, som kræver en kodeændring.
UnityEditor.ShaderUtil.ShaderPropertyTexDimer deprecated; brugTexture.dimensioni stedet.
ComputeBuffers
Datalayoutet for ComputeBuffers i automatisk konverterede OpenGL-shaders er ændret for at matche DirectX ComputeBuffers. Hvis du bruger ComputeBuffers i OpenGL, skal du fjerne kode, der tilpasser data til tidligere OpenGL-specifikke layoutregler.
Playables: Migration til 5.4
Playables, en API til at organisere og evaluere datakilder i en træstruktur, har gennemgået betydelige ændringer:
- Playables er nu structs i stedet for klasser, hvilket forbedrer ydeevnen ved at undgå boxing/unboxing.
- Playable structs er handles til native Playable klasser.
- En ikke-null Playable struct garanterer ikke, at Playable er brugbar; brug
.IsValidmetoden til at verificere. - Metoder, der tidligere returnerede null for tomme inputs/outputs, returnerer nu
Playable.Null. Playable.Nuller en ugyldig Playable og kan bruges til at reservere tomme inputs eller implicit afbryde tilsluttede inputs.- Sammenligning af Playables med null er meningsløs; sammenlign med
Playable.Null. - Playables skal allokeres ved hjælp af den statiske
Createmetode og deallokeres ved hjælp af.Destroymetoden. Manglende deallokering vil medføre hukommelseslækager. ScriptPlayableer erstattet afCustomAnimationPlayables.- Det er ikke længere muligt at arve fra base Playables; aggreger Playables i dine brugerdefinerede Playables.
Oculus Rift: Opgradering fra Unity 5.3
Ved opgradering af Oculus VR-projekter fra Unity 5.3, følg disse trin:
- Genaktiver virtual reality-understøttelse: Gå til Edit > Project Settings > Player, vælg Other Settings og marker afkrydsningsfeltet Virtual Reality Supported. Brug listen Virtual Reality SDK til at tilføje eller fjerne enheder.
- Fjern Oculus Spatializer: Gå til Edit > Project Settings > Audio og fjern Oculus Spatializer Audio Plugin fra dropdown-menuen for Spatializer Plugin. Dette kan forhindre konflikter og byggefejl.
Reordering Siblings og Runtime Hierarkier
Ændringer i Sibling Reordering
I Unity 5.4 er der foretaget en ændring i de events, der udløses, når sibling GameObjects omordnes. Tidligere modtog alle søskende en OnTransformParentChanged kald, når rækkefølgen blev ændret. I 5.4 modtager søskende ikke længere dette kald; i stedet modtager forældre-GameObjectet et enkelt kald til OnTransformChildrenChanged. Hvis dit projekt er afhængigt af den tidligere adfærd, skal du opdatere din kode til at reagere på OnTransformChildrenChanged på forældreobjektet.
Rearranging Store GameObject Hierarchier ved Runtime
På grund af optimeringer i Transform-komponenten kan det nu tage længere tid at omarrangere hierarkier med 1000+ GameObjects ved hjælp af Transform.SetParent eller ved at destruere dele af hierarkiet. Det anbefales at undgå at omarrangere sådanne store hierarkier ved runtime.
Windows Store og Script Serialization
Windows Store
Det genererede Visual Studio-projektformat er blevet opdateret for alle .NET scripting backend SDK'er. Dette løser problemer med overdreven genopbygning, når intet er ændret i det genererede projekt. Du skal muligvis slette eksisterende genererede *.csproj-filer, især hvis de blev bygget med "Generate C# projects" valgt, så Unity kan regenerere dem.

Script Serialization Fejl
Der er introduceret to nye fejlmeddelelser for script serialization, som fanger kald til Unity API fra konstruktører og feltinitialisatorer under deserialisering (loading). Da deserialisering kan ske på en anden tråd end hovedtråden, er det ikke sikkert at kalde Unity API'er under denne proces.
Understøttelse af Retina Skærme
Unity-editoren understøtter nu Retina-opløsninger på Mac OS X med højopløst tekst, UI og 3D-visninger. Editorens GUI er nu defineret i punkt-rum i stedet for pixel-rum. På standardopløsningsskærme er der ingen ændring, men på Retina-skærme er hvert punkt to pixels. Den aktuelle skærm til UI-skalering er tilgængelig via EditorGUIUtility.pixelsPerPoint. Hvis din editorkode bruger standard Editor/GUI/Layout metoder, kræves der sandsynligvis ingen ændringer. Hvis du bruger Screen.width/height, skal du skifte til EditorWindow.position.width/height. For brugerdefinerede editorer i Inspector, brug EditorGUIUtility.currentViewWidth. Hvis du viser andet indhold i din UI, som f.eks. en RenderTexture, skal du muligvis konvertere dine punktstørrelser til pixelstørrelser ved hjælp af nye metoder i EditorGUIUtility. For GUIStyles med brugerdefinerede baggrunde kan du tilføje Retina-versioner af baggrundsteksturer ved at placere en tekstur med præcis fordoblede dimensioner i et GUIStyleState.scaledBackgrounds array. Macs med mindre kraftfuld grafikhardware kan opleve langsomme editor-framerater i 3D-visninger på grund af den øgede opløsning. Retina-understøttelse kan deaktiveres ved at vælge "Get Info" på Unity.app i Finder og markere "Open in Low Resolution".
Fysik: Meshes og Transform Drift
Der er foretaget ændringer for at forhindre physics meshes indeholdende ugyldige (ikke-endelige) vertices. Desuden er der foretaget ændringer for at undgå physics transform drift ved ikke at sende redundante transform-opdateringer. I 5.3 sendte animationssystemet altid transform-opdateringsmeddelelser for konstante animationskurver, hvilket vækkede Rigidbodies. I 5.4 vækkes Rigidbodies ikke, hvis der ikke er positionændringer. Hvis dit projekt er afhængigt af den tidligere adfærd, skal det muligvis justeres.
Web Player
Unity Web Player-platformen er blevet fjernet i Unity 5.4. Projekter, der opgraderes til 5.4, kan ikke længere deployeres til Web Player. Hvis du har ældre Web Player-projekter, der skal vedligeholdes, bør du undlade at opgradere dem til 5.4 eller nyere.
Tabel: Vigtigste Ændringer i Unity 5.4
| Funktion/Område | Ændring i Unity 5.4 | Implikation for Udviklere |
|---|---|---|
| Light Probe Proxy Volumes | Ny funktion for forbedret dynamisk belysning | Mere realistisk belysning af komplekse objekter |
| GPU Instancing | Optimeret tegning af identiske objekter | Forbedret ydeevne i scener med mange ens objekter |
| Texture Arrays | Samling af teksturer i ét objekt | Potentiel ydelsesforbedring og simplificeret teksturhåndtering |
| Networking API | Ændringer i Multiplayer Service API | Kræver muligvis opdatering af netværkskode |
| WebRequest | Promoveret fra Experimental | Opdatering af referencer nødvendig |
| Tone Mapping i Scene View | Ikke længere automatisk anvendt | Kræver brug af ImageEffectAllowedInSceneView |
| Shader Variabler | Omdøbning for konsistens | Kræver opdatering af shader-kode, inkompatibel med 5.3 uden manuel omdøbning |
| Uniform Arrays | Native support, gamle metoder deprecated | Brug nye API'er for bedre ydeevne og kompatibilitet |
| Playables | Structs i stedet for klasser, ændret API | Kræver migration af eksisterende Playable-kode |
| Oculus Rift | Ændringer i integration og indstillinger | Følg opgraderingsvejledningen for VR-projekter |
| Sibling Reordering | Ændret event-udløsning (OnTransformChildrenChanged) | Opdater kode, der reagerer på OnTransformParentChanged for søskende |
| Web Player | Fjernet | Ikke egnet til projekter, der kræver Web Player deployment |
Ofte Stillede Spørgsmål
Q: Hvad er de vigtigste nye funktioner i Unity 5.4?
A: De vigtigste nye funktioner inkluderer Light Probe Proxy Volumes, GPU Instancing Support, Texture Array Support og Particle Trigger Module.
Q: Skal jeg opdatere min kode, hvis jeg opgraderer til Unity 5.4?
A: Ja, især hvis du bruger Networking API'er, WebRequest, eller har tilpassede shaders med specifikke variabelnavne. Playables API'et har også gennemgået betydelige ændringer, der kræver migration af din kode.

Q: Kan jeg stadig deploye til Web Player med Unity 5.4?
A: Nej, Unity Web Player-målet er fjernet i Unity 5.4. Du skal bruge alternativer som WebGL.
Q: Hvordan påvirker Retina-understøttelsen min editor-oplevelse?
A: Editoren vil vise skarpere tekst og UI på Retina-skærme. Hvis du udvikler brugerdefinerede editor-vinduer eller bruger skæmstørrelser i pixels, skal du muligvis foretage justeringer for at udnytte den nye punkt-baserede skalering korrekt.
Q: Hvad skal jeg gøre, hvis mit projekt er afhængigt af den gamle OnTransformParentChanged adfærd for søskende?
A: Du skal ændre din kode til at lytte efter OnTransformChildrenChanged på forældre-GameObjectet i stedet.
Q: Er der ændringer i fysiksystemet, der kan påvirke mit spil?
A: Ja, der er ændringer for at håndtere ugyldige vertices i physics meshes og for at undgå transform drift. Hvis dit spil er stærkt afhængigt af, at Rigidbodies altid vækkes, kan du opleve ændringer i adfærd.
Unity 5.4 tilbyder en robust pakke af nye funktioner og forbedringer, der kan løfte dine spilprojekter. En grundig forståelse af de nævnte ændringer og en omhyggelig opgraderingsproces vil sikre, at du fuldt ud kan udnytte platformens potentiale.
Hvis du vil læse andre artikler, der ligner Unity 5.4: Nye Funktioner og Opgraderingsvejledning, kan du besøge kategorien Software.
