Sådan bliver du en uvirkelig automatiseringsekspert

Indholdsfortegnelse

  1. Automatisering af arbejdsgange med tegninger, C ++ og Python
  2. Hvorfor Unreal Engine er interessant
    • Hvorfor bruge Blueprints til workflow og endda programmering af spil
    • Hvorfor bruge C ++ til workflow og spilprogrammering
    • Hvorfor bruge Python til optimering af workflow
  3. Skriver vores eget automatiserede projektoprydnings script ved hjælp af Python
    • Men lønner det sig?
  4. Lær hvordan du automatiserer og optimerer arbejdsgange med scripting på Udemy

Automatisering af arbejdsgange med tegninger, C ++ og Python

Hvert job har gentagne opgaver og processer, der kan automatiseres. Disse opgaver kan tage en betydelig del af din tid.

En person med kun grundlæggende viden om scripting kan opbygge et script, der muligvis reducerer tiden til at udføre disse opgaver til et absolut minimum. I det lange løb akkumuleres denne tidsbesparelse i yderligere timer, der kan bruges til mere produktivt arbejde.

At lære at automatisere ting er derfor en uvurderlig færdighed . En færdighed, der kan erhverves i forskellige, mere specifikke sektorer og derefter anvendes til andre, mere generelle.

Især i betragtning af de nuværende vanskelige tider er det vigtigt at lære en ny færdighed, der vil have en betydelig indflydelse på din beskæftigelsesegnethed.

I denne artikel vil vi beskrive vigtigheden af ​​automatisering, når vi arbejder med software i realtid som Unreal Engine.

Hvorfor Unreal Engine er interessant

Epics Unreal Engine er et af de mest populære spil- og realtids 3D-applikationer derude. Det bruges til oprettelse af underholdningsindhold som spil og interaktive opsætninger.

Discipliner som virtuel og augmented reality kræver brug af sofistikerede processer, der ligesom enhver anden pipeline kan optimeres gennem automatisering.

Derudover vokser markedet for spil og 3D i realtid konstant, hvilket øger efterspørgslen efter talent.

Ifølge en undersøgelse foretaget af Burning Glass Technologies, et arbejdsmarkedsanalysefirma, steg gennemsnitslønnen for Unreal-udviklere med 22% sidste år , lønnen til kunstnere med 51% .

Hvorfor bruge Blueprints til workflow og endda programmering af spil

Ud over den generelle C ++ programmeringsgrænseflade leverer Unreal Engine et grafisk programmeringssystem kaldet Blueprints . De udsætter den fulde funktionalitet som C ++ - kode, hvilket betyder, at alt inklusive funktioner i spillet kan programmeres uden store præstationsnedsættelser.

Den grafiske grænseflade giver os mulighed for hurtigt at komponere enheder i en strøm for at skabe funktionalitet. Ser man på et eksempel, der indstiller materialet til en statisk mesh-skuespiller, kan vi se, at Blueprint er let læselig.

Hvorfor bruge C ++ til workflow og spilprogrammering

Den "native" tilgang til kodning for den uvirkelige motor er C ++. Det bruges til at skabe logik i spillet, forenkle oprettelse af niveauer og arbejdsgange og forbedre udviklingspipelinen. Det er mere komplekst og vanskeligt at lære end Blueprints, men kan tilføje et ekstra løft i kørselstid og ydeevne.

Dens præstationsfordel gør det til det valgte sprog til væsentlige operationer på lavere niveau som gengivelse og fysik i spiludvikling. For udviklere, der allerede er dygtige med C ++, er det en bekvem tilføjelse at kunne automatisere processer uden at lære et ekstra sprog direkte.

Hvorfor bruge Python til optimering af workflow

Sammenlignet med Blueprints eller C ++ er Python et af de facto standardsprog, der bruges til automatisering af opgaver . Det er let at lære, forståeligt og ekstremt alsidigt, da det kan køre på næsten enhver platform uden yderligere indsats.

Epic lister Python som en af ​​de krævede færdigheder, for eksempel for Data Pipeliners i deres Creator's Field Guide to Emerging Careers in Interactive 3D.

Den Unreal Engine har fuld støtte Python scripting . Desværre er det ikke egnet til realtids- og in-scripting, men kan kun bruges til Unreal Editor-scripting. Pythons enkelhed gør det dog til en utrolig mulighed for hurtig prototyping af automatisering af rørledninger.

Epic forsøger selv at promovere brugen af ​​Python ved hjælp af dokumentationen, API-dokumenter og endda et optaget webinar om Python-scripting til Unreal Engine.

Skriver vores eget automatiserede projektoprydnings script ved hjælp af Python

Større projekter kan blive rodet hurtigt. At have et script ved hånden, der kan rydde op ved at se på alle vores valgte aktiver og automatisk flytte dem til passende mapper hjælper os med at forbedre vores arbejdsgang drastisk.  

Den nedenstående skematiske tegning forklarer ideen bag scriptet.

Fra nu af er den standardversion af Python, der er indstillet i Unreal, Python 2.7. Hvis du vil bruge Python 3, kan du følge processen beskrevet her for at skifte til Python 3.

Til at begynde med skal vi først importere det uvirkelige bibliotek til vores anvendelsesområde. Når vi har gjort dette, kan vi oprette klasseinstanser af de grundlæggende klasser. For øjeblikket har vi kun brug for det, EditorUtilityLibraryder gør det muligt for os at få en liste over alle de valgte aktiver.

Vi kan få antallet af valgte aktiver ved hjælp af Pythons len()metode og bruge Unreal's logningsmetode til at få output på debug-loggen i Unreal Engine.

import unreal # create unreal class instances editor_util = unreal.EditorUtilityLibrary() # get the selected assets selected_assets = editor_util.get_selected_assets() num_assets = len(selected_assets) unreal.log(num_assets)

Kodestykket ovenfor udskriver et enkelt nummer til Debug Log. For hver af de valgte aktiver ønsker vi nu at få nogle oplysninger som aktivets navn og klasse.

Det uvirkelige ObjectBaseobjekt har flere hjælpemetoder til at få navnet, klassen og andre attributter. Vi vil gøre brug af get_fname()og og get_class()metoderne.

for assets in selected_assets: # get the class instance and the clear text name asset_name = asset.get_fname() asset_class = asset.get_class() unreal.log("{} - {}".format(asset_name, asset_class))

However, this will only give us the class definition and not the clear text name of the class itself, which we want to use for folder creation.

To get the display name instead of the class definition, we need to create an instance of the SystemLibrary. It's get_class_display_name() method takes a class definition and returns the class name as String.

# create unreal class instances editor_util = unreal.EditorUtilityLibrary() system_lib = unreal.SystemLibrary() ... for assets in selected_assets: # get the class instance and the clear text name asset_name = asset.get_fname() asset_class = asset.get_class() class_name = system_lib.get_class_display_name(asset_class) unreal.log("Name: {} - Class: {}".format(asset_name, class_name)) 

Now we can see something like this "Name: NewMaterial - Class: Material" printed to our log. This is precisely the kind of information we needed.

The last step is to "rename" our assets to a given location. For example, every Material will be renamed to "/Material/" which will move it into the according to folders.

To "rename" assets, we need an additional class. The rename_loaded_asset() method is part of the EditorAssetLibrary, so we need to create an instance of this class first. In addition to that, we have to create a new location to which the asset will be relocated.

To keep this more platform-independent, we will use the os module and its path.join() method.

Once we have created the new_path variable, we can use it in the method call to rename_loaded_asset() to relocate our current asset.

import os import unreal # create unreal class instances editor_util = unreal.EditorUtilityLibrary() system_lib = unreal.SystemLibrary() editor_asset_lib = unreal.EditorAssetLibrary() ... for assets in selected_assets: # get the class instance and the clear text name asset_name = asset.get_fname() asset_class = asset.get_class() class_name = system_lib.get_class_display_name(asset_class) # assemble new path and relocate asset new_path = os.path.join("/Game", class_name, asset_name) editor_asset_lib.rename_loaded_asset(asset_name, new_path) unreal.log("Moved {} to {}".format(asset_name, new_path))

Executing this script in the Unreal Engine, the log will provide you with such a message: "Moved NewMaterial to /Game/Material/NewMaterial".

Observing our project, we can now see that all the selected assets have been cleaned into folders named according to their classes.

As you can see, creating a basic script is quite simple. Of course, we need to take care of error handling, suitable logging, and a friendly user interface for more sophisticated tools, but even simple scripts can save a lot of time.  

But does it pay off?

To show you how big the demand for automation in this sector is, here is a screenshot of the monthly sales of a tool with functionality containing the script we created in this article.

Of course, it is essential to understand the needs of users and artists working in the Unreal Engine to know which tasks are suitable for automation.

Learn how to automate and optimise workflows with scripting on Udemy

For at hjælpe med at lukke hullet i Unreal scripting ressourcer oprettede vi et omfattende Udemy on-demand kursus for at lære Unreal Engine Editor scripting fra bunden.

Du kan bruge kampagnekoden AUTOMATEUNREAL20 . Du kan få kurset for så lidt som $ 10 nu. Det er mindre end tre Frappuccinos fra Starbucks!

Hvis du har spørgsmål eller feedback, er du velkommen til at kontakte os på Twitter eller direkte i diskussionsafsnittet på kurset :)