Idag dyker vi in i UDKs Kismet och tittar på att utveckla Händelser, vad de är, hur vi kan skapa dem och hur vi kan hantera dem. Du lär dig hur du skapar och hanterar nästan alla typer av händelser i UDK för att kunna bygga fullständiga, komplexa och fullständigt skriptade nivåer som börjar med den enkla nivån vi ska skapa i denna handledning.
I UDK är en händelse en speciell situation som du definierar (uppenbarligen i Unreal Kismet) som medför konsekvenser för spel eller andra spelelement. Du kan skapa händelser var som helst på en nivå, utan begränsningar. Du kan dela dem i tre olika grupper: Pre-Compiled Events, Trigger Events eller InterpActor Events. I den här handledningen täcker vi dem alla för att ge dig en fullständig bild av hur en händelse skapas och manipuleras.
Förberedda händelser: Om du öppnar Unreal Kismet (den gröna K överst i UDK-fönstret, nära innehållsbläsarens ikon och Matinee-ikonen) och högerklickar på ett tomt utrymme i Kismet-fönstret och du går under "Ny händelse", du får se många färdiga händelser grupperade tillsammans som "Skådespelare", "AI" eller "Pawn" till exempel. Skådespelare, AI och Pawn är i detta fall utlösande delen av en händelse och utan dem startar händelsen inte alls. Så, ett exempel: om du vill att en händelse ska börja när en fiende dör, måste du gå under "Pawn", eftersom en fiende kallas en bonde och väljer Death.
För vårt ändamål, skapa en 512 x 512 x 256 Hollowed Cube.
Lägg nu ett punktljus i rummet genom att hålla L tangent på tangentbordet, och sedan vänster-klicka på det rum vi just skapat (kuben.)
Flytta ljuset in i mitten av rummet och bygg sedan upp belysningen (med eller utan Lightmass, det är inte viktigt.)
Gjort? Nu kan vi börja med vår första UDK-händelse, en förkompilerad händelse i det här fallet. Den vanligaste förkompilerade händelsen som används av en UDK-kodare är "Level Loaded" -händelsen. Som du kan tänka dig börjar denna händelse när nivån är laddad. Så, låt oss börja med detta: Gå till Unreal Kismet, högerklicka på ett tomt utrymme och gå till Ny händelse> Nivåladdad.
Nu borde du ha en nod som heter "Level Loaded" i din Kismet. Om så är fallet kan du nu se att den här noden har tre utgångar eller bättre i det här fallet tre villkor för att aktivera händelsen: När nivån är laddad och synlig vid början av nivån eller när nivån återställs. Dessa villkor är ganska självförklarande, faktiskt är den enda skillnaden mellan "Loaded and Visible" och "Beginning of Level" en liten fördröjning av den andra jämfört med den första. Medan den tredje handlar om en omladdning av nivån, men vi kommer inte in i den här funktionen nu.
Vi ska skapa ett slags alarm som berättar spelaren att förbereda sig för att en fiende kommer fram. För att uppnå detta, låt oss skapa en annan nod genom att gå (alltid med högerklick), till Ny åtgärd> Röst / Meddelanden> Spela meddelande.
Nu klickar du på den här noden och i meddelandet textfältet skriver du "Förbered dig! En robot kommer att döda dig!" Med detta säger vi UDK att skriva en text i mitten av bildskärmen som rådgör spelaren att en robot kommer att döda honom, så han måste förbereda sig för att slåss.
Skapa nu ytterligare 6 Play Announcement Noder, som vi tidigare gjort.
I den sista skriv under Meddelande Text "Ta Shock Rifle och kampen kommer att börja!".
I de andra Noderna kommer vi att använda en ljudräkning som ingår i UDK-tillgångarna. Så, gå in i "Content Browser" och skriv i sökfältet "nedräkning". En Tio Soundnode Wave kommer att dyka upp, välj sedan "Countdown 5".
Gå nu tillbaka till Kismet och klicka på den första tomma Play Announcement Node. Gå in i Meddelande Ljudfältet och klicka på den gröna pilen till höger. Namnet på SoundNode Wave ska visas i fältet. Vad du just har gjort är att säga UDK att spela ljudet ett antal (fem) gånger för att skapa en nedräkning.
Så gör nu vad du just gjorde med föregående nod, med de fyra återstående Play Announcement Noderna. Kom ihåg att du måste först välja numret för nedräkningen i innehållswebbläsaren (den fjärde, den tredje, den andra och den första) och klicka sedan på noden i Kismet och sedan i meddelandeljudet klickar du på den gröna pilen till sätt in den.
Gjort? Väl. Nu är det dags att koppla händelsen till de noder vi har skapat. Anslut utgången från "Början av nivå" till den första meddelandekoden.
Sedan, från utmatningen av din första meddelandekod till ingången till den andra meddelandekoden och så vidare (som visas nedan.)
Nu när nivån börjar börjar vi ha en serie meddelanden som ger råd till spelaren, men om vi lämnar dem som de är kommer bara ett meddelande att visas på skärmen och spelaren får inte all information vi vill ge honom . För att visa dem alla måste vi sätta en fördröjning mellan våra meddelandekoder. Så högerklicka på Output (den svarta rektangeln) på den första meddelandekoden och klicka på "Ställ in aktiv fördröjning". I fönstret som visas, ställ in fördröjningen till 2,0 och klicka på OK.
Upprepa det föregående steget för anslutningarna mellan de andra noderna, men denna gång ställer du fördröjningen till 1,0, för att det finns nedräkningen!
Trigger Events: Dessa är speciella händelser som används för att utlösa en del av ett element, vilket inte visas under spelet, kallas "Trigger". Utlösare är cylindrar, men inte ordentliga cylindrar. De har en radie och en höjd, men det är inte en pensel eller något du kan tillämpa ett material på. Radien och höjden på dessa cylindrar beskriver området som en spelare, en bonde eller något du vill ha kan aktivera den relativa händelsen. Så i det här fallet är spelare eller pjäser inte direkt ansvariga för starten på en händelse, men de utlöser den genom kontakt med det definierade området av Triggers cylinder.
Kom ihåg att du skrev i det senaste meddelandet "Take the Shock Rifle?"? Jag antar att det är dags att sätta en i din nivå. Men först låt oss sätta in en Trigger som hjälper oss att definiera det område där spelaren kommer att aktivera nästa händelse, och där vi ska kasta vår Rocket Launcher. Så högerklicka på golvet, gå till "Add Actor" och välj "Add Trigger". Nu kommer du märka att en konstig ikon har dykt upp, vad som verkar vara en växel, med en röd rektangel som sveper runt en grön cylinder.
Nu, som jag sa tidigare, är cylindern det område som definierar om det finns kontakt med spelaren eller inte och aktiverar en händelse. Låt oss göra det större. Högerklicka på avtryckaren, gå till "Egenskaper" och under "Cylinder Component", ändra Cylinder Radius och Height som du vill (jag ska gå för en 60-60.)
Förmodligen som hos min, gick din Triggers cylinder ner i marken. Så skjut det upp och när du är klar, återvänd till Kismet.
På ett tomt utrymme nära det senaste meddelandet, högerklicka och gå till Ny handling> Skådespelare och välj "Actor Factory".
Klicka på den här noden och klicka på den blå pilen till vänster i fabriksfältet och välj "UTFactoryPickup". Klicka sedan på "Fabriks" för att expandera det, och välj "Shock Rifle" i lagerfältet..
Välj sedan Trigger i nivån och återvänd till Kismet, högerklicka på "SpawnPoint" -inmatningen och klicka på "Nytt objekt där du använder Trigger".
Anslut nu utgången till den sista meddelandekoden till ingången till skådespelarens fabriksnod. Jo, vi har äntligen vår Shock Rifle som springer efter det senaste meddelandet.
Nu måste vi kasta en fiende efter att spelaren har tagit Shock Rifle. För att göra detta ska vi skapa en Trigger Event. Med utlösaren vald i nivån, gå till Kismet och högerklicka på ett tomt utrymme, och välj "Touch" under "New Event using Trigger". Detta innebär att händelsen aktiveras när spelaren går in i cylinderns område. Ett annat vanligt val är "Used", det innebär att när spelaren är framför cylindern och trycker på E-knappen kan han aktivera en händelse. De andra är mindre val, som inte används ofta med en Trigger.
Nu skapar du en annan "ActorFactory" Node, men den här gången i fabriksfältet väljer du "UTActorAI". Och i fabriksegenskaperna ställer du in ControllerClass: till "UTBot", PawnClass: till "UTPawn" och kolla på egenskapen "GiveDefaultInventory".
Därefter ge honom ett namn (jag kommer att lämna beslutet till dig) och anslut "Trigger Touch" -händelsen till "Actor Factory". Högerklicka nu på "Spräng" -utgången och välj "Skapa nytt objekt Var".
På din nivå, högerklicka på golvet, på motsatta sidan av din Trigger, gå till "Lägg till skådespelare" och välj "Lägg till Pathnode".
Återvänd nu till Kismet, högerklicka på "Spjutspetspunkt" och välj Nytt objekt Var använd vägväg. Slutligen har du skapat din första Trigger Event och har din fiende gyta efter att spelaren har tagit vapnet, det enda som återstår är att ge fienden ett mål.
Högerklicka i Kismet och gå till Ny åtgärd> Misc och välj "Spår".
Anslut "Färdig" utgången från ActorFactory till "Trace" -inmatningen, och anslut sedan Start-inmatningen av "Spår" till objektvariablerna av ActorFactory's "Spridda".
Högerklicka nu på ett tomt utrymme och gå till Ny åtgärd> AI och välj "Start firing At".
Högerklicka sedan på ett tomt utrymme, gå till Ny åtgärd> AI och den här gången väljer du "Stop firing".
Anslut den "obstruerade" utgången till "Start firar vid" och "Stoppad" till "Stoppsändning".
Anslut utgången för både "Start" och "Stop Firing" till Inmatning av "Spår" (som visas.)
Ställ in sin utgångsfördröjning till .5.
Anslut målinmatningen för både "Start" och "Stop Firing" till den Sprängde Object Variable.
Högerklicka nu på ett tomt utrymme och gå till Ny Variabel> Spelare, och välj "Player".
Anslut "Fire At" -inmatningen till spelarens variabel. Plötsligt har du skapat en bot (en fiende) som springer i triggcylindern och söker sedan efter spelaren. Och om han hindras av något, skjuter han inte, men om han inte är hindrad kan han skjuta fritt på spelaren.
Nu, om du försöker din nivå ser du att ibland firar fjenden före slutet av nedräkningen. Detta händer eftersom triggeren redan är aktiverad och det väntar inte på slutet av den tidigare Kismet-sekvensen. För att aktivera detta endast när nedräkningen är klar, låt oss gå till Kismet, välj "Trigger Event Touch" och avmarkera "Enabled" i dess egenskaper.
Högerklicka sedan (som alltid i Kismet) och gå till Ny åtgärd> Växla och välj "Växla".
Anslut nu utmatningen från den sista Play Announcement Node till "Turn On" -inmatningen på växlingsnoden och "Event" -utgången "Växla" till "Trigger Touch Event". Nu har du en Trigger-händelse som är aktiverad när Play Announcement-sekvensen är avslutad.
InterpActor, StaticMeshActor och Brush händelser: Dessa liknar utlösare, i själva verket aktiveras dessa händelser alltid genom kontakt med ett område, men i detta fall inte med ett cylindriskt område, men med ett anpassat område i förhållande till InterpActor (eller StaticMeshActor eller pensel) vald. Den enda stora förändringen, förutom det olika området som du kan komma i kontakt med, är att Trigger är synlig under spel och du kan göra fysisk kontakt med den medan du spelar.
Slutligen har vi kommit fram till InterpActor Events. För denna typ av händelse kommer vi att skapa en sorts uppdelning mellan nivån och dela upp den i två delar, men på ett singulärt sätt! Så, gå till "Content Browser" och sök efter "thinwire", när sökningen är klar, dubbelklicka på "Thinwire16" och gör ett högerklick på din nivå och välj "Lägg till InterpActor".
Sök nu efter "kontakt" och välj det första resultatet av din sökning, lägg till denna InterpActor två gånger.
Justera dessa tre element som visas i bilden nedan, för att dela upp rummet i två delar. (För detta ändamål, skala in thinwireen Y av 1,2)
Med dessa element fortfarande markerade trycker du på F4 för att öppna egenskaperna.
Gå nu till "Kollision" och sätt "Kollisionstyp" till "Rör alla".
Vad du just gjort läggs tre InterpActor i nivån med en Collision Type som är inställd på Touch All. Vilket innebär att en händelse i detta fall kommer att aktiveras om spelaren eller någon annan berör ledningarna eller kontakterna. Nu måste vi skapa denna händelse! Välj de tre aktörerna vi har skapat, gå till Kismet, högerklicka på ett tomt utrymme och gå till "New Event using InterpActor?" Och välj "Touch".
Högerklicka i Kismet, gå till Ny handling> Skådespelare och välj "Ändra hälsa".
Välj "Ändra hälsa" Node, och ställ in skadorna på 100 (spelarens liv) kan du också ställa in skadestypen till Krossad eller Telefragged om du vill ha ett ljud som spelas när spelaren får skadorna.
Högerklicka i Kismet, gå till Ny Variabel> Spelare och välj "Player".
Anslut "Target" -inmatningen för "Ändra hälsa" till den här variabeln.
Anslut alla "Touched" utgångar från InterpActor Events till "Modify Health" Node. Nu när någon rör kablarna eller kontakterna, kommer spelaren att dö. Inte så lika, men på denna nivå flyttar fienden inte sig själv, han står bara precis framför dig och skjuter dig, så han kan inte röra på ledningarna. Medan spelaren måste vara försiktig när han själv rör sig.
Det är fortfarande ett problem att fixa, om du dör genom att röra på ledningarna eller kontakterna och respawn, vidrör InterpActor som bara dödade dig, kommer du inte att döda dig igen. Det beror på att våra evenemang är inställda att aktiveras endast en gång. För att åtgärda detta, gå till Kismet, välj alla InterpActor Event Nodes och gå under "Sequence Events".
Dessa egenskaper är desamma i varje händels startsekvens: "Max Trigger Count" betyder hur många gånger händelsen kan aktiveras. "Trigger Delay" betyder hur länge en aktivering går före nästa. "Enabled" betyder givetvis att om den är markerad aktiveras händelsen, annars är den inaktiv. "Prioritet" är användbart när du har många händelser som börjar i samma ögonblick, och slutligen betyder endast spelare eller klientsidor vem som kan aktivera den här händelsen. För vårt syfte, sätt "Max Trigger Count" till 0 (oändlig).
Slutligen är nivån klar, så spara, bygga om din nivåbelysning och stigar och du är redo att prova nivån!
Högerklicka nu och gå till "Nytt skick" och välj "Är levande".
Anslut den färdiga utgången till "Är levande" -ingång och anslut "True" -utgången till "Spår" och "Starta eld vid" och "Avbryt elden" till "Är levande" -inmatning. Anslut också "Is Alive's" -spelaren till "Spawned" -objektet. Nu har du äntligen fixat felet (försök bara!) Och du är redo att spela din nivå!