240 likes | 366 Views
SE 350 – Programming Games. Lecture 5 : Programming with Unity Lecturer: Gazihan Alankuş. Please look at the last slide for assignments (marked with TODO ). Today. No quiz today! (Germany 1 – Turkey 0) Did you watch the C# videos? Feedback about last week’s visit
E N D
SE 350 – Programming Games Lecture 5: Programming with Unity Lecturer: GazihanAlankuş Please look at the last slide for assignments (marked with TODO)
Today • No quiz today! (Germany 1 – Turkey 0) • Did you watch the C# videos? • Feedback about last week’s visit • Go over the example games • Cover most topics about scripting in Unity
Sample Games in Homework • URL was: http://u3d.as/content/m2h/c-game-examples/1sG • What were the things that you found interesting? • What have you learned? • What were your issues? • Let’s quickly go over the games • Jump in when we are close to your question! • The goal was to continue on, but we got stuck on this slide. We’ll continue with the rest next week.
The BEST Development Environment for Unity Scripting that I Know of • Visual Studio + Resharper for coding • I asked for a classroom license. Still waiting. In the meantime go ahead and install the 30 day version. • MonoDevelop for occasional line-by-line debugging (explained towards end of presentation) • If you are using any other way, you would certainly develop a better game if you listen to me • (If you disagree, talk to me before discarding my advice… I have worked on large projects.)
Pointer Fun with Binky • No class talking about references is complete without Binky! • This is not a joke. If you don’t get why you watched it, please ask. • http://en.wikipedia.org/wiki/File:Pointer_Fun_with_Binky_(Java).ogg
Variables with Class Types are References • Transform transform; • GameObjectmyObject; • Structs do not work that way • Vector3, Quaternion, etc. • Vector3 v = new Vector3(0, 0, 1); • Vector3 v1 = v; • v1.x = 1; • //v.x == 0 still
Operator Overloading • Vector3 v3 = new Vector3(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z); • Is equivalent to • Vector3 v3 = v1 + v2; • 0.5 * Vector3.up • Etc.
Components and Scripts • Components are added to game objects and appear in the inspector • Scripts (MonoBehavior) are custom components that you create • public variables appear in the inspector • Can have functions for handling GameObject’s events (Update, OnCollisionEnter, etc.)
Game Objects and Components • Your code runs in the context of the component • You can access • The game object that it is attached to • gameObject • Other components that are attached to the same game object • GetComponent<ComponentType>() • Shortcuts for standard components (transform, renderer, etc. ) • Parent game object in the hierarchy • transform.parent.gameObject • Other game objects in the scene • GameObject.Find(“Game object’s name”) • There are more (find all components in this hierarchy, etc.)
Accessing Things Game Object Components Transform GetComponent<Transform>() transform Cube GetComponent(“Transform”) MyOtherScript (MonoBehavior) GetComponent<MyOtherScript>() GetComponent(“MyOtherScript”) MyScript (MonoBehavior) gameObject Red text shows how this component accesses others Bushes GameObject.Find(“Bushes”)
Using the Inspector as a Guide • Don’t try to memorize anything. Just look at the inspector and you’ll figure it out.
If you can do it through the user interface, you can script it • You can access anything • You can tell them to do anything • Use the inspector and hierarchy as starting points
Which Game Object Do You Attach Your Script to? • It only changes • Whose components you want to access easily • Whose events you want to react to • If these are not important for the script, it can be in one of the standard objects (camera, etc.)
Let’s do some examples • How do I reach this object? • How do I tell him to do something?
Better Ways of Scripting • Reaching game objects by name • Is slow (string comparisons) • Is static (have to have that specific name, difficult to reuse for something else) • Another way is to expose references in the inspector (public) and make connections in the user interface • However, the inspector can be an overkill, and you still may want to find game objects by name • Don’t keep calling GameObject.Find() and GetComponent() • Make connections in the Awake() function • It’s faster to use references that are already set
Connecting Objects in Awake() • Awake runs before anything else. So, it is the preferred place for setting up connections • otherObject = GameObject.Find(“other object”); • otherComponent = GetComponent<OtherComponent>() • Later use these variables during the game, just like you use the references to the standard components (transform, renderer, etc.)
Creating and Destroying Objects while the Game is Running • Instantiate(game object or prefab, position, rotation) • Destroy(game object)
Some Basic Data Types (struct, not class) • Vector3 • For positions and directions • Quaternion • For orientations and rotations
Data Structures with Unity • Don’t underestimate. It’s C#! You can do anything! • Classes, objects, references • Variables, structs • Collections ArrayList, List<>, Dictionary<,> • Enums • Classes in separate files or within other classes • Use them to group variables together • This would help even if you don’t know Java: • http://www.25hoursaday.com/CsharpVsJava.html
Debugging with MonoDevelopwhile Coding in Visual Studio at the Same Time • Do this once after you created your Unity project • Edit->Preferences->External Tools is where you set the IDE that Unity will fire • Select Visual Studio • Double-click a script, this will create the Visual Studio project • Select MonoDevelop • Double-click a script, this will get the project in MonoDevelop’srecents • Select Visual Studio again • Close everyting • Do this at every run • Run MonoDevelop without running Unity • Select the project that is already in the recent projects • Run->Debug • This will run Unity • Set a breakpoint in MonoDevelop and see how it stops at that breakpoint • Run Visual Studio by either • running it from the start menu, • Or ensuring Edit->Preferences->External Tools is Visual Studio and double clicking on a script. • This does not affect MonoDevelop
How to go about working with code • Access what you are interested in • Easy, just use the inspector as a guide • Get the value, it will probably be an object of a class • For example: Vector3 • Read about it in the script reference • http://unity3d.com/support/documentation/ScriptReference/ • Also, search for random stuff in the script reference. It’s likely to lead in the right direction.
How to learn C# • Unity and C# tutorials in catlikecoding.com are good • http://channel9.msdn.com/Series/C-Sharp-Fundamentals-Development-for-Absolute-Beginnersis not bad. If you don’t have enough time, watch 9, 14, 15, 21 • It’s fastest to learn from examples! • The five games that you already saw: http://u3d.as/content/m2h/c-game-examples/1sG
TODO: Projects • Form your groups and solidify project ideas • Send me a report of your game idea. • It should contain: • list of group members from this class + outside helpers (artists, etc.) • brief (not longer than one paragraph) description of your game story • longer description of the gameplay, rules and how the game would be in general. • brief plan on when to complete which part • brief division of labor