proceduremæssige forvaltning af aktiver i enhed

, proceduremæssige forvaltning af aktiver i enhed,,,,, 1,,,,,,,,, 4,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' ikke gå glip af det. vi har set tidligere, ved at tilføje vores egne værktøjer til enhed er redaktør, nu, i denne korte lektion, jeg vil introducere dig til håndtering af aktiver af manuskriptet i enhed.vi klarer os veje, skabe præfabrikerede filer, skabe en struktur og gem det til et billede.endelig vil vi også skabe en væsentlig sag, som anvender genereret billede, og alt dette vil blive gjort ved kode.,,, endelige resultat forpremiere, lad os tage et kig på det endelige resultat, vi arbejder hen imod:,, trin 1: oprettelse af det projekt, der skaber en tom projekt. vi vil ikke være bruger noget smart, så vi burde ikke gå til at importere noget overhovedet.når det er gjort, skabe en redaktør manuskript.lad os bruge sin enhed redaktør klasser, hvis vi sætter vores manuskript i en folder, der hedder, redaktør.da der ikke eksisterer i vores projekt, men vi er nødt til at skabe det, lad os skabe et manuskript indeni.,, trin 2: tilføje en menuitem, lad os rydde op i vores manuskript.bortset fra den grundlæggende funktionalitet, vil vi også være i stand til at bruge redaktøren klasser.vi er nødt til at være med unityeditor, og vores script 's klasse bør udvide, redaktør, klasse i stedet for, monobehaviour som normale spil objekter.ved hjælp af unityengine; anvendelse af systemet. samlinger; anvendelse af unityeditor; offentlige klasse eksempler: redaktør {}, i vores første opgave, vi skal arbejde med prefabs, lad os kalde det en prefabroutine,., offentlige klasse eksempler: redaktør {tomrum prefabroutine() {}}, til easly udføre denne funktion fra redaktør, - tilføj det som en, menuitem,., offentlige klasse eksempler: redaktør ([menuitem ("eksempler /præfabrikerede rutine")] ugyldig prefabroutine() {}}, bortset fra at lade den enhed, ved, at vi vil have denne funktion skal omsættes fra eksempler - > præfabrikerede rutine ", er vi også nødt til at gøre denne funktion er statisk. offentlige klasse eksempler: redaktør ([menuitem (" eksempler /præfabrikerede rutine ")] statisk tomrum prefabroutine() {}}, hvis du går bback til redaktør nu (og genopfriske menuen), vil i se, at der er en ny menu ved navn, eksempler,.,, hvis du vælger det, præfabrikerede rutine, at intet vil ske, da vores funktion er tomme.,, trin 3: skabe en folder til at forme vores projekt, som vi ønsker vi har brug for at vide, hvordan man skaber mapper, så vi kan gå rundt om.at skabe en mappe fra manuskriptet er meget ligetil, det eneste, vi skal gøre, er at lade enhed ved, hvor mappen skal placeres.for at skabe en mappe, vi skal bruge, assetdatabase, klasse., [menuitem ("eksempler /præfabrikerede rutine")] statisk tomrum prefabroutine() {assetdatabase. createfolder ("aktiver", "præfabrikerede folder");}, "aktiver" er navnet på den stiftende mappe af registret, vi ønsker at skabe.i vores tilfælde, er det vigtigste projekt mappe, hvor alle vores aktiver er importeret /skabt., konstaterer, at de også kan bruge. netto, fortegnelse, klasse.dette vil også lade dig fjerne, flytte eller få adgang til registre filer.at bruge denne klasse, du skal være ved hjælp af systemet. io,., hver gang du vælger det, præfabrikerede rutine, redaktør, en ny mappe bør oprettes og være synlige i projektet,.,, trin 4: skabe en præfabrikerede, til at skabe en præfabrikerede, vi har brug for at ringe, editorutility. createemptyprefab(),.funktionen er præfabrikerede vej som argument., [menuitem ("eksempler /præfabrikerede rutine")] statisk tomrum prefabroutine() {assetdatabase. createfolder ("aktiver", "præfabrikerede folder"); objekt præfabrikerede = editorutility. createemptyprefab ("aktiver /præfabrikerede mappe /obj. præfabrikerede");}, ikke glem alt om udvidelse.også efter at vi skaber den sag, vi er nødt til at ringe, assetdatabase. refresh(), så enheden er i stand til at se det., [menuitem ("eksempler /præfabrikerede rutine")] statisk tomrum prefabroutine() {assetdatabase. createfolder ("aktiver", "præfabrikerede folder"); objekt præfabrikerede = editorutility. createemptyprefab ("aktiver /præfabrikerede mappe /obj. præfabrikerede"); assetdatabase. refresh();}, hvis vi lader en løbende udvikling som et argument, hver gang vi vælger vores rutine nye tomme præfabrikerede vil erstatte den gamle.lad os give hvert præfabrikerede til separat folder til at imødegå den.for at gøre dette har vi brug for at redde de nyligt oprettede mappen til en snor, så vi kan bruge det som en vej argument senere.det, createfolder, funktion, returnerer et, ni,, som dybest set er filen er (eller fortegnelse er). der er en funktion, der har den vej, hvis vi forelægge dette id. det hedder, guidtoassetpath,; lad os bruge det for at få vores folder vej., [menuitem ("eksempler /præfabrikerede rutine.")] statisk tomrum prefabroutine() {snor sti = assetdatabase. guidtoassetpath (assetdatabase. createfolder ("aktiver", "præfabrikerede folder"); objekt præfabrikerede = editorutility. createemptyprefab ("aktiver /præfabrikerede mappe /obj. præfabrikerede"); assetdatabase. refresh();}, lad os bruge den vej, for at de prefabs, vi skal skabe for de nyligt oprettede mappe., [menuitem ("eksempler /præfabrikerede rutine")] statisk tomrum prefabroutine() {snor sti = assetdatabase.guidtoassetpath (assetdatabase. createfolder ("aktiver", "præfabrikerede folder"); objekt præfabrikerede = editorutility. createemptyprefab (sti + "/obj. præfabrikerede"); assetdatabase. refresh();}, du kan teste, hvorvidt oprettet tomme prefabs er pakket i mapper nu.,, løntrin 5: de præfabrikerede, hvis du skaber en præfabrikerede, så du vil nok ikke til at forlade det tomme, fordi det er nytteløs.lad os sætte vores præfabrikerede, hvis der er nogen kamp mod udvalgte, mens vores rutine er gennemført.vi får de præfabrikerede til udvalgte formål.for at få de nuværende udvalgte genstand, vi kan bruge, udvælgelse, klasse, der har en henvisning til det.at fastsætte de præfabrikerede, vi har brug for at ringe, replaceprefab(),., [menuitem ("eksempler /præfabrikerede rutine")] statisk tomrum prefabroutine() {snor sti = assetdatabase. guidtoassetpath (assetdatabase. createfolder ("aktiver", "præfabrikerede folder"); objekt præfabrikerede = editorutility. createemptyprefab (sti + "/obj. præfabrikerede"); assetdatabase. refresh(); hvis (udvælgelse. activeobject) editorutility. replaceprefab (selection.activegameobject, præfabrikerede)}, hvis du løber den rutine med ethvert spil formål udvalgte nu, så vil du mærke, at det skabte præfabrikerede automatisk er fastsat.,, det er det, vi har skabt en vane rutinemæssigt præfabrikerede skabelse, det der er ikke meget nyttige, men de bør være i stand til at vide hvordan man gør det nu, hvis der bliver behov for en sådan i din pr -oject. til sidst vil jeg også nævne, at assetdatabase, også lader dig flytte aktiver rundt, få dem til at ødelægge eller slette dem, ved at kræve, assetdatabase. moveasset(), assetdatabase. moveassettotrash(), og assetdatabase. deleteasset() hhv.resten af funktioner, kan findes på, assetdatabase, manuskript henvisning.,, trin 6: tilføje en anden menupunkt, lad os gå til et andet eksempel, denne gang vil vi skabe en struktur og en væsentlig programmatically.lad os kalde dette menupunkt, materielle rutine,., [menuitem ("eksempler /præfabrikerede rutine")] statisk tomrum prefabroutine() {snor sti = assetdatabase. guidtoassetpath (assetdatabase. createfolder ("aktiver", "præfabrikerede folder"); objekt præfabrikerede = editorutility. createemptyprefab (sti + "/obj. præfabrikerede"); assetdatabase. refresh(); hvis (udvælgelse. activeobject) editorutility. replaceprefab (selection.activegameobject, præfabrikerede)} [menuitem ("eksempler /materiale rutine")] statisk tomrum materialroutine() {}, nu har vi to punkter for at vælge fra, eksempler på menuen.,, trin 7: skabe en konsistens, - er at skabe en, texture2d, og dens størrelse, (256, 256), for eksempel., [menuitem ("eksempler /materiale rutine")] statisk tomrum materialroutine() {texture2d tex = nye texture2d (256, 256)), og vi bør ikke lade alle farveskiftet gå til spilde, så lad os fastsætte strukturen er det i henhold til en slags tanke op formlen.for at vi skal bruge to, for loops til at gennemgå hvert pixel.at fastsætte hver pixel farve, vi har brug for at ringe, setpixel(), som tager stilling til pixel - på en konsistens og farve som argumenter., [menuitem ("eksempler /materiale rutine")] statisk tomrum materialroutine() {texture2d tex = nye texture2d (256, 256); int (y = 0; y < 256; + y) (for int (x = 0 x < 256; + x) tex.setpixel (x, y, nye color())), at tildele farve, vi bruger, mathf. sin(), funktion.den farve, klasse kan indledes med tre vogne, der svarer til de røde, grønne og blå farve komponenter).max tilladt værdi, 1, og min er 0,, så de, sin(), funktion passer vores behov helt. for int (y = 0, y < 256; + y) (for int (x = 0 x < 256; + x) tex.setpixel (mathf. synd (x * y), mathf. synd (x * y), mathf. synd (x * y)))), betyder det ikke noget, vi forelægger, sin(), funktion, men for at få noget mere interessant, bør vi give en værdi, der ændrer for hver pixel.,, trin 8: skabe et billede, så lad os skabe et billede fra struktur, vi har skabt.Since we'll be writing to a file in binary mode, we need to be ,using System.IO,, so let's add it to the top of our script., using UnityEngine; using System.Collections; using UnityEditor; using System.IO; public class Examples : Editor,To save our texture as a ,PNG, image we first need to call ,EncodeToPNG(), which will return an array of bytes that the ,PNG, file consists of., for (int y = 0; y < 256; ++y) { \tfor (int x = 0; x < 256; ++x) \t\ttex.SetPixel(x, y, new Color(Mathf.Sin(x*y), Mathf.Sin(x*y), Mathf.Sin(x*y))); } byte[] pngData = tex.EncodeToPNG();,Now that we've got our ,pngData, we can write it to a file and create a ,PNG, image in this way., byte[] pngData = tex.EncodeToPNG(); if(pngData != null) fil. writeallbytes ("aktiver /tekstur. men heller ikke dér er menneskene sikre", pngdata), idet vi skaber den fil på en løbende udvikling, hver gang vi løber, materialroutine(),, strukturen vil blive erstattet, og siden har vi vores image, har vi ikke brug for den, der genereres tekstur længere, som det vil ikke refererer til et billede.lad os ødelægge det., byte [] pngdata = tex. encodetopng(); hvis (pngdata!= null) fil. writeallbytes ("aktiver /tekstur. men heller ikke dér er menneskene sikre", pngdata); destroyimmediate (tex), vi må også lade enhed ajourføre projekt mening og fil henvisninger til, at vi har brug for at ringe, assetdatabase. refresh(),., byte [] pngdata = tex. encodetopng(); hvis (pngdata!= null) fil. writeallbytes ("aktiver /tekstur. men heller ikke dér er menneskene sikre", pngdata); destroyimmediate (tex); assetdatabase. refresh(); lad os teste, om strukturen bliver oprettet, når vi gennemfører vores rutine.,, trin 9: skabe et materiale, vi har fået et billede, og nu kan vi skabe et materiale, der bruger det som en overflade.lad os skabe et nyt materiale,., assetdatabase. refresh(), nye materialer (shader. finde ("diffuse"), de skabte materiale vil bruge, diffus, shader.for at redde dette materiale til den fil, vi kan ringe til, assetdatabase. createasset(),.denne funktion er et aktiv, som det første argument, og den vej, som den anden. assetdatabase. refresh(); assetdatabase. createasset (nyt materiale (shader. finde ("diffuse"), "aktiver /nyt materiale. mat"), hvis du løber vores rutine nu, vil de se, at det materiale, er oprettet, som du kan se alt, er korrekte, er dens navn, nye materialer, og den bruger diffus, shader, men der er ingen tekstur, der tildeles det.,, trin 10: tildele tekstur, må vi først have en henvisning til det materiale, vi har skabt.vi kan få det ved at kræve, assetdatabase. loadassetatpath(), som meget aktiv - og vender sin anmodning. assetdatabase. createasset (nyt materiale (shader. finde ("diffuse"), "aktiver /nyt materiale. mat") materiale, materiale = (materiale) (assetdatabase. loadassetatpath ("aktiver /nyt materiale. mat", type (væsentlige)), lad os give vores genereret struktur som den vigtigste tekstur af materiale.kan vi få konsistens med henvisning til det, der genereres tekstur, på samme måde som vi har væsentlig henvisning, materiale, materiale = (materiale) (assetdatabase. loadassetatpath ("aktiver /nyt materiale. mat", type (væsentlige)); material.maintexture = (texture2d) (assetdatabase. loadassetatpath ("aktiver /tekstur. men heller ikke dér er menneskene sikre" type (texture2d)), til at se resultaterne, løb, materielle rutine,.,, som du kan se, er materialet tekstur, der nu, konklusion, det er slutningen af indførelsen, forvalte deres aktiver ved hjælp af manuskripter.hvis de ønsker at udvide deres knowladge om emnet, kan du besøge enhed redaktør klasser henvisning, især assetdatabase manuskript, der er værd at kigge på.hvis du har brug for at arbejde på et lavt niveau, skal du også læse om system.io) for at få nærmere oplysninger om sin klasse, og hvordan man kan bruge dem.tak for din tid.,

Material with a texture assigned.
Editor folder created in the project view.
Editor script in our folder.
Menu item added to the unity editor.
Folders created in our script.
Prefabs in the folders.
Prefab set to the selected object.
The generated texture.
Material without assigned texture.
Material with assigned texture.



Previous:
Next Page: