Sunteți pe pagina 1din 57

MastertheArtofUnreal

Engine4Blueprints
Extra Credits - Saving & Loading +
Unreal Motion Graphics!

MastertheArtofUnrealEngine4BlueprintsExtraCredits(Saving&Loading+
UnrealMotionGraphics!)

Copyright2014KitatusStudios

Allrightsreserved.Nopartofthisbookmaybereproduced,storedinaretrievalsystemortransmittedinanyformorbyany
means,withoutthepriorwrittenpermissionofthepublisherand/orthebookscreatorRyanShah.However,piecesofthebook
maybereproducedincaseofbriefquotationsembeddedincriticalarticlesorreviews.

Everyefforthasbeenmadeinthepreparationofthisbooktoensuretheaccuracyoftheinformationpresented.However,the
informationcontainedinthisbookissoldwithoutwarranty,eitherexpressorimplied.Neithertheauthor,orpublisher,andtheir
dealersanddistributorswillbeheldliableforanydamagescauseddirectlyorindirectlybythisthisbook.

FirstPublished:28/09/2014
ProductionReference:014180SOLID14045

ISBN13:9781500313784
ISBN10:1500313785

www.kitatusstudios.co.uk
CoverimagebyRyanShah(contact@kitatusstudios.co.uk)

Credits
Author
RyanShah

SpecialThanks

ScarlettJuzzle
ThankYouScarlettforputtingupwithmeoverallthistimeandbelievinginevery
crazyideathatcomesintomyhead!IvehadsuchanamazingtimebeingwithyouandIcant
waitforeverystepofourfuture.Ihopeyoulookforwardtoevenmoreofmycrazyideas!

EpicGames
Thankyouforbeingawesome!

AbouttheAuthor

RyanShahisProjectLead/LeadDeveloperatKitatusStudios.Boastingover10yearsof
experiencecreatingvideogames,Ryanhasworkedonanassortmentofdifferentprogramsto
createvideogameexperiences.

BeforeKitatusStudios,Ryanwasafreelancewriter,whoselfpublishedworksoffiction.Using
hisexperienceasawriter,Ryanturnedtovideogames,alifelongpassiontobringtheworldsof
hisideastolife.

Hecanbefoundonlineathttp://kitatusstudios.co.ukandcanbecontactedat
contact@kitatusstudios.co.uk

Acknowledgement

AhugethankyouandahalfhastogotomybeautifulgirlfriendScarlett,whonomatterwhathas
alwaysbelievedinmewhennobodyelsedid.Herpatienceisinspiring.

IdlikeEpicforcreatingsuchadiverseyeteasytousesystemwithUnrealEngine4.When
peoplesayitsagamechanger,theywerentwrong!

Idalsoliketothankyou,thereader.Imightnotknowyoupersonally,butbyyoubuyingthisbook
Yourehelpingtosupportmeandhelpingtosupportthevideogameindustry.Whoknows
MaybethisbookwillhelpyouandbecomethesteppingstoneyouneedtomaketheBEST
GAMEOFALLTIME.Anythingispossible!

TableofContents

Chapter#1UnrealMotionGraphicsTitleScreen!
LetsBegin!Page11
CreatingaUMGBlueprintPage13
CreatingourTitleScreen!Page14
Buttons,Buttons,Buttons!Page19
MainMenuDIY!Page24
LinkToThePastPage26
LetsSeeOurMenus!Page29
ExtraButtons!Page31
TheseAreYourOptions!Page34

Chapter#2Saving&LoadingSavingourOptions!
HenshinAGoGoBaby!Page43
PlayerController=Conduit!Page46
SaveGame=False!Page48
SaveGame=True!Page49
OnButtonPress,SaveOurSettings!Page52
TheFinalShowdown!Page54

EndofTheBook!Page57

Preface

UnrealEngine4isthelatestversionofthepopularvideogamedevelopmentpackagetheUnreal
Engine.TheUnrealEngineneedsnointroductionBeingthepowerhousebehindtheprevious
consolegenerationfromthestart.TocalltheUnrealEngineapowerhousewouldbean
understatement,theUnrealEngineiseverythingadeveloper(IndieandCommercial)wouldever
needinavideogameenginetocreatetheiridealproject.Withitslatestiteration,UnrealEngine
4,EpichasimprovedUnrealEngineandpropelledtheengineintothenextgeneration,theyhave
broughtthefuturetothepresentwithUnrealEngine4andtheresliterallyneverbeenabetter
timetobeginusingUnrealEngine4foranyproject,bigorsmall,commercialorindependent.

MasteringtheArtofUnrealEngine4Blueprints(ExtraCredits)takesaconcise,clear,
informativebutfunapproachtodevelopingUnrealEngine4,withouttouchingasinglelineof
code.Byusingthisbook,youllbecreatingvarioussmallprojectscompletelyinblueprint.From
thisbook,youllbeequippedwiththeknowhowyoullneedtocreatethegameofyourdreams.
OntopofmasteringtheBlueprintssysteminUnrealEngine4,youllalsolearnthesecrets
behindgettingthemostoutofthebeastofanengine.

WhatYoullNeedForThisBook
InordertotakefulladvantageofthisbookYoullneedaWindows,MacorLinuxcomputerthatis
capableofrunningUnrealEngine4.Itrequiresacomputerwiththefollowingsystem
configuration,whichdoublesupattheMinimumRequirementsforthisbook:

DesktopPCorMac
Windows764bitorMacOSX10.9.2orlater
QuadcoreIntelorAMDprocessor,2.5GHzorfaster
NVIDIAGeForce470GTXorAMDRadeon6870HDseriescardorhigher
8GBRAM

Note:Believeitornot,YoullalsoneedUnrealEngine4(Version4.4ornewer).

WhothisBookisFor

MasteringtheArtofUnrealEngine4Blueprints(ExtraCredits)isdesignedforanyonewhose
dreamtofcreatingvideogames,butdidnthavetheknowhowto.Thisbookisalsodesignedfor

everyonewhowanttoharnessthepowerofUnrealEngine4totaketheircreationstothenext
levelandbeyondandthepeoplewhowanttocreategameswithoutwritingasinglelineofcode.

ThosewhoarefamiliarwithUnrealEngine4willhaveaneasiertime,buteverythinginthebook
isexplainedclearlyandwithreferencescreenshotstomaketheprocessofmasteringthe
blueprintssysteminUnrealEngine4abreeze.PeoplewithnopriorexperiencetousingUnreal
Engine4,orgameenginesingeneralshouldhavenoproblemwithfollowingthisbook,butifyou
needadditionalhelpwithanythinginthebook,feelfreetoaskontheUnrealEngineForums
(http://forums.unrealengine.com)oremailmedirectly:contact@kitatusstudios.co.uk.

ReaderFeedback

Ilovefeedback!Goodorbad,itsallwelcomeandIhighlyrecommendyoudoso!Ifyouloved
readingorhatedit,Iseriouslywouldlovetoknow.Feedbackisimportantinhelpinglettingme
knowhowIvedone,whatneedstobefixedandImjustgenerallyintriguedonhowwell/badIve
done.ImaperfectionistandIstriveforthebest,soiftheresanythingIcanimproveon,feelfree
toemail:contact@kitatusstudios.co.uk

CustomerSupport
Sinceyou'retheownerofthisbook,Youhavetheopportunitytogetbonuscontent,suchas
colourimagesandprojectcontent:Headtohttp://content.Kitatusstudios.co.uktoaccessto
thesefiles!

Piracy

ImnotgoingtopretenditdoesntexistPiracyispiracyandnothingisgoingtostopit.Ifyouve
piratedthisbookItsalright.Imnotgoingtocurseyouoranything.Itssadthatyourenotwilling
tospendmoneyonthisbook,butIknowtimesaretoughandinthedigitalworldIknowthat
everythingisfreetosomepeople.

DuetothefactIvegivenupthetimetowritethisbooktohelpteachotherstoharnessthepower
ofBlueprints,losingoutonworkhoursandtimeIcouldhavespentonSuperDistro(Myfirst
Commerciallytobereleasedproject),Iaskthatifyoupiratedthisbookandyouveenjoyedthis
book,PleaseconsiderpurchasingSuperDistrooryoucouldsendadonationthroughmy
website.Thismeansthatevenifyoudontspendthefullpriceonthisbook,Myeffortstobring
thesetutorialstoyouarent100%invein.

Ifyouvepurchasedthisbook,thenIcantthankyouenoughforsupportingmeandmyworkandI
seriouslyamgratefulyoureexperiencingthebookthroughlegitimatemeans.

Errata
Atthetimeofwriting,thebookhasnoerrors.However,astheengineisupdated,thingsmight
change.Intheunlikelyeventsomeofthecodenolongerworks,pleaseemailmeimmediately:
contact@kitatusstudios.co.ukBydoingthis,younotonlysecuretheintegrityofthebook,but
8

youalsohelpothersbynotcomingacrosserrorsandthisleadstoastressfreeexperiencewith
thisbook.Whoknows,youmightalsobecreditedinlaterbookrevisions!

DownloadingDLC(DownloadableContent)
Youcandownloadcolourvariationsoftheimagesinthisbook,aswellasUE4projectfilesfrom
http://content.kitatusstudios.co.uk.

Questions
Ifyouhaveanyquestions,emailmeatcontact@kitatusstudios.co.uk.Thelineisopen,soplease
don'tbeafraidtogetintouch.

Mission#1TitleScreen
CreatingaTitleScreenandOptionsMenu!

Template:
ThirdPersonBlueprint

WhatYoullLearn:
HowtouseUnrealMotionGraphics
HowtosetoptionsinUnrealEngine4

WhatYoullNeed:
BackgroundTexture(ForTitleScreen)[1280x720or1920x1080]

[Extras]WhatYoullNeed:
AnimatedMaterial(Atleast720pwouldworkperfectly)

10

LetsBegin!

HelloagainoneandallandwelcometothenextinstallmentofMastertheArtofUnrealEngine4
BlueprintsWherewewillbecoveringlotsoflittlegoodiestohelpboostyourUnrealEngine4
knowledge.

Todayweretacklingatitlescreen,usingthe(Atthetimeofwriting)stillexperimentaltool:
UnrealMotionGraphics.Thistoolis(Again,attimeofwriting)stillinitsinfancybutitspoweris
leakingoutofthesides(Notliterally,ofcourse!)YoucandosomanythingswithUnrealMotion
Graphics(SuchasHUD,Menusandsomuchmore!)Onceyouvereadthroughthis
minitutorial,youcouldevengobacktoBook#1andcompareUMGtotheclassicwayof
creatingaHUD!

ImsostokedtobeshowingyoutheropesofUMGsoIamjustgoingtodivestraightintothings!
AreyoureadytolearnevenmoreAwesomestuff?!HensinAGoGo!

Step#1CreateanewUnrealEngineproject(MakesureitsonatleastUnrealEngine4.4.1,
anythingearlierthenversiondoesnthaveUnrealMotionGraphics!)

[NOTE:Itreallydoesntmatterwhatprojectyouuseasatemplate,butIrecommendthe
ThirdPersonBlueprinttemplateasthatiswhatIllbeusingforthis!]

Nowyoushouldhavesomethingsimilartothisscreen:

Doesntthatfeellikehomenow?Itnevergetsoldseeingthisscreen!

11

Beforewecarryon,ifyourelivinginthepresenttime(Andnotinthedistantfuture!),youllneed
toactivateUnrealMotionGraphics(Asitscurrentlyanexperimentalfeature!).Todothat:

Step#2GotoEdit(InthetopleftofyourUnrealEnginewindow,nexttoFile)andselectEditor
Preferences.

Step#3IntheEditorPreferenceswindow,clickExperimentalwhichisundertheGeneral
header,whichwillopenuptheExperimentalsection.

Fromhere,youcanseeUnrealMotionGraphics(UMG)ontheright.Currentlyitsunticked.All
youhavetodoisclicktheemptyboxtoactivateit(Makesuretheboxisfilledintosignifyithas
beenactivated!)

Step#4OnceyouhaveactivatedUnrealMotionGraphics(UMG),makesuretoclicktheSet
asDefaultbuttononthetopoftheEditorPreferenceswindow,thenyoucanclosethewindow
andgobacktothemainenginescreen.

Beforewecontinue,therestwomorequickthingsweneedtodo:

Step#5Saveyourprojectasitis(Justtobesafe!)
12


Step#6CloseUnrealEngine4(YourProjectandtheLauncher),waitafewsecondsand
reopenUnrealEngine4(Andthenyourproject!)

NOTE:RemembertoopenyourprojectinEngineversion4!

EXTRANOTE:Dontplaythisonecool.Iknowwhenyouinstallprograms,someofyou
hittheRestartlaterbuttonandcontinuetousetheprogramlikearebel,butdontdo
thatherebecausethatdoesntwork.YouHAVEtorestarttheeditororUnrealMotion
Graphicswontworkproperly!

Step#7Nowthatyouverestartedyourproject,weneedtocreateanewemptylevel.Callthis
newlevelUMG_MainMenuandmakesureyouselectEmptyLevel.

Savethelevelasitcurrentlyisandthenwecanbeginthefunstuff!

CreatingaUMGBlueprint!

Step#1WithintheContentBrowser,(MakingsureyouvegottheGAMEfolderhighlighted)
createanewfolder(ByclickingNew>Folder).NamethisfolderUMG.

Step#2Oncethefolderhasbeencreated,doubleclickUMGtoopenupthefolder.

Nowwe'regoingtohavesomefun!
13


Step#3WhilestillintheContentBrowser(InourUMGfolder),RightClick(Ctrl+Click)inthe
emptyspaceinthefolder(WhichbringsuptheCreatewindow).Inthiswindow,Scrolldownto
UserInterfaceandhighlightUserInterfacewithyourmouse,whenthepopupmenuopens,
selectWidgetBlueprint(NamethisBlueprintUMG_MiniTitle)

Step#4DoubleClickthenewlycreatedUMG_MiniTitletoopenupUnrealMotionGraphics
NowthenfunREALLYbegins!

CreatingourTitleScreen!

Firstthingsfirst,weregreetedwithaCanvasPanelalreadyplaceddownforus(Youcansee
thisinthebottomleftunderHierarchy.WedontneedaCanvasPanelforwhatweregoingto
do,so

Step#1ClickontheCanvasPanelentryinthehierarchyandpressdeleteonyourKeyboard
todoawaywiththeuselessCanvasPanel.

NowwevegotridoftheCanvasPanel,wecanputinaborder,whichwillcoverourgamescreen
edgetoedgewhichwillbeperfectforourMainMenubackground!

14

Tocreateaborder,wehavetofirstfindwhereitishiddeninUMG(Whichisactuallynotthat
hidden,ImeanifitwereSolidSnake,itwouldbedeadinseconds!)

Step#2InthePalette(InthetopleftoftheUMGwindow),thereareanumberofoptionsjust
waitingtobeclickedon.

IfyouclickonCommon,awholenewrangeofoptionsarenowatourdisposal.Toputthe
borderintoourproject,allwehavetodoisclickBorderanddragitintotheBlueprintlooking
UMGview.YoullknowifyouvedoneitrightasitllnowshowupintheHierarchy!

Tosomethiswouldntseemlikedoingmuch,butifyoucomparethistotheHUDwecreatedlast
timeround,wetechnicallycreatedaHUDblueprint,settheresolutionofthescreenthattheuser
isusingandgotitprimedtocreateourHUDInliterallyseconds!

Step#3NowourBorderisready,wecanfillitwithanimage.Todothis,weneedtocreatea
SlateBrush.Itsoundscomplicatedbutittakesagoodcoupleofseconds.

CloseoutofUMGforasecondandgobacktotheContentBrowser,intoyourUMGfolder.This
isthetimetoimportyourimageforthebackgroundifyouhaventalready(1280x720imageor
1920x1080isideal!)
15


Step#4Onceyourimagehasbeenimported,wecannowcreateourbrush.Justlikeyou
createdtheWidgetBlueprint,dothesamethingbutchooseSlateWidget(Ifyouveforgotten,
RightClick[Ctrl+Click]>UserInterface>SlateWidget)andnamethisUI_Title.

Yourfoldershouldnowlooksomethinglikethis:

NOTE:IvealreadycreatedaMaterialformytexturebutitsdowntoyouwhetherornot
youwanttodothat.

EXTRANOTE:Nowisagoodtimetosave!

Step#5DoubleclickUI_Titletoopenuptheproperties,andsetyourTextureorMaterial
Assettoyourimagethatyouhaveimported!

Beforeyoumoveon,makesureyousettheimagesizecorrectlyorthiswillcauseissues!

16

NOTE:IfyoureimportingaMaterial,itmightsaythatThisMaterialisnotsupportedin
UI.Ifthisisthecase,simplydoubleclickyourmaterialfromwithinthecontentbrowser
andintheproperties(OntheleftintheMaterialEditor),scrolldowntillyouseeUsed
withUIandsetthattotrue,compile,saveandthenallyourproblemsthatUMGis
churningoutshoulddisappear!

Onceyourehappywitheverything,saveandclosethiswindowandheadbackinto
UMG_MiniTitle

Step#6OncebackinUMG,GointotheHierarchyandclickBorder.Thiswillbringupthe
propertiesontherighthandside.

17

JustunderAppearance,whereitsaysBrushandhasabigemptywhitebox,Simplyclick
NoneandswapitwithyourSlateBrush.

Done!Nowourbackgroundimageisshowing,letsgetmakingourtitlescreen!
18

Buttons,Buttons,Buttons!

Nowwehaveabackgroundimage,weneedtoputabuttonintoourTitleScreensotheusercan
navigatearound,playthegame,changetheirsettingsorexityourproject.

Tocreatebuttons,weneedtocreateaboxthatcansitonourTitleScreen.Todothis

Step#1HeadbacktothePaletteonthetopleftandthistimeinsteadofusingtoolsfromthe
Commonsection,clickPaneltobringuptoolsthatwillbeextremelyhelpfultoourcause!

ThisiswhereweneedtobringtheCanvasPanelback,so
Step#2SimplyclickCanvasPanelanddragitintotheviewportofUMG.Done.

19

Justtobesafe,checktheHierarchyquicklytomakesuretheCanvasPanelisnowsittingunder
theBorderlikeso:

NowwecanstartaddingbuttonsandwhatnottoourWidget!

Step#3IntheHierarchy,clickCanvasPaneltomakesurewhatweaddnextgoesintothe
CanvasPanelandnotontheBorder.

OnceyouvehighlightedtheCanvasPanelintheHierachy,gobacktothePaletteboxandthis
timeclickHorizontalBoxanddragintoourUMGviewport.

20

Step#4Zoomin(ByusingyourmousesScrollWheel)totheHorizontalBoxandclickthe
newlycreatedHorizontalBoxandresizetheboxtocoverwherealongbuttonwouldsit.Once
youveresizedthebox,movetheboxnearthebottomofthescreenlikesobyclickingand
draggingthebox:

WevenowcreatedtheHouseforthebutton,sowhatsnext?Justbeforeweputourbuttonin
hishousetosleep,weneedtotellUMGoneimportantthing

WeneedtotellUMGthatnomatterwhatthescreensize,ourbuttonneedstostayinthis
positionatthebottomofthescreen.Andthisishowwedojustthat!

Step#5WiththeHorizontalBoxstillselected,gotoitsoptionsontherightofthescreenand
atthetopunderLayoutisasectioncalledAnchors,itlookslikethis:

Step#6UnderAnchorsthereisagreyboxwiththewordAnchorswritteninsidewithadown
arrow,clickthisdownarrowandselectthe10thoption(Smallboxinthebottomcentre).
21


Thisstopsthebuttondisappearingnomatterwhatthesizeofthescreen!

SowehavetheHouseallsetup,itstimetoputthebuttoninitshome!

Step#7HeadbacktothePaletteboxintheleftandgototheCommonsection.Withinthis
commonsection,clickButtonanddragitINTOyourHorizontalBoxwhichyousetuppreviously.

Theresstillsomeworklefttobedonebeforethisisafullyfunctioningbutton!

Thebuttonislookingalittlebareatthemoment,soletsgetsometextinsidesoplayersfindout
whatourbuttonshoulddo!

Step#8JustlikeyoudidwiththeButton,findTextBlockinthePalette(Whichisunder
CommonjustliketheButtonwas).DragthisINTOthebuttonandyoullseejustlikemagicthe
textbecomespartofourbutton.

22

Step#9Withthetextselected,justlikebeforeheadovertotheDetailspanelontheright.
Thistime,weneedtoeditthetextSojustunderContent,theresasectioncalledText.So
canyouguesswhatwehavetodowiththis?Yougotit!

Inthetextbox,write:ClicktoStart.

IbetyoureitchingtoknowwhattheBindbuttonisforButDONOTCLICKITJustyet.Well
comebacktothissoon!

Theresjustonelittlethingandweredonewiththisbuttonforthetimebeing:

Step#10ClicktheButton(Notthetext)andgointotheDetailsontheright.Scrolldownuntil
youfindtheLayoutsection.Inthissection,theresapartcalledPaddingandjustunderthatis
apartcalledSizewithtwooptions:AutoandFill.

23

ClickAutotomakeitfillourHorizontalBox.

WevedonewhatneededtobedonenowforthisbuttonButitsnotquitefunctionaljustyet.

Beforewecontinuehowever,weneedtocreateanotherWidgetBlueprint,sofornow:

Step#11Compile/SaveandclosethisUMGwindowandinourUMGfolderRightClick(Ctrl
+Click)ourUMG_MiniTitleandselectCreateCopy.

Namethiscopy:UMG_Title2.

MainMenuDIY!

NowitstimetotestyourskillssoIcanshowtoyoujusthowmuchyouvelearntwithoutrealising
it!

YourUMGfoldershouldnowlooklikethis:

24

Ifitdoes,Awesome!WecancontinueIfnot,however,thensimplydoublebackandskimover
thelastchaptertocheckifyouvemissedsomething.

Readytocontinue?Excellent!

Step#1DoubleClickUMG_Title2toopenupourduplicatedMenu.

Step#2ExpandalloftheobjectsintheHierarchyanddeletetheHorizontalBox,Buttonand
Text(DeletingtheHorizontalBoxshoulddeleteitallforyou!)

Step#3Nowusewhatyouvelearntsofartocreatethis:

RemembertoanchoreverythingtotheCENTREofthescreenthistime(Notthebottom)and
makesureeachofthebuttonsareintheirownHorizontalBoxbutthey'reallaChildofthe
CanvasPanel.

Ifyouneedhelp,refreshyourselfbygoingthroughthepastchapter,butIbelieveinyouandI
knowyoucandoitwithnoproblemswhatsoever!

25

LinktothePast

SowehaveaTitleScreenandaMainMenu,butnothinghookingthembothtogether.Ibetyoure
raringtoknowjusthowtolinkthemtogetherSowhatwearewaitingfor?Letsdoit!

Step#1Save/CompileyourUMG_Title2.Oncesaved,closeUMG_Title2andopen
UMG_MiniTitle.

Step#2ClickonourClicktoStartbutton(Besuretonotclickthetext!)andheadovertothe
detailspanelontheright:

WhereitsaysEvents,theresasectioncalledOnClickedEventwithaBindbutton.This
meanswecantellUMGwhatwillhappenwhenthisbuttonhasbeenpressed,soclickBindand
selectCreateBinding.ThiswillcreateaBlueprintforus,readyforustomessaroundwith.

26

Firstthingsfirst,weneedtobreakthisconnectionasatthemomenttheBlueprintreads:Start
thestuffinthisline>Endthestuffinthisline.This,obviouslyisntwhatwewant.

Step#3Alt+ClickthearrowontheGetonClickedEvent0tobreaktheconnection.Nowclick
theGetonClickEventnodeandmoveitabitfurthertoleftsowehavesomeroomtoplaywith.

Step#4FromtheemptypinontherightofGetonClickedEvent,clickanddragtotheright
andourfavouriteCompactBlueprintLibrarywillopenup.

27

TypeinRemoveandselectRemovefromViewport,thiswilltakeourcurrenttitleandgetrid
ofit.

NowthatwevegottenridofthecurrentTitleScreen,weneedtocreatetheotherTitleScreenwe
created(UMG_Title2)soitactsasaseamlesstransitionfromTitletoMainMenu.

Step#5FromtheemptypinontherightoftheRemovefromViewportnode,clickanddragto
theright.WhentheCBLopensup,typeinCreateWidgetandselecttheCreateWidgetnodeto
createit.

Step#6WithintheCreateWidgetnode,thereisasectioncalledWidgetType,withabox
calledSelectClass.ClickSelectClassandclickUMG_Title2_C.

Thiscreatesthesecondtitlescreen,butitdoesntactuallyshowourTitlescreen,itonlycreates
it.Itsoundsabitcomplicated,butallshouldmakesenseinamoment.

Step#7FromtheReturnValuepinofCreateWidget,Clickthebluepinanddragtothe
right.IntheBlueprintLibrary,typeAddandselectAddtoViewport.

Thiswillbringthesecondtitlescreenup,buttheresanumberofboolsweneedtotickinthis
nodebeforewecanuseitasaTitleScreen:
28


Modal&ShowCursorSetthesetotrue

ModalmeanstheTitleScreeneatsupalloftheinputs,soyoudontaccidentlyclickbehindthe
titlescreen.

ShowCursorshowsthecursor.

DontsetAbsolutetotrueaswhenAbsoluteisfalsemeansthatitshouldtakeupthewhole
screenandnotonlypartofit.

Step#8NowconnecttheemptyrighthandsidepinofAddtoViewporttotheReturnNode
thatwasoriginallyinthisBlueprintandpow!ThatsthisBlueprintdone!SaveandCompilethe
BlueprintthencloseUMGItstimetotellourprojecttoactuallydisplaythesemenuscreens!

LetsSeeOurMenus!

Headintoyouremptylevelandlikewevedoneafewtimesinthepreviousbook,headintothe
levelblueprint.Ifyouveforgottenhowtodothis:

#1ClicktheBlueprintsbuttonabovetheviewport
#2PressOpenLevelBlueprint

NowtheLevelBlueprintisopenWeneedtotelltheLevelthatwhenthelevelbegins,drawour
menu!

29

Aswehavethefirstmenuthatdrawsthesecondmenuonthebuttonpress,allwehavetotell
thelevelblueprintistodrawthefirstmenu.Sowhatarewewaitingfor?!

Step#1RightClick(Ctrl+Click)inemptyspaceintheBlueprintarea.WhentheCompact
BlueprintLibraryopensup,typeinBeginandselectEventBeginPlay.

Justlikebeforeinthepreviouschapter,createaCreateWidgetnodeconnectedtoEvent
BeginPlayandthencreateanAddtoViewportnodeconnectedtotheCreateWidgetnode
bydraggingfromtheReturnValuepin.

OnceyouvecreatedtheAddtoViewportnode,besuretoenabletheModalandShow
Cursorboolsagainbytickingthem!

Theonlythingyoushouldbedoingdifferentfrombefore(Apartfromobviouslymissingoutthe
RemovefromViewportnode!)issettingtheWidgetTypeintheCreateWidgetNodeto
UMG_MiniTitle_C.

NOTE:IfyourUMGfilesarentshowingupinWidgetTypethismeansthatoneofyour
WidgetshavehadissuescompilingUsuallybecauseyouforgottoconnecttheReturn
Nodeinthebuttonstogether!

Onceyourlevelblueprinthasbeenupdatedwith:EventBeginPlay>CreateWidget>Addto
Viewportasexplainedabove,CompiletheBlueprint,closetheBlueprinteditorandtestyour
currentprojectbypressing:Alt+Ponyourkeyboard.

30

Congratulations!Itworks!

WestillneedtocodetheNewGame,OptionsandQuitGamebuttons(Letsnotgetahead
ofourselvesjustyet!Theresstilloneortwoobstaclesinourwaybutwellgetthereinnotime!)

ButthiscausesforacelebrationYouvejustcreatedafullyworkingTitleScreenSoletsgetthe
otherbuttonsworking!

ExtraButtons!

OnceyouvetestedyourmenuandyourecompletelyhappywitheverythingItstimetoprogram
thebuttonsinourUMG_Title2UMGWidget!

Step#1IntheContentBrowser,OpenupUMG_Title2.

Step#2JustlikeinthechapterbeforethechapterjustgoneCreateaBindforallthree
buttons(NewGame,OptionsandQuitGame)butdontfillouttheBlueprintsyet.

31

OnceyouvecreatedBindsforallthreebuttons,gointotheGraphtab(Onthetopright)and
makesureyourFunctions(IntheVariableLibraryontheleft)looklikethis:

IfyourFunctionsdoesntlooklikethat,thenyouhaventcreatedBindsforallthreebuttonsGo
backuntilyouendupwithGetOnClickEvent_0,GetOnClickEvent_1andGetOnClickEvent_2
intheFunctionsareaofyourUMGBlueprint.

Readytocontinue?Awesome!

OpenuptheBlueprintforGetOnClickEvent_0(WhichshouldbeboundtotheNewGame
button).

AllwehavetodoforthisishookupaOpenLevelnode!

32

WithintheOpenLevelnode,thereisaninputcalledLevelName.Fordemonstration
purposes,letsputinExample_Map,whichwillopentheExampleMapwithinourproject!

Whatdidwejustdo?BasicallytheBlueprintreads:WhentheButtonisclicked,open
Example_Map!Simple...yeteffective!

CompileandmoveovertotheBlueprintGetOnClickedEvent2[Whichshouldbeboundtoyour
QuitGamebutton].

ImnottalkingabouttheOptionsButton(WhichisGetOnClickedEvent1.Donot
openGetOnClickedEvent1,openGetOnClickedEvent2).

WhenyoureinyourQuitGameBlueprint(GetOnClickedEvent2),weneedtoaddaExecute
ConsoleCommandnode,whichisanodewhich(Youguessedit!)executesaconsole
command!

Bynow,Imsureyoucanguesshowtocreatethenode,butifnot,heresahint:RightClick(Ctrl
+Click).WhentheCompactBlueprintLibraryopensup,typeinExecuteConsoleandselect
thecorrectnode!

Now,ImsureyourewonderingwhatCommandneedstogointotheinputwithinExecute
ConsoleCommand,soletsnotwasteanytime!

33

WithintheCommandinput,simplytypeQuit.Yup,thatsallyouhavetodoforthisBlueprint!

Sojustlikethat,wevesetupNewGameandtheQuitGame,werealmostalldonewiththis
project!Allwehavetodonowiscoupleupeverythingwevelearntsofaraswellasafewmore
pointerstocreatetheOptionsmenu!

TheseAreYourOptions!

CreateanewWidgetBlueprintandcallitUMG_Options.Withinthismenu,useeverything
youvelearnedthusfartocreatethreebuttons(Allwithtextin!),sometextabovethesebuttons
andtwomorebuttonsunderneaththeotherbuttonsandtext.Youshouldgetsomethingthat
lookslikethis:

Ifyoucantseetheimage,hereswhatyouneedintherelativeboxesandwhatnot:
34

Toptextbox:SetGraphicsSettings
ThreebuttonsundertheTextBox:Low,Med,High
ThetwobuttonsundertheLow,Med,HighApplyandCancel

Gotit?Awesome!Ifnot,Skimbackthroughwhatwevealreadycoveredinthebooktotouchup
onwhateveryouremissing.

Onceyourereadytocontinue,weneedtoheadoverintotheEventGraphofourUMG_Options
(Remembertousethetopribbontonavigate!).

Justlikewelearntinthelastbook,weneedtocreateanInteger.Rememberthat?Ifnot,heresa
realquickreminderofwhatanIntegerisandhowtocreateone:

WhatisanInteger?AnIntegerisanumberthatwecansetandcallbacktolater.Whyisthis
important?BecausewecanchangethingsifourIntegerisaspecificnumber!

ButRyan,WhycantIuseaFloat?Isntthatanumberwecansettoo?Well,Mysticalreader
whocanwriteandbeansweredalaHarryPottertoTomRiddleAFloatcandealwithdecimal
places,whichisgreatforstoringtimeoranythingthatneedsanumber.numberfigure,butan
Integerdoesntdealwithdecimals,Itjustdoesntunderstandthem.

Instead,itpridesitselfonactingasaswitchoracollectionforWHOLEnumbersonly(Sorry
decimalnumbers,itstotheFloatforyou!)

Soundscool!Butwhydoweneedthatrightnow?Well,Mr/Miss/Ms/Dr,wecanusean
IntegertoswitchbetweenLow,MedandHighwithalmostnoeffortatall!Wecanthensavethat
IntegerandcallitbackWHENEVERweneeditagain!

Groovitational!LetsMakeOne!Surething!Letsgetrighttoit!

[NOTE:Yes,itwas5amwhenIwrotethat,Dontmindme!]

Step#1Ifyourenottherealready,headintotheGraphtabofyourUMG_Options.(Usethe
toprightTabtonavigatetoit!)

Step#2Onthefarleft,theresawindowthatIliketocalltheVariableLibrary,itlooksalittle
likethis:

35

Step#3ClicktheVariablebutton(WhichisnexttoFunction,Macro.etc),tocreateanew
Variable.

Step#4Withinthedetailspanel(JustbelowtheVariableLibrary!),changetheVariableType
toIntandsetthenametoGraphicsSettings.

Step#5Done?Awesome!Thatsallweneedtodohereforthemoment,sousethetopright
ribbonagainandgobackintotheDesignertabtogobacktoourUMG!

Step#6ClicktheLowbuttonwhichyoucreatedearlier(Notthetext,thebutton!)andinthe
righthandsidedetailspanel,createanewBindforit(Justlikewedidbefore!)
36


Step#7ThiswillopenaBlueprinteditorforwhathappenswhenthisbuttonispressed.Onthe
leftinyourVariableLibrary,grabyourGraphicsSettings(Youmightneedtoscrolldowninthe
VariableLibrarytofindit!)anddragitintotheBlueprintarea.Whenasked,selectSet.

Step#8AsthisbuttonwillbetheLowsetting,keeptheGraphicsSettingat0andconnect
bothleftandrightwhiteinputstotheGetOnClickedEventandReturnNoderespectively.

Step#9DoexactlywhatwejustdidforboththeMedandHighbuttons,howeverremember
tosetGraphicsSettingsto1intheMidBlueprintand2intheHighBlueprint.Confused?Heres
whatyoushouldendupwith:

Step#10Threebuttonsdown,twotogo!WelldealwithApplyintwomoments,butfirstlets
takeonthatCancelbutton.CreateabindingforitandjustlikewhatwedidfromtheTitle
ScreentoOptions,createaRemoveforViewportnodefollowedbyCreateWidget
(RemembertoselectUMG_Title2inWidgetType!)followedbyAddtoViewport:
37

Step#11WevenowonlygotoneButtonlefttofillinApply!.Sowhatarewewaitingfor?
CreateabindforApplyandletsgettocoding!

Step#12RightClick(Ctrl+Click)toopentheCompactBlueprintLibraryandtypeinSwitch
onInt.

Step#13ClicktheSwitchOnItNodewhichwejustcreatedandintheDetailspanel
underneaththeVariableLibrary,setDefaultPintofalsebyuncheckingthebox.Oncedone,
withintheSwitchonIntnode,addtwomorePins.

Step#14DoesntthatlightgreenbuttonnexttoSelectionseemfamiliar?Youveguessedit!
GrabyourGraphicsSettingsfromtheVariableLibrary,dragitintotheBlueprintandselect
Getwhenasked.HookitintoSelectionandconnecttheleftinputpinoftheSwitchonIntinto
theGetOnClickedEvent

38

NoticethatwevecreatedthreeSwitchOnIntoutputs:0,1and2.Justlikewedidwith
GraphicsSettingsInteger.Socanyouguesswhatthismeans?Yougotit!0Standsforour
Lowoption,MedforourMediumandHighforourHighoption.Buthowdowechangethe
graphicsquality?Simple!

Step#15RightClick(Ctrl+Click)toopenuptheCompactBlueprintLibraryandtypein
ExecuteConsoleandselectExecuteConsoleCommand.Dothisthreetimes.

39

Step#16HookeachoneofthesenodesintotheoutputsofSwitchonInt,likeso:

NowweneedtofigureoutwhatCommandtouseAquickcheckoftheEngineScalabilitypage
ontheUnrealEnginesitegivesusanumberofoptionstoplaywith.Forthistutorialssake,well
justbeusingsg.PostProcessQuality.

Forlow,wellusesg.PostProcessQuality0,Mediumwelluse:sg.PostProcessQuality1and
forHigh:sg.PostProcessQuality3.

Step#17SointheCommandareaofourExecuteConsoleCommand,intheonethat
stemsfromSwitchonInt0putsg.PostProcessQuality0.Intheonestemmingfrom1,put
sg.PostProcessQuality1andsg.PostProcessQuality3respectively.

Sowhatnow?Ibetyourethinkingwevegottodosomesupercomplicatedstuff?Nope!Simply
dowhatwevedoneafewtimesnowCreateaRemoveforViewportnodefollowedbyCreate
Widget(RemembertoselectUMG_Title2inWidgetType!)followedbyAddtoViewport.

40

ConnectallthreeConsoleCommandoutputstotheinputofRemovefromViewportand
connecttheoutputofAddtoViewporttothemainoutputofourBlueprintlikesoandwere
done!

Nowitsfinished!WecantapourselvesontheshouldernowWevecreatedaworkingmenu
system!ButwaitWhatgoodisthismenusystemifitdoesntsaveourpreferences?

Ohhohoho,Itseemsimpossiblebutitsfarmoresimplerthenyouthink.Butwellsavethatfor
thenextMiniMission!Sowhatareyouwaitingfor?!Youmadeanawesomemenu,nowlets
makeit110%moreawesome!

41

Mission#2Saving&Loading
AutoSaving&LoadingourSettings!

Template:
ThirdPersonBlueprint

WhatYoullLearn:
Saving&Loading

WhatYoullNeed:
TheOptionsMenuYouCreatedInTheLastChapterorUseTheArtOfBP_Mini#1
Projectavailableathttp://content.kitatusstudios.co.uk

42

HenshinAGoGoBaby!

Letsnotdillydally,letsgetrightbackintothings!

Step#1Ifyourenottherealready,openuptheMenuprojectwecreatedinthelastchapterOr
ifyoudonthavethattohand,downloadandopentheArtOfBP_Mini1projectfilesavailableat:
http://content.kitatusstudios.co.uk

WeneedtocreateaSaveGameblueprinttostoreourSettingsinwhichwevecreated,sohead
intotheUMGfolderwithintheContentBrowserandgotoNew>Blueprint.

WhenitaskswhattypeofBlueprintyoudliketocreate,clicktheCustomClassesbuttonnear
thebottomoftheWindowandinthesearchfield,typeSaveandselectSaveGame:

Step#2ClickSelectandnamethisBlueprint:Save_SaveGraphics.Oncecreated,double
clickthenewlycreatedBlueprinttoopenitup.Theresnotaterribleamountwehavetodoin
hereButitscrucialyoudontgetitwrongornoneoftheawesomewereabouttoachievewill
actuallywork!

43

Step#3OnceyourBlueprinthasloadedup,headovertotheVariableLibrary(IntheGraph
tab!)andcreateanewInt(Yourememberhowto,right?Ifnot,goandskimthelastchapter
again!)andcallitS_Graphics.

Save&CompilethisBlueprintthenyoucancloseit!

ThatsallwehavetodofortheSaveblueprint!

What?!Buthowdoesthatwork?!Ihearyourmindscreamthroughthesepages.

Well,itsalittlemorecomplicatedthenwhatyoureassuming.ThisSaveBlueprintdoesnt
actuallysaveorevenloadinformation.TheBlueprintstoresinformationthatcanbecalledat
anytime.Thinkofitasapocket.

Apocketdoesnthavehands,soitcantgiveyouthechocolatebaryouveputinthereanditcant
addmorechocolatebarstoitself(Imaginethat)butwhatitdoesisstorethatChocolateuntil
youneeditnext.

Sowhatdowehavetodonow?Weneedtocreatethosevirtualhandstofeedourpocketwith
Chocolatebars!

Beforewecontinue,Idliketomentionwhywereabouttodothingsthewaywereabouttodo
thingsIvetriedmanycombinationsofcastingsandwhatnotbutalotofthecastingcasesdont
seemtoworkwiththecurrentUnrealMotionGraphicsversioninthecurrentUnrealEngine4
build.Thewaywereabouttofollowseemstoworkatthemomenthowever!

InthemainviewofyourUnrealEnginewindow(TheonewiththeGameView!),Theresa
ribbonatthetop,justabovetheingameview(WecoveredthisinBook#1!).Youhaveanumber
ofoptionsinthetopribbon,suchasQuickSettings,WorldSettings,Blueprints,Matinee.etc)
44

Step#4ClickWorldSettings,whichwilloptionadetailspanelintheright(WhereDetails
usuallyare).

Step#5ScrolldowntoGameModeintheWorldSettingswindow,andpresstheNew
button.NamethisGameModeBlueprintMainMenuGameMode.

IfyoucantseetheSelectedGameModeoptions,clicktheGreyrightarrownexttoSelected
GameModetoexpandthewindow.

WeneedtocreateaPlayerController,whichwillactastheconduitbetweenourUMGand
SaveBlueprint.

HeadbacktoourUMGfolderandcreateanewBlueprint.WhenthePickParentClass
windowopensup,selectPlayerController.

45

NamethisBlueprintPC_MainMenu.NowheadbacktotheWorldSettingsGameModearea
andsetthePlayerControllertoPC_MainMenu.

Nowthatitsbeenset,weneedtoconfiguretheBlueprintitself.DoubleClickthePC_MainMenu
blueprintintheContentBrowsertoopenitup!

PlayerController=Conduit!

Step#1WithinthePC_MainMenuBlueprintCreateanewVariable(Intagain!)andcallit
PC_Graphics.

46

Step#2IntheMainBlueprintview,RightClick(Ctrl+Click)andcreateanEventBeginPlay
node.

Note:Fromnowon,Ibelieveyoushouldknowhowtocreatenodes(RightClick[Ctrl+
Click])tobringuptheCBLandsearchforthenodeyouneed.SoIwillnolongerbe
tellingyouhowtocreatenodes!

Step#3CreateaDoesSaveGameExist?node.Thisnodedoesexactlywhatitsaysonthe
tin!

IntheSlotNameinput,typeinSettings.

WhatisSlotName?WhenweeventuallycreateaSaveGame,thiswilltelltheBlueprintwhere
tolookintheSaveGamefile!WhenwecreatetheSaveGame,welltellittosavethe
informationintotheSettingsslot.

Asthisnodeposesthequestion:DoesSaveGameExist?,Wehavetogivethenodetheability
toanswerthequestion.

Step#4CreateaBranchnode(WhichisessentiallyaTrueorFalsenode)andhookitinto
theoutputpinofDoesSaveGameExistandtheConditionpinintotheReturnValuepinof
DoesSaveGameExist.

47

WerenowgoingtosetwhathappensifaSaveGamedoesntexist.Everythingwecreatein
thenextfewstepswillstemfromtheFalseoutputofourBranch.

SaveGame=False!

IfaSaveGamedoesntexist,weregoingtohavetocreateit!

Step#1FromtheFalseoutputofourBranch,createandconnectaCreateSaveGame
Objectnode.

Step#2WithintheCreateSaveGameObjectnode,settheSaveGameClassunder
SelectClasstoSave_SaveGraphics.

NowweneedtotelltheBlueprintthatSaveGraphicsisathingandgiveitpermissiontomess
aroundwithitsvariables.

Step#3GrabthebluepinReturnValueanddragtotheright.TypePromoteandselect
PromotetoVariable.

IntheVariableWindow,NamethisnewlycreatedVariabletoSaveGame.

48

Tomakesureeverythingworksalright,GetSaveGamefromtheVariableLibrary,putitintothe
Blueprintanddragfromtheoutput,typinginCast(Select:CasttoSave_SaveGraphics)and
connectthisaftertheSetSaveGame.

WevenowcreatedtheSaveGameObject,itstimetogobacktotheBranchandbranchoffto
iftheSaveGameistrue!

SaveGame=True!

InsteadofCreatingaSaveGame(AsiftheBranchistrue,italreadyexists),wenowhaveto
LoadtheSaveGame.

Step#1CreateaLoadGameFromSlotnodeandconnectittothetruefromourBranch.

Step#2Justlikewedidbefore,SettheSlotNametoSettingsandthistimedragthe
SaveGamevariablefromVariableLibraryandSetit.HooktheinputsofSetSettingstothe
rightoutputofLoadGameFromSlotandhooktheReturnValueintoSetSettings.

ThereasonwevedonethisisbecauseiftheBranchwasfalse,weweresettingthe
SaveGamevariable.However,iftheBranchistrue,thenobviouslytheBlueprintwontexecute
anyoftheFalsecode.
49

Step#3JustlikewhatwedidintheFalsesetofevents,GetSaveGameanduseittoCast
toSave_SaveSettings.

Step#4FromtheAsSaveSaveGraphicsC,clickthepinanddragtotherightandtypein
GetGraphicsandselectit.

Step#5IntheVariableLibrary,draginPC_GraphicsandselectSet.Connectthisto
TargetS_GraphicsandthetoprightpinoftheCasttoSave_SaveGraphicsnode.

50

Whatdidwejustdo?WeretellingtheBlueprintthatwhatevertheSave_SaveGraphics
settingisforS_Graphics,thatiswhatiswhatwewantPC_MainMenusPC_Graphicstobe
too!

Itmaybeatadconfusingatthemoment,butdontworryPrettysooneverythingwillmake
sense!

WhatIwantyoutodonowthough,istocreatetheSwitchOnIntandExecuteConsole
CommandsexactlyastheywerebackintheUMGsApplybutton.FortheInputthough,use
thePC_Graphics.

Youshouldendupwithsomethinglikethis:

51


AndthisisthewholeBlueprintforPC_MainMenusofar:

WhatweneedtodonowissetitsothatwhenwepresstheApplybuttonintheUMG,itwill
savethechanges.Hereshowweregoingtodothat.

OnButtonPress,SaveOurSettings!

Step#1WhilestillinourPC_MainMenu,createanewevent(EventTick).Thismeansthis
codewillfireeverysingleframe!

Step#2IntheVariableLibrary,createanewVariable.SetittoaBoolandcallitApply!

Step#3CreateaBranch,andconnectittotheTickandbringintheApplyboolandattachit
totheBranch.

IfApplyhasbeenpressed,thenweneedtoaltertheSaveGamefiletostorethenew
information.
52


Step#4GrabtheSaveGamevariablefromtheVariableLibraryanduseitonceagainto
casttoSave_SaveGraphicsandconnectthistotheTrueoftheBranch.

Step#5FromtheAsSaveSaveGraphicsC,clickthepinanddragtotherightandtypein
SetSGraphics(NotGet!)andselectit.

Step#6BringPC_GraphicsintotheBlueprintviatheVariableLibraryonceagainandhook
thisintotheSetSGraphicsnode.

Step#7FromtherighthandsideoutputofSetSGraphics,createaSaveGameToSlot
nodeandconnectthemtogether.

Step#8GrabtheSaveGamevariablefromtheVariableLibrary,dragitintotheBlueprintand
connectittotheSaveGameObjectandSettheSlotNametoSettings.

Step#9AfterSaveGameToSlot,grabApplyfromtheVariableLibrary(Setitwhen
asked!)andsetittofalse(Byleavingthecheckboxunchecked)!

AndweredonewiththisBlueprint!TheresonlyacouplemorethingslefttodoSowhatarewe
waitingfor?Save&CompiletheBlueprintthenyourefreetocloseit!

ThefinalfewstepswillneedanadventurebackintoourMainMenuOptionsUMGBlueprint!

53

TheFinalShowdown!

OnceyourebackinyourMainMenuOptions,gointoyourGraphview.OpentheEventGraph
whichshouldbeinatababovetheBlueprintview.Incaseitsnot,youcanfinditnearthetopof
theVariableLibrary.

Step#1WhenintheEventGraph,weneedanEventBeginPlaybuttheydontworkinUMGs.
WecanhoweverusetheUMGequivalentConstruct.SodojustthatCreateanEvent
Constructnode.

Step#2OpentheCompactBlueprintLibraryandtypeinGetPlayerController.

Step#3FromtheReturnValuepinofGetPlayerController,ClickandDragtotheright.
WhentheCBLopensup,typeinCasttoPC_MainMenuandconnectittotheEvent
Constructnode.

Step#4FromAsPCMainMenuC,grabthepinanddragtotheright.TypeinGetPC
Graphicsandselectit.

Step#5GointoyourVariableLibraryandgrabGraphicsSettingsanddragitintothe
Blueprintandwhenasked,selectSet.

54

Step#6ConnecttheSetGraphicsSettingstothetopemptyoutputpinoftheCastand
connecttheGetPCGraphicsoutputintotheSetGraphicsSettingsnode.

WerenowsoclosetothefinishlineIcanalmosttasteit!Save&CompilethisBlueprint,thengo
intoyourDesignerview.

ClicktheApplybuttonandwherewecreatedBindsbefore,theresalittlemagnifyingglassnext
tothenameofourBindwecreatedforitbefore.Clickthemagnifyingglasstoopenits
Blueprint.

Step#1Alt+clickthelefthandsideinputofSwitchOnInttobreaktheconnectiontothestart
oftheBlueprintasweneedtoaddafewmorenodeshere.

Step#2JustlikebeforecreatetheGetPlayerControllernodeanduseittoCastto
PC_MainMenu.

55

Step#3FromAsPCMainMenuC,clickanddragtotheright.WhentheCBLopensup,
typeinSetPCGraphics.Oncethenodehasbeencreated,clickthepinnexttoAsPCMain
MenuConceagainandthistimetypeinSetApply.

Step#4IntheSetApplynode,ticktheboxinsideittosetApplytotrueandconnectthis
nodeintotheoutputofSetPCGraphics.

Step#5HeadintotheVariableLibraryanddragGraphicsSettingsintotheBlueprint.When
asked,selectGetandhookthisintotheSetPCGraphicsnode.

NowsimplyconnecttheoutputontherightoftheSetApplynodeandhookitintotheSwitchon
IntnodethatwecreatedinthisBlueprintearlier.

56

EndOfTheBook!
IsthistheendofthebookorthestartofBook#3?Whoknows!

Inallseriousness,thishasbeenanabsoluteblast!IvelovedwritingthesebooksandIwill
continuetodosotohelpeachandeveryoneofyou!

Asalways,ifyouvegotanyquestionsorifyoudliketoshowmewhatyouvecreatedwiththis
book,thendontdelayemailmetoday!contact@kitatusstudios.co.uk

IhopeyouveenjoyedreadingandIllseeyounexttime!

Peaceout!
RyanS,ProjectLead@KitatusStudios.

57

S-ar putea să vă placă și