Download presentation
Presentation is loading. Please wait.
Published byClemence Stewart Modified over 9 years ago
1
UnrealScript An Introduction Copyright © 2015 Curt Hill
2
Motivation Up to now we have created levels Although we may animate things there are no other pawns A pawn is either: –A player –An AI controlled agent To do these we now need to delve into UnrealScript This is a complicated system Copyright © 2015 Curt Hill
3
General Characteristics Text based script May be edited with Notepad++ –There is also a plugin for Visual Studio It is called a script but is compiled –The Unreal Front End contains the compiler –This is done outside of the general UDK interface –.UC is extension of UnrealScript –.U is extension of compiler output Copyright © 2015 Curt Hill
4
Engine The Unreal engine knows about two kinds of classes Native –Built into the engine or from libraries –Always in C++ or Assembly Non-native –Always UnrealScript Copyright © 2015 Curt Hill
5
Language Characteristics Fully object oriented –Derivation is generally required –The engine knows about certain classes, so it may also use any derivations of these classes –Everything is thus class based Similar to C++ and Java –It is not C++ or Java –Based on but different Unlike either, is not case sensitive –Reserved words and variable names in either or mixed case Copyright © 2015 Curt Hill
6
C++ C++ is a hybrid language It supports any non-object program –It is upward compatible with C It also supports objects, inheritance and polymorphism It supports programs with any combination of these characteristics Copyright © 2015 Curt Hill
7
UnrealScript is not hybrid More fully OO than C++ –Similar to Java in that respect Does not support global variables or global functions –Properties, methods and parameters only It appears that there is only a single inheritance hierarchy with Object the base –Java has only one –C++ may have many Copyright © 2015 Curt Hill
8
Terminology Peculiar to UnrealScript Reverts back to some of the terminology of C++ There are no properties –They are called instance variables There are no methods –They are called member functions Copyright © 2015 Curt Hill
9
Headers Like Java there are no headers Everything is defined in a.uc file No imports either Those items known have been processed in the order dictated by the UDKEngine.ini file Copyright © 2015 Curt Hill
10
Reserved Words UnrealScript has a ton of them –More than 180 Much larger than we see in Java or C++ This is because this is a specialized language Copyright © 2015 Curt Hill
11
Comments Uses both of C++ comments: Multiline: /* */ Single line: // Copyright © 2015 Curt Hill
12
Primitive Types int – 32 bit float – 32 bit –Constants must have a digit prior to decimal point – not.5 bool – one byte byte – one byte, 0-255 enum – one byte –May be cast into a byte –Do not use as function parameter Copyright © 2015 Curt Hill
13
More Types string – anything enclosed in double quotes –A primitive not an object –We will see some string functions later name –Represents a object or class name –Constant once item is created –Constant names are in apostrophes struct – similar to C style struct Copyright © 2015 Curt Hill
14
Predefined Structs Several exist Vector – X, Y, Z represents a point or direction Plane – Contains a W, X, Y, Z Color – An RGB value Among others Copyright © 2015 Curt Hill
15
Arrays One dimensional and static only Denoted by a bracketed constant Thus these look very much like C++ static arrays There is a dynamic array as well –Which we might or might not get to Copyright © 2015 Curt Hill
16
Objects Similar to Java declaration without visibility Class name must match filename Does not have enclosing braces since entire file is the class : class CurtPawn extends UTPawn; No contructor –Uses a default properties section instead –Slightly different syntax Copyright © 2015 Curt Hill
17
Order In a class and function definition order is important Class declaration must be the first thing in file –Except for blank lines and comments All of the instance variables must be declared first in the class All the member functions next The default properties last Copyright © 2015 Curt Hill
18
Member function Most similar to syntax and semantics to C style functions –Not C++ and Java methods Functions must start with reserved word function –Possibly prefixed with modifiers All local variables must be declared first Followed by all executable statements –Terminated by semicolons Copyright © 2015 Curt Hill
19
Function Result There is no void type A void function merely leaves off the return type A return without a value may terminate a function or be left off Copyright © 2015 Curt Hill
20
Default Properties Last part of class declaration Replaces the C++ or Java constructor –Unlike a constructor, no parameters are allowed Starts with defaultproperties reserved word Followed by compound statement The compound statement contains simple assignment statements Copyright © 2015 Curt Hill
21
More This contains simple assignments on instance variables –Variable=Literal –Semicolons are optional –No function calls –No calculations –No flow of control A sub-object gets a begin end construct to initialize its instance variables Copyright © 2015 Curt Hill
22
Begin Object End Object The initialization of a sub-object uses the following syntax: Begin Object Name=objectname Class=classname subobject assignments … End Object We identify the sub-object with name and/or class Copyright © 2015 Curt Hill
23
Variable declaration Prefixed by a keyword Instance variables are declared after the class declaration –Must be prefixed by var Member functions may use automatic variables –Must be prefixed by local There may also be one of several specifiers or metadata –We may get time to see some of these Not needed for parameters Copyright © 2015 Curt Hill
24
Example We will now look at two screens that have a valid class definition Valid in this case does not mean useful Copyright © 2015 Curt Hill
25
Example First Half Copyright © 2015 Curt Hill class CurtJunkPawn extends UTPawn; var int trash; function int junk(int morejunk){ local Float f; f = 0.; trash = trash * 2 / f; trash = 0; return 2; }
26
Example 2 Second Half Copyright © 2015 Curt Hill // Rest of CurtJunkPawn Defaultproperties { Begin Object Name = WPawnSkeletalMeshComponent bOwnerNoSee=false End Object trash = 0 Name="CurtJunkPawn" }
27
Assignments The C family style assignment is used variable = expr ; There are a larger variety of operators than most langauges When it looks like a C family operator is likely similar in: –Precedence –Arity Copyright © 2015 Curt Hill
28
Familiar Operators ++ -- + - (unary) ! * / % –Modulo has less precedence than * + - >> << >= != & | ^ && || ^^ = += -= *= /= Copyright © 2015 Curt Hill
29
Operators These operators can be applied to more than simple primitives For example the Vector may be used with numeric operators There are a variety of other operators not present in the C family Many of these we will not need but here is a sampling Copyright © 2015 Curt Hill
30
Other Operators ** exponentiation $ @ string concatenation –Also $= Dot – Matrix dot product Cross – Matrix cross product new – similar to C++ and Java new but with many more options Copyright © 2015 Curt Hill
31
Class Declarations Again Following the extends and ancestral class and preceding the semicolon we can apply several modifiers No commas or semicolons separate –The single semicolon terminates the header Placeable and noplaceable ClassGroup Implements There are others as well Copyright © 2015 Curt Hill
32
placeable Allows this class to be created by the editor Noplaceable is the default This carries on to all descendants The class must usually be a descendant of actor This modifier has no parameters Copyright © 2015 Curt Hill
33
ClassGroup Makes this class visible in the Browser and the Actor tab This is followed by one or more names –The names do not have to be enclosed in quotes –The order given is the hierarchy shown in that tab Example: ClassGroup(Curts,Junks) Copyright © 2015 Curt Hill
34
Implements Specifies an interface Interfaces are similar to Java In order to not be abstract the class must define all the member functions given by the interface Copyright © 2015 Curt Hill
35
Variable Declarations Again There are many more options that can be applied to variable declarations () const editconst Copyright © 2015 Curt Hill
36
() Empty parentheses behind the variable publishes this variable var () int MyInteger; This means that they can be examined in the editior Without means only usable in UnrealScript Putting something in the parentheses is the display name within the editor var (MyCategory) bool myBool; Copyright © 2015 Curt Hill
37
Consts The const attribute means this variable may only be changed in the defaultproperties section –Any other assignment is in error The editconst attribute makes this unchangeable in the properties dialog –Editconst does not force const Copyright © 2015 Curt Hill
38
Context Unlike many languages a type and variable may have the same name Thus: var Pawn Pawn; is legal The compiler tells the difference because of context Copyright © 2015 Curt Hill
39
Metadata We can give additional information to the compiler with metadata Metadata is enclosed in angle brackets <> Form is Example: var float MyVar ; ToolTip and DisplayName are two common metadata items Copyright © 2015 Curt Hill
40
Constants We may use a constant with the const keyword Form: const name = value; Where value is a literal value This may occur anywhere a statement can occur –Unlike a declaration No type is needed –Type is inferred Copyright © 2015 Curt Hill
41
Objects Declaring an object (the instance of a class) is just like a primitive Like in Java this is actually a handle to an object, not the object itself To initialize use new No need to dispose, garbage collector will clean up The equivalent of null is reserved word none in UnrealScript The reserved word self is equivalent to this in Java and C++ Copyright © 2015 Curt Hill
42
Objects again Like Java the dot separates the handle from the instance variable or method No exception for dereferencing a null pointer Copyright © 2015 Curt Hill
43
Type Casts Like C many casts are implicit –You need to do nothing If you need to explicitly cast the form is the same as the C++ new style cast –Typename as a function with value in parentheses Example: X = String(variable); Not all casts are supported Copyright © 2015 Curt Hill
44
Flow of Control Much similarity to C family flow If – like Java must have bool as the condition –Else is optional –Only one statement follows For – same as C –No variable declaration While – also same as Java Switch case – same a C Do until – opposite exit condition of do while Copyright © 2015 Curt Hill
45
Foreach The iteration for of Java has a different twist –Not quite as general The form is: foreach(iterator) This will give each item in a collection Copyright © 2015 Curt Hill
46
Other Flow The dreaded goto is allowed: goto expr; –Where expr is a statement label Assert ( bool ) acts like the assert of C++ Switch needs break but loops can also use –There is also a continue Copyright © 2015 Curt Hill
47
Proprocessor In UDK 3 a C style preprocessor was introduced Instead of the octothorp (#) they use the grave accent (`) –Below ~ left of 1 Most of the C preprocessor is present –Define –If else endif –include Copyright © 2015 Curt Hill
48
States A Finite State Machine is commonly used to implement pawn behavior –We saw this in Minecraft animation –Here it is more for AI We will have to see the state thing in a subsequent presentation Copyright © 2015 Curt Hill
49
Events In most languages an event is a designated (void) function In UnrealScript the event reserved word replaces the function reserved word We do not implement new events but instead override our base class events We execute the ancestral events with the reserved word super and then the event name Copyright © 2015 Curt Hill
50
Disclaimer You may need to examine various classes that are in the Development\Src directory You will find lots of other things in some of these This may include cpptext{…} –This is real C++ that is inserted into UnrealScript –Might include C style preprocessor You may find other things as well –This is not complete coverage Copyright © 2015 Curt Hill
51
Unreal Frontend This is the program that will compile the UnrealScript files It may also launch the editor or the game Here we are interested in the compiler Copyright © 2015 Curt Hill
52
Compilation The process is external to the editors Otherewise the play buttons would be a problem –The editors actually use the engine for display We instead invoke the Unreal Frontend Error messages show up in its output Copyright © 2015 Curt Hill
53
Compile Scripts Copyright © 2015 Curt Hill
54
Error/Warning Output Copyright © 2015 Curt Hill
55
Errors Errors are in red –The above was an undefined variable Warnings are in orange –Unused variable is one such warning The error messages do not always give a clear message They do indicate the file and line that the error was detected on Copyright © 2015 Curt Hill
56
Concurrent Operation The front end can start the editor The compiler generally can compile scripts when the editor is running It cannot delete the replaced script Therefore you need to exit the editor to recompile properly Copyright © 2015 Curt Hill
57
Finally This is the quick overview of UnrealScript –Or not so quick Since we all have background in other OO languages it might even make sense Copyright © 2015 Curt Hill
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.