Teaching Portfolio

Derek L. Manns

Objectives

I have a deep passion for video games and digital entertainment and how they are produced, therefore teaching concepts in design, art, and programming is an awesome journey I love to share with my students and the world.  I teach game development in the classroom with a development life cycle style to provide students with a real-world experience. I enjoy playing video games, which makes it easy to convey many design styles that exist along with their development methods. The teaching methods I follow are always hands on and transition well to an online teaching environment. I do this by holding live sessions that cover all aspects of game design. I follow up with internal videos from the live sessions.

My philosophical approach to teaching is supported by these principles:

I teach students to respect all aspects of the development process. This means no one person is more important than the other in a development environment. I teach structure and organization where it is needed and creativity where it is wanted for a balanced approach to the final product.

I share an old-school process with new school productivity to balance the development time needed to create a project. I lead by example by creating projects along with my students to provide a novice to professional evolution.

I utilize existing commercial games with integrated software development kits (SDKs), allowing community developers to create new content. The development platforms give me an opportunity to show students how the game was developed and why particular designs were used. My teaching and research proposal share a similar integrated structure. My research proposal will support my teaching methodology by improving the engaging nature of teaching computer science to non-computer science majors. Specifically, designers and artists who wish to create gameplay scenarios through visual scripting or programming. The proposed methods will engage the student in a manner that is relative to the gameplay scenarios I teach in the classroom. Objectives will not only teach but test the acquired knowledge through further gameplay scenarios. Providing a real-world teaching method translates well from the history of video games and methods to project management. Managing the development life cycle provides the students with an insight into the professional world.

The passion I have for teaching the history of games, level design, coding, game design, audio/sound integration, and project/software management, allows me to pass on knowledge in hopes of strengthening the future of game development.

Responsibilities

Courses I teach are typically related to my career path as a level designer, game designer, creative director, producer, IT professional and web developer.

My duties as a teaching professional are focused primarily on 300-level level design, game design, and 3D modeling courses. However, I have experience and education to warrant the teaching of other courses in technical design through scripting and frontend coding.

My C.V. reflects a variety of courses related to game development and it’s entire lifecycle including final projects through 400-level courses.

GRA

202

3D Modeling and Animation

GRA

220

Introduction to Digital Imaging

GSP

111

Introduction to Game and Simulation Programming

GSP

240

Practical Game Design with Lab

GSP

261

Intro to CG and Animation

GSP

340

Modification and Level Design with Lab

GMD

411

3D Model Design and Construction with Lab

GSP

410

Software Engineering for Game Programming with Lab*

GSP

494

Senior Project I*

GSP

497

Senior Project II*

COMP

100

Computer Applications for Business with Lab

Due to my latest courses being online, I tend to extend my help through Google Hangout or Skype and answer questions through short video demonstrations.

Evaluations

My evaluations are nominal and reflect the hard work and extra help I provide to my students through video tutorials and documented instructions.

Results

Many of my students have gone on to work for PSAV, Hanger 13, Escalation Studios, America’s Army and many other government and private tech firms.

Publications

My professional accomplishments in game development span sales, testing, design, art, coding, marketing, and production.I rewrote the lesson plans for DeVry university’s online level design and 3D modeling courses. I have written a number of papers on game development topics and contributed my skills to the Urban league’s S.T.E.M. initiatives.

Appendix - Lesson Plan

Unity3D Game Design Lesson Plan

Topic: First Playable Encounter - 3rd Person Action Game

Lecture will cover what a Game Designer must do in the planning and implementation stage for creating a fully playable objective.  Cover the vision, planning and execution steps.

  *   Level layout and blocking

  *   Gameplay objectives

  *   Main gameplay mechanic and how it’s used

  *   Pacing for character difficulty

  *   Objects and scripts used for implementation

That's a lot to fit in 30 minutes, so figure out what would be most important to cover for that topic. Also consider that we give the character some code that they use for a generic 3rd person action game that they then build upon so you don't have to go from a technical square-one.

Introduction

I am Derek Manns your level design professor.

Planning

We will be designing a first playable encounter for a 3rd person action game. Our solution can be solved with most game engines based on the solid implementation of gameplay and its associated elements from a strong game design approach. The plan is to create a 3rd person action game. The overall process should begin with how your game will look and feel. What is inspiring the style of your game, the character, setting, sound, environments, and most importantly, gameplay.

  1. You will gather as many design references to support your style.
  2. Research the game engine best suited to fulfill your development needs.
  3. Find your music, sounds, texture sets, environmental styles based on storyline
  4. Based on your story and game mechanics, design your levels
  5. Create your User Interface(UI) for in-game and menu system

Story

The story you create must flow with the game mechanics and style of your game. The storyline, characters which include protagonist, antagonist, and supporting cast. The narrative of your game plays like a typical movie with the introduction of the main character better known as the protagonist. The story can be introduced through a cinematic cutscene and/or a walkthrough of game mechanics in the form of a tutorial. Older games provided a separate tutorial level to acclimate the character to the game mechanics. Act 1 introduction sets the story through a level that immerses the character into the game and allowing them to learn simultaneously. Act 2 provides the overall arching story and gameplay. Act 3 is the conclusion or “Boss fight”. Unlike movies, games tend to create the 3 act scenario in each level to provide leveling up and/or weapon procurement along with the story progression. The skill improvement through item collect and or leveling up prepares the character for the climactic ending to defeated the protagonist in most cases. In other cases, it can be solving a puzzle or just simply understanding the meaning of the journey.

Environment(Game World)

Based on your environment and immersion, you will need to decide how you want to translate what you know as reality and transform it into a simulated one in order to make is playable. How do you want your game world to mimic the reality or be more fictional or fact. Will it be based on the future, the past, or present? How will this affect the characters experience through gameplay?

 

Open-World

Gameplay objectives are not necessarily ordered linearly but can be based on a branching path where there are primary objectives to be accomplished while completing elective objectives. Examples: Grand Theft Auto and Crackdown,...

Non-Linear

A multiply path or level based approach which allows the character to choose the way they advance through the game. You can take the high road or the low road. You can use violence or a peaceful approach. Examples:  Fallout and Elder Scrolls,...

Linear

Controlled path set by the designer to parallel a storyline. This style allows the design to create a strong, story driven interactive narrative. Example: Half-Life, Doom, Wolfenstein, Call of Duty, Medal of Honor, and Brothers in Arms,...  

Sandbox

Many have used this term to define specific game environment but, when you consider it’s origin, it refers to the playful environment for children to play and create things within a confined space.

If we wanted to be technical:

True Sandbox:

In game world building:

Once you have established your environment and the level of realism to fiction ratio, the control system should allow fluid interactions by teaching the character how to play the game. To achieve integrated gameplay learning, you need to immerse the character into the world and provide visual and or audio queues through a combination of speaker and controller/keyboard and mouse interactions.

Controls

For a time there were only a few controller schemes the game world was use to:

3D environments:

First-Person Shooter(FPS): Keyboard and Mouse

**Third-Person: Controller (Grand Theft Auto(GTA)) scheme**

Driving: Was X for gas on Playstation and A on Xbox

But trigger sensitivity and more buttons helped the evolution of the controller inch its way closer to the keyboard and mouse. Once the combination of buttons were possible, some characters migrated to controller only while many remained in the keyboard and mouse space.

Because of the evolution of control schemes and camera options, 3rd person gameplay has become a standard in its own right. Grand Theft Auto is, arguably, one of the games that made 3rd person control schemes a standard, leaving FPS schemes to its own genre. There are exceptions based on camera settings such as Resident Evil 4 and Dead Space.

Pacing

Planning the pace of your game is crucial to level of difficulty, immersive the player and they will learn, entertaining story, and enjoy the character’s journey by leveling up. I refer to this method as d.i.e. and enjoy it. Examples: Oddworld: Munch’s Oddysee, Little Nightmares, The Cave, and INSIDE. These games throw you into an unexpected and violent demise to quickly wake you up to what happens when you are not onboard with surviving the deadly conditions of its world.

On a scale from 1 - 10 you can set your pace from beginning to the end. The pace of games can be represented with a sine wave. Along with the pace of the story, the difficulty, learning the gameplay to improve the character’s skill set is important to entertaining the player and provide maximum enjoyment.

Implementation

Implementing your game from the concept requires a solid Game Design Document(GDD). While you want a great start through your GDD, it is an ever changing entity based on simple corrections to a total change in art or gameplay. The aforementioned depends on the use of an existing Intellectual Property(IP), related game engines such as Unity3D, Unreal, IDTech, CryEngine, or Fallout 4’s Creation Kit, or similar story type such as Saints Row, True Crime, Sleeping Dogs, Mafia, and InFamous respectively. For the this lesson we will chose two possible solution paths, one based on C# scripting through Unity3D and the second based on Blueprint visual scripting through Unreal Engine 4.

Choosing the game engine to solve your game mechanic needs is crucial to successful development of your game based on knowledge and skill of the designer, artists and programmer. The designer will need to know the strengths and weaknesses of the engine. Can the programmer fill in the necessary code to produce the game mechanics? Will the artist’s work look its best through shader and lighting implementation? Is there a strong audio component in the engine as well?

Once you chose a game engine based on your design concept needs see GDD, you will implement your first playable game objective using the major game mechanic.

Game flow through a procession of interconnected and harmonious gameplay elements. In many cases, the related elements stipulate the core meaning of the game. Once game mechanics have been defined and clarified, you can begin the level design process.

**Building a level before game mechanics is like building a race car before you know which track you’ll be driving or creating animation before the model.

Core Gameplay Elements(Mechanics)

Controller Scheme

Character controls

3rd Person perspective

Keyboard/Mouse and Joystick

NavMesh

Character Controls and Pathfinding Navigation

Unity3D provides a walkable surface to distinguish between other obstacles and provide additional options. By adding an “Agent” the character and AI (Non-Player Characters) are associated with the NavMesh and the walkable surfaces.

Windows -> AI -> Navigation and select areas you want to define walkable areas for your character by selecting all of the associated surfaces -> make Static Navigation -> Walkable Make all walls Static make Not Walkable. Do the same thing with all other objects accordingly.

Create character GameObject -> name it mPlayer -> Cube (temporarily) -> place at start area -> add NavMesh Agent component.

Navigation -> Bake Tab -> Bake button

Functionality (Character controller)

Windows -> General -> Asset Store(Ctrl +9)

User input:

Directional (analog stick, keyboard) - Mouse-Look / Analog-Look - Controller / keyboard Input

Move Player Script

using System.Collections;

using UnityEngine;

using UnityEngine.AI;

public class mPlayer : MonoBehaviour

{

    //Two(2) private variables

            private Vector3 dest; //3 axis movement toward the final destination

            private NavMeshAgent agent; //NavMeshAgent component attach to our mPlayer

    void Start()

    {

        //hide cursor

                Cursor.visible = false;

        //set so player is in its current position without moving

                dest = transform.position;

                agent = GetComponent<NavMeshAgent>();

    }

    void Update() {

        //update value of by retrieving current position which is the

        //right and forward movement

        //If right movement is negative mPlayer will move the left

        //If forward movement is negative mPlayer will move backwards

        dest = transform.position + Vector3.right * Input.GetAxis("Horizontal") +

        Vector3.forward* Input.GetAxis("Vertical");

        //getaxis horizontal wasd <-> left/right - getaxis vertical | up/down and left joystick  

                        agent.destination = dest;

    }

}

 

Add mPlayer script to NavMeshAgent

**Make sure model is facing the right direction**

Attach camera, fluid movement, and orbital camera control around mPlayer

Under Camera:

Add Component -> Smooth Follow

Camera ->

Target -> add Player from hierarchy

Height Damping = 1

Hierarchy: Camera -> GameObject -> Empty Child -> remove from Camera ->

Name it “cameraFollow” -> Make Camera a child of cameraFollow

Under cameraFollow Add Component -> Simple Mouse Rotator (Standard Unity Asset Script)

X = 0 no need for x rotation

Y = 1200 free movement around Y-Axis

Height = 9 or as needed

Rotation = 0,0,0

Set forward with camera:

Forward is current “world” forward and not through the camera

Add a public variable of type GameObject for cameraFollow

Replace Vector3.right which is a world coordinate and add cameraFollow.transform.right

Replace Vector3.forward and add cameraFollow.transform.forward

Attach cameraFollow to Character controller mPlayer (Script) “Drag from Hierarchy to mPlayer”

Camera Parent = cameraFollow

Update mouse look:

Edit -> Project Settings -> Input

Expand Axis -> duplicate Horizontal and Vertical for the Right Analog Joystick

Based on most games controls schemes, the left joystick controls movement and the right controls look

Duplicate the second Horizontal and Vertical respectively, rename and change the axis to the following:

HorizontalJoystickRt

4th Axis(Joysticks) = Xbox

VerticalJoystickRt

5th Axis(Joysticks) = Xbox

Open SimpleMouseRotator Script -> (Line 48) Adjust

inputH = CrossPlatformInputManager.GetAxis(“Mouse X”) + Input.GetAxis(“HorizontalJoystickRt”) * 05.f;

//* 0.5f dampens the movement due to sensitivity

//the horizontal values swap based on the use of the mouse or the right joystick of the controller

Core Game Mechanics

Create an EMP projectile for the FaxCopyScanner(FCS)

Create GameObject -> name it emp -> Add component -> effect -> particle effect ->

Duration = 1

Start Lifetime = 1

Start Speed = 1

Simulation Space = World //When it moves it leaves a trail

Emission -> Rate = 20

Shape = Sphere

Shape -> radius = .1

Color over Lifetime = transparency at beginning and end with a solid center - add color

Size over Lifetime = sine wave

Renderer -> Material -> ParticleGlow

                    Trail Material -> (Because Simulation Space is set to World, it supersedes this)  

Save as a prefab

Tag pEmp

Add component Script -> pEmp

Add component -> Physics -> Sphere Collider (radius .33)

Add Component -> Audio -> Audio Source

Create Script name it “sAttack

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class sAttack : MonoBehaviour {

        // Use this for initialization

        void Start () {

        }

                void Update() // Update is called once per frame {

                        if (Input.GetButtonDown("Fire1"))//unity3D default fire1 button{

        //needs an object and a position and rotation

            Instantiate (Resources.Load("pEmp"), transform.position, transform.rotation);

 }

    }

}

pEmp Script

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class pEmp : MonoBehaviour {

        // Use this for initialization

        void Start () {

        }

        // Update is called once per frame

        void Update () {

        /*move EMP over time in the forward direction

          deltaTime makes it framerate independent (*10 provides a level of speed)

          when EMP collides with eBot

        */

        transform.Translate(Vector3.forward * Time.deltaTime * 10);

       

    }

    void OnTriggerEnter(Collider other) {

            if(other.tag == "eBot") {

                Destroy(other.gameObject);

                Destroy(gameObject);

            }

    }

}

Player -> add script “sAttack

Attach Script to prefab EMP Add component -> pEMP

Add Sphere Collider to eEmp -> Enable “Is Trigger”

Add a Tag called Enemy and apply it to GameObject eBot (Enemy)

Add RigidBody to detect EMP collision

*Attach(add component) the to your mPlayer* name the file “Powerup”

Using UnityEngine;

Using System.Collections;

public class cPowerup : MonoBehaviour {

//declare private integer named cell which stores the number of batteries collected

private int cell;

//OnTriggerEnter function which checks if the character has collided with a battery

void OnTriggerEnter(Collider other) {

        //Be sure to add a tag to the Battery cell

        If (other.tag == “Battery”) {

//increasing battery count by one                

cell++;

//delete(destroy) cell from scene                

Destroy (other.gameObject);

        }

}

}

Add Rigidbody to your battery and turn off Use Gravity and Set to Is Trigger.

Collection indicator

  1. GameObject -> Create Empty -> name it “collectFx”
  2. Add an Audio Source -> add audio file

Add particle system -> choose Steam and make it a child of the collectFx -> change renderer -> select Firework -> change duration .5 and lifetime(change to constant) .5 -> change start color -> change start speed 5 -10 respectively -> color over lifetime alpha to make it solid over its lifetime -> turn off Looping allowing it to run once -> remove component Particle System Multiplier -> set Particle System Destroyer Min 1 Max 1

  1. In the cPowerup script after cell++; //where the pick up was not where the player is

      Instantiate(Resources.Load(“collectFx”), other.transform.position,other.transform.rotation);

        *Be sure to set Tag “Battery”*

**Move the Battery into the Resources folder in order to access it from the script**

        //where the pick up was not where the player is

     Instantiate(Resources.Load(“collectFx”), other.transform.position,other.transform.rotation);

Replace other.transform.rotation with Quaternion.Euler(90,0,0) which ates the object in question when dropped

Now add pick up effect when you collect the dropped battery

Instantiate(Scripts.Load(“collectFx”), other.transform.position,Quaternion.Euler(90,0,0));

Give more flare to your pick up by adding a light source and an animation component

Adjust to liking

Create new Empty child to battery cell -> Light -> adjust accordingly

Add rotation

Create an animation component -> Spin -> drag it onto battery cell -> open animation -> add property rotation -> add keyframe at from 0 and then scrub to 1:00 and add another keyframe and and set y = 360

Setting up triggers for enemy collision and exiting the level are in the following script based on the LoadScene number from the build screen.

SceneManager.LoadScene(0);

//The Zero represents the scene and what is loaded from the OnTriggerEnter event.

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public class uiWinLose : MonoBehaviour {

    private void OnTriggerEnter(Collider other)

    {

        if (other.tag == "kBot")

        {

            SceneManager.LoadScene(0);

        }

        if (other.tag == "eBot")

        {

            SceneManager.LoadScene(0);

        }

        if (other.tag == "escapeNow")

        {

            SceneManager.LoadScene(0);

        }

    }

    // Use this for initialization

    void Start () {

                

        }

        

        // Update is called once per frame

        void Update () {

                

        }

}