SE 350 – Programming Games Lecture 7: Programming with Unity Lecturer: Gazihan Alankuş Please look at the last slide for assignments (marked with TODO)

Slides:



Advertisements
Similar presentations
Coordinatate systems are used to assign numeric values to locations with respect to a particular frame of reference commonly referred to as the origin.
Advertisements

SE 320 – Introduction to Game Development Lecture 5: Programming in Unity & Developing Simple Games Lecturer: Gazihan Alankuş Please look at the last two.
INNER WORKINGS OF UNITY 3D. WHAT WE ARE GOING TO COVER Intro to Unity Physics & Game Objects Cameras & Lighting Textures & Materials Quaternions and Rotation.
Vectors 2D & 3D Motion Lecturer: Professor Stephen T. Thornt on.
SE 313 – Computer Graphics Lecture 14: Armatures Lecturer: Gazihan Alankuş 1.
GameCamp! and Game Davis Introduction to Scripting in Unity®
Physics 218, Lecture XVII1 Physics 218 Lecture 17 Dr. David Toback.
Physics 151 Week 11 Day 2 Topics: Forces, Apparent Weight, & Friction  Energy  Dot Produce  Work  Conservation of Energy with Work  Work-Energy Theorem.
Exam Questions Chain of Responsibility & Singleton Patterns Game Design Experience Professor Jim Whitehead February 4, 2009 Creative Commons Attribution.
HELLO WORLD: YOUR FIRST PROGRAM CHAPTER Topics  Hello World?  Creating a Unity Project –The Unity Project Folder  MonoDevelop: Unity's Code Editor.
Phys. 121: Tuesday, 21 Oct. Written HW 8: due by 2:00 pm.
Frank L. H. WolfsDepartment of Physics and Astronomy, University of Rochester Physics 121. Thursday, February 28, 2008.
SE 320 – Introduction to Game Development Lecture 1: Introduction Lecturer: Gazihan Alankuş Please look at the last two slides for assignments (marked.
SE 350 – Programming Games Lecture 1: Introduction Lecturer: Gazihan Alankuş Please look at the last two slides for assignments (marked with TODO) 2/10/20121.
SE 320 – Introduction to Game Development Lecture 11: Animations and GoKit Lecturer: Gazihan Alankuş Please look at the last slides for assignments (marked.
SE 313 – Computer Graphics and Visual Programming Lecture 5: Geometric Transformations Lecturer: Gazihan Alankuş Please look at the last slides for assignments.
SE 204, IES 506 – Human Computer Interaction Lecture 5: Class Practice on the Design Process Lecturer: Gazihan Alankuş Please look at the end.
SE 313 – Computer Graphics Lecture 3: Analytical Geometry and Linear Algebra Lecturer: Gazihan Alankuş Please look at the last three slides for assignments.
SE 320 – Introduction to Game Development Lecture 4: Programming in Unity & Project Presentations Lecturer: Gazihan Alankuş Please look at the last two.
SE 350 – Programming Games Lecture 6: Programming with Unity Lecturer: Gazihan Alankuş Please look at the last slide for assignments (marked with TODO)
SE 204, IES 506 – Human Computer Interaction Lecture 1: Introduction Lecturer: Gazihan Alankuş Please look at the last two slides for assignments (marked.
UFCEKU-20-3Web Games Programming Unity 3D Basic Concepts Using and Creating Prefabs.
EEC-693/793 Applied Computer Vision with Depth Cameras Lecture 13 Wenbing Zhao
SE 350 – Programming Games Lecture 1: Introduction Lecturer: Gazihan Alankuş Please look at the last two slides for assignments (marked with TODO) 2/10/20121.
SE 320 – Introduction to Game Development Lecture 8: Animations, GUIs, Debugging and IDEs Lecturer: Gazihan Alankuş Please look at the last two slides.
Web Games Programming Unity Scripting Fundamentals.
UFCFS D Technologies for the Web Unity 3D: Review of Topics and Related Concepts.
SE 313 – Computer Graphics Lecture 6: Transformations Lecturer: Gazihan Alankuş Please look at the last three slides for assignments (marked with TODO)
Principles of Computer Science I Honors Section Note Set 1 CSE 1341 – H 1.
Learning Unity. Getting Unity
SE 204, IES 506 – Human Computer Interaction Lecture 8: Review for Midterm Lecturer: Gazihan Alankuş 1 Please look at the end of the presentation for assignments.
Matthew Christian. About Me Introduction to Linear Algebra Vectors Matrices Quaternions Links.
SE 320 – Introduction to Game Development Lecture 3: Unity’s Interface and Concepts Lecturer: Gazihan Alankuş Please look at the last two slides for assignments.
SE 320 – Introduction to Game Development Lecture 7: Programming Lecturer: Gazihan Alankuş Please look at the last two slides for assignments (marked with.
“The perfect project plan is possible if one first documents a list of all the unknowns.” Bill Langley.
SE 313 – Computer Graphics Lecture 8: Transformations and Projections Lecturer: Gazihan Alankuş 1.
C++ Classes and Data Structures Jeffrey S. Childs
Games Development 2 Overview & Entity IDs and Communication CO3301 Week 1.
HashCode() 1  if you override equals() you must override hashCode()  otherwise, the hashed containers won't work properly  recall that we did not override.
Games Development Game Architecture: Entities CO2301 Games Development 1 Week 22.
UFCEK-20-3Web Games Programming Unity 3D: Review of Topics Publishing for the Web.
Object Oriented Analysis & Design Game Patterns. Contents  What patterns are  Delegation  Game Loop  Scene Graph  Double Buffering  Component 
CHAPTER 14 Classes, Objects, and Games XNA Game Studio 4.0.
SE 320 – Introduction to Game Development Lecture 2: Introduction to Unity Lecturer: Gazihan Alankuş Please look at the last two slides for assignments.
CLASSES CHAPTER Topics  Understanding Classes –The Anatomy of a Class  Class Inheritance –Superclasses and Subclasses –Virtual and Override 2.
GameDevClub CODE CHEAT SHEET NOTE: ALL OF THE CODE IS CASE-SENSITIVE AND THE SYNTAX IS STRICT SO A LOT OF YOUR ERRORS WILL PROBABLY COME FROM TYPOS If.
SE 350 – Programming Games Lecture 5: Programming with Unity Lecturer: Gazihan Alankuş Please look at the last slide for assignments (marked with TODO)
SE 313 – Computer Graphics and Visual Programming Lecture 6: Geometric Transformations Lecturer: Gazihan Alankuş Please look at the last slides for assignments.
UFCEKU-20-3Web Games Programming Instantiating World Objects.
Expressive Intelligence Studio // Center for Games and Playable Media // Unity Pro John Murray Expressive.
 How can we find/refer to objects at runtime?  This must be dynamic because objects may come and go.  How can we solve this problem?
EEE 242 Computer Tools for Electrical Engineering
Behavior trees & The C# programming language for Java programmers
Game Development with Unity3D
EEC-693/793 Applied Computer Vision with Depth Cameras
Quick Intro to Unity Lecture 2.
EEC-693/793 Applied Computer Vision with Depth Cameras
EEC-693/793 Applied Computer Vision with Depth Cameras
OOP Paradigms There are four main aspects of Object-Orientated Programming Inheritance Polymorphism Abstraction Encapsulation We’ve seen Encapsulation.
Applying Geometric Transformations
Physics 218 Lecture 15 Dr. David Toback Physics 218, Lecture XV.
ROOM 2+ FEATURES A-CREEPIN’ BEFORE WE START: LANYARDS RECAP ALL HERE?
Week 6: Time and triggers!
Introduction to Unity 2D Game Development
Fundaments of Game Design
EEC-693/793 Applied Computer Vision with Depth Cameras
Games Development Game Architecture: Entities
Unity Game Development
Presentation transcript:

SE 350 – Programming Games Lecture 7: Programming with Unity Lecturer: Gazihan Alankuş Please look at the last slide for assignments (marked with TODO) 2/10/20121

Outline Exam talk Rest of the semester Continuing with Unity programming 2/10/20122

Midterm How was it? Suggestions? Concerns? 2/10/20123

Rest of the Semester Some homeworks, maybe quizzes? Major focus is on developing and finishing your games – Some weeks will be development workshops Probably starting next week. Bring laptops! Bring designer friends if you like. 2/10/20124

Recap what we learned Game objects, components Prefabs, assets Classes and structs, – sharing references vs. copying Accessing other objects – gameObject, GetComponent (), – Standard components (transform, renderer, etc.) – GameObject.Find(“name”) – transform.parent 2/10/20125

Recap what we learned Functions that you write and that Unity calls – Awake, Start, Update, OnCollisionEnter, … Making connections (getting references to other objects) in Awake() Visually decide what to do on the interface, use it to write code Instantiate()/Destroy() objects during runtime 2/10/20126

Things that we will learn about Basic data types – Vector3 (position, direction, displacement) – Quaternion (orientation, rotation) Details of standard components – Transform, Collider, Renderer, RigidBody Basic data structures in C# – List, Dictionary, etc. 2/10/20127

Vector3 Vector3 means “three dimensional vector” Just three floats: x, y and z Often used for talking about a 3D position or direction – Contains methods/properties that help in this domain e.g., transform.position is a Vector3 2/10/20128

Vector3: related to magnitude v.normalized v.magnitude v.Normalize 2/10/20129

Vector3: some constants Vector3.zero == new Vector3(0, 0, 0) Vector3.one == new Vector3(1, 1, 1) (LOL) Vector3.forward == new Vector3(0, 0, 1) Vector3.back == new Vector3(0, 0, -1) Vector3.up == new Vector3(0, 1, 0) Vector3.down == new Vector3(0, -1, 0) Vector3.right == new Vector3(1, 0, 0) Vector3.left == new Vector3(-1, 0, 0) 2/10/201210

Vector3: Averaging (interpolating) Vector3.Lerp(v1, v2, fraction) Vector3.Slerp(v1, v2, fraction) 2/10/ v1v2 0fraction1 v1v2 0 fraction 1 origin (0, 0, 0)

Vector3: Geometric operations Vector3.Scale(v, s) Vector3.Project(v, vbase) Vector3.Angle(v1, v2) Vector3.Distance(v1, v2) Vector3.Dot(v1, v2) Vector3.Cross(v1, v2) 2/10/201212

Vector3: operators v1 + v2 – Adds x, y, z values separately and returns the sum vector 3.5 * v – Multiplies x, y, z with 3.5 2/10/201213

Quaternion Has four values (x, y, z, w). What are they? – Don’t worry about its mathematical definition (has four values, etc. don’t care because they won’t make sense in our context) Is simply (both of these below are true) – A vector and an angle Rotate around that vector with that angle – Three consecutive rotations around z, x and y axes Represents – Orientation (rotate to here from default orientation) – Rotation (change in orientation) 2/10/201214

Quaternion q.x, q.y, q.z, q.w – DON”T CARE!!!1!!! – NEVER USE THEM!!!!! 2/10/201215

Quaternion: its value that makes sense q.eulerAngles – Vector3 that contains rotations around axes – Rotation order is z, x, y (but you don’t have to care) q.ToAngleAxis(out angle, out axis) – sets the angle and axis variables that you give to it – rotation around that axis with that angle amount 2/10/201216

Quaternion: operations q1 * q2 – the result is the rotation that is equal to: rotate with q2 first, and then with q1 – or, if q2 is orientation of something, rotates it with q1 (same thing, slightly different interpretation) q * v – rotate v with q Quaternion.Dot(q1, q2) Quaternion.AngleAxis(angle, axis) Quaternion.Euler(x, y, z) Quaternion.Inverse(q)... 2/10/201217

Quaternions: Averaging (interpolating) Quaternion.Slerp(q1, q2, fraction) – The correct way to interpolate two quaternions Quaternion.Lerp(q1, q2, fraction) – Slightly faster, bad interpolation (moves faster in the middle) 2/10/201218

There are more Ray, Rect, Vector2, Vector4, etc. Use the scripting reference – Help > Scripting Reference (in Unity window main menu) 2/10/201219

Standard components Have – Properties (variables) Can’t modify Can set for instance – Functions Can call for instance – Class functions (static) Can call with class name, without an instance – Messages Functions are called on all components that are attached to the GameObject when events happen 2/10/201220

Transform transform.position transform.rotation – With respect to the world. Changes when parent changes. – Not what you see in the inspector. transform.localPosition transform.localRotation transform.localScale – With respect to the parent. Does not change when parent changes. – What you see in the inspector transform.right, transform.up, transform.forward – x, y, z axes of the orientation (the arrows you see) 2/10/201221

Global vs. Local 2/10/ p c p.position == p.localPosition c.localPosition c.position c.transform.parent == p.transform

Global vs. Local 2/10/ p c p.position == p.localPosition c.localPosition c.position Red ones changed as a result of moving the parent All of this is the same for rotation and localRotation

Renderer r.material r.isVisible 2/10/201224

Colliders c.isTrigger – True Not used in physics calculations, lets things through OnTriggerEnter is sent to the GameObject (and its components) – False Used in physics calculations, won’t let things through OnCollisionEnter is sent to the GameObject (and its components) 2/10/201225

Colliders c.material – The physics material (PhysicMaterial) friction constants bounciness 2/10/201226

Standard components Have – Properties (variables) Can’t modify Can set for instance – Functions Can call for instance – Class functions/class variables (static) Can use with class name, without an instance. Like global variables but in class. – Messages Functions are called on all components that are attached to the GameObject when events happen Examples – t.position = t.position + Vector3.up; – t.Translate(1, 1, 1) – Vector3.Lerp(v1, v2, f) – Vector3.up – Update() – OnCollisionEnter() – OnCollisionEnter(Collision collision) 2/10/201227

There are many other components Use the scripting reference! 2/10/201228

Keeping Game State: Data Structures You will have to handle information about your game Examples – List of enemies – Accessing enemies by their names – Enemies sorted by their distance to the character – The friendly NPC that the enemy is chasing 2/10/201229

Data Structures Hold references to other objects – GameObject enemy = GameObject.Find(“enemy”); Remember pointer fun with binky. This is just a pointer. 2/10/201230

Data Structures in C# using System.Collections; using System.Collections.Generic; List enemies = new List (); – loop with foreach, access enemies[5] Dictionary enemiesByName = new Dictionary (); – access by enemy name. enemiesByName[“wolf”] – loop with foreach Amazing resource: Also should watch: Fundamentals-Development-for-Absolute-Beginners/Working-with- Collections-21http://channel9.msdn.com/Series/C-Sharp- Fundamentals-Development-for-Absolute-Beginners/Working-with- Collections-21 2/10/201231

Game Structure You will have GameObjects for various elements in your game (character, enemy, robot, etc). Create their own scripts and put code specific for them. You also need to have code that is common for the game (scoring is an example). Attach such scripts on the camera or on a similarly unique object. Wire them up in Awake() For common singletons, create – static MyScript instance; – public static MyScript getInstance() { return instance; } – public MyScript() { instance = this; } And in other scripts, – MyScript myScript = MyScript.getInstance(); – Easier than GameObject.Find() 2/10/201232

TODO: Projects If you are not sending reports, I think that you are not working on the projects. Every member of the group will send me a separate weekly report about what you did that week about the project – This is private. Do not share with others. – Just write it as an . No attaching word documents or pdfs please! – Send them every Thursday night! 2/10/201233