Art Game

This curriculum was originally designed for NMA3041 Baruch College, City University of New York, Fall 2018.

Course Description, Goals and Objectives

In this special topics course, students will create their own original Art Games: simple, conceptually based, and aesthetically beautiful interactive experiences. In this emerging form of new media arts, interactive narrative worlds are procedurally designed and developed by an artist and completed by the live input of players. Unlike commercial games that focus on entertainment, action, or combat, Art Games highlight interactive narratives and experiential scene design, emphasizing artistic expression, concept, and creative inquiry. Using the professional indie game development platform, Unity, students will learn fundamentals of computer programming, 3D modeling, character and scene design, cinematography, and performance. Projects may address system, agency, and negotiating the distance between self and other. Student projects created in Unity can be compatible with augmented reality (AR) and virtual reality (VR). No prior programming experience is needed.

Faculty Information 

Instructor: Zhenzhen Qi, Adjunct Assistant Professor, New Media Art Concentration, Department of Fine and Performing Arts

Email: zhenzhen.qi@baruch.cuny.edu

Office Hours: By appointment.

Course Time and Duration: 

Mondays 6:05 – 9:50PM

Aug/27/2018 – 12/21/2018

Classroom and NMA Computing Lab

All NMA students have priority to use NMA computing labs located at Newman Vertical Campus

Room 8-165(also our regular classroom) and Room 7-130 during open lab hours posted on the door. Warren Arthur is the technical director of the labs and can be reached via email (Warren.Arthur@baruch.cuny.edu). He can also be found inside the office space inside Room 7-130 as well. 

Textbooks

Due to the experimental nature of the course content, there is no designated textbook for this course. Instead, we will draw from the following sources for various aspect of this course. 

Media Theory reflections and discussions will draw from the following publication, which is put under reserve for our course, available at the circulation desk in the Baruch student library:

Manovich, L. (2001). The language of new media. Cambridge, Mass: MIT Press.  (Access book here: https://dss-edit.com/plu/Manovich-Lev_The_Language_of_the_New_Media.pdf )

Other recommended game design texts: 

Rules of Games (Access: https://drive.google.com/open?id=1wSjQcHcFmWhrjr0IYentNP9LRXXldSwG)

A Game Design Vocabulary(Access:  https://drive.google.com/open?id=1Deazri5_zHpl9xjIJMynw6y_G2DJazfU)

The hands-on lab portion of the course will draw from official Unity Learning resource page. All tutorials are accompanied with free downloadable game assets, as well as companion video tutorials allowing self-paced learning as well as topic revision. 

In addition, students with a strong preference to create web-based gaming experiences are encouraged to check out p5.js and p5.play

Additional Learning Resources

Lynda tutorials on Unity(You can gain free access to Lynda by registering for a free NYC public library card) 

Unity tutorial channel curated by Brakeys: https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA

Git Guide maintained by Harvard University: http://git.huit.harvard.edu/guide/  http://git.huit.harvard.edu/guide/files/git_cheat_sheet.pdf

Platforms that feature indie and art games:  https://itch.io/       https://store.steampowered.com/

Make games without writing any code: http://twinery.org/(for dialogue based game) https://unity3d.com/learn/tutorials/s/2d-game-kit (for simple 2d platformer)

Attendance

Participation in class is required. Irregular attendance not only hurts a student’s coursework, but it weakens the class as a whole and is not permitted. Since this course has frequent in-class coding exercise, missing class will also affect your progress in the course. Attendance is recorded prior to every lecture, and students with excessive absences will be officially dropped from the course in accordance with College rules. Arriving late interferes with other students’ learning and is not acceptable. Repeated Late attendance will be counted absent. All cellphones and other electronic devices are encouraged for the purpose of looking up references and note taking during lecture. From time to time, you will also be asked to go on the computer to experience certain web based interactive artwork as well. 

Projects

Two projects and one final project will be assigned. All students are required to present their projects to the rest of the class, articulating the conceptual, aesthetic as well as technical aspect of the assignment. All projects can be done as group projects as well as individual projects. 

For each project, there will be a total of 5 parts to your documentation. Please see below for ideas about what to put on for each section. Don’t worry too much about making the blog look nice and coherent. Use it as a place to brainstorm, gather inspiration, thoughts and research all into one place. 

An artist presentation blog will be published 1 week prior to your presentation. Use it as an opportunity to review suggested textbooks on New Media Art and Game Design. Pick at least one chapter from the Language of New Media book and one chapter from the Game Design book. Paraphrase the chapters in your own language, and then connecting them to the game you are presenting, articulating the aesthetics and game design of artwork/game of your choice. 

Project Documentation Guide

Summary:

Dream about one day you become a famous new media artist and your project is written by an art curator on the Art section of New York Times. Try to provide a concise overview about the overall concept of your project. 

Inspiration:

Be personal. Think about a feeling you had, a relationship, a question that always confuses you yet you wish to learn more about. Include some visual reference here – concept maps, images, sound, gifs, artists websites, your favorite novelists or movies or comic books, the more the merrier.

Research:

Use this section to document more technical references. A creative technologist who have accomplished a similar project, a software you want to try, some tutorial that might be helpful to go over at some point. 

Process:

What experiments have you tried so far? What did you like and not like about them? What are the next steps you might want to take to further develop your project? Include screencaps of what you have done so far in this section, and list out a few more steps for further action. 

Visual Documentation:

Depending on the nature of your project, documentation can take on the form of Images, Screencaptures, Gifs, Short demo videos, Infographics, or any form that helps an audience who is hearing about your project the first time to understand it, both artistically as well as conceptually and technically.  

When you are done, don’t forget to pick a name and header image for your project (the header image doesn’t have to be yours, just something that helps you feel inspired). If it helps, try to think of writing this blog as paraphrasing the following paragraph into a project proposal and add images/references wherever you see fit. 

As an art game developer/new media artist/computational artist, software artist, I am interested in using creative technology to explore/research/investigate_________________. I became interested in this topic when___________________. I would like my audience (students) to interact with this piece by________________. I would like them to feel__________________. Technically, I think these are the steps needed to test my concept: __________________. I have researched into a few similar projects, such as _________________(provide visual references). I think in the next few weeks, I would like to use the class time to find out how to________________. Visually, I would like my piece to look like ________________(provide visual references). 

Feel free to alter any of the above format to help you find your voice, identity and creative process. The main objective is to use this writing space to establish a process where you can use repeatedly to bring together artistic and technical inspiration, for the purpose of appropriating your own authentic voice with tangible shapes and forms. 

Grades

Final grades will be calculated based on the following formula:

  • Participation, attendance, contribution to class environment 30%
  • Project One 20%
  • Project Two 20%
  • Final Project, Presentation and Documentation 30%

Video Game Community Reference

IndieCade or Indiecade is an international juried festival of independent games. IndieCade is known as “the video game industry’s Sundance.” IndieCade supports independent game development and organizes a series of international events showcasing the future of independent games. It encourages, publicizes, and cultivates innovation and artistry in interactive media, helping to create a public perception of games as rich, diverse, artistic, and culturally significant. 

Babycastles is an indie game collective with roots in New York’s D.I.Y. culture dedicated to building platforms for diversity in video games culture at every level. It connects the independent game developer community with the broader New York art community, identifying exciting new voices in game creation from around the world and providing them exposure to new audiences. 

Games For Change empowers game creators and social innovators to drive real-world change using games and technology that help people to learn, improve their communities, and contribute to make the world a better place. 

NYU Game Center Lecture Series has brought some of the most interesting game designers, academics, and critics to New York City to share their unique approach to games. Talks have ranged from panels on journalism, to in-depth discussions of design decisions, to making money as an independent designer. The Lecture Series has become a staple of the New York game scene, and the packed talks have become a monthly raison d’etre for gamemakers to come together and learn, discuss, and play. There is also a free playtesting night every Thursday night at 5pm. 

Code Liberation has only one simple mission: teach women, nonbinary, femme, and girl-identifying people to program using creativity as a pedagogical approach. Its  aim is to reach women that have never considered entering into the field of computer science or who have left it because it is male dominated. 

Game Devs of Color expo is open to people of all genders, races, abilities, sexual orientations, and religions. We are committed to ensuring that this event is inclusive to all. For example, the venue is wheelchair accessible, live captions will be displayed for all talks and presentations, and gender-neutral restrooms will be available.

Death by Audio Arcade is a series of local multiplayer arcade cabinets produced by local indie game developers that originate from Death By Audio, Brooklyn’s influential DIY music venue. Though located in New York City, it does not have a permanent home for our collection of cabinets. Most exist at various music venues, art galleries, breweries, and certain companies with available space.

Come Out and Play is an annual festival of street games that turns New York City & San Francisco into a giant playground. It provides a forum for new types of public games and play by bringing together players eager to interact with the world around them and designers producing innovative new games and experiences.

Video Game Reference

Strategy: 

Tharsis, a mysterious signal originating from the Tharsis region of Mars set us on a frantic mission. Who sent it? And why? Impossible questions, but in them lie the key to humanity’s survival.

Puzzle:

Monument Valley I, II, player-character princes Ida journeys through mazes of optical illusions and impossible objects, which are referred to as “sacred geometry” in-game, as she journeys to be forgiven for something.

Interactive Animation: 

Plug and Play, an interactive animation drawn by Michael Frei and coded by Mario von Rickenbach. An unashamedly surreal play with plugs. Run, hit, switch, fall, love, plug, pull. And push.

Adventure: 

Firewatch is an adventure game played from a first-person view that takes place in the American state of Wyoming in 1989. Players take on the role of Henry, a fire lookout who is assigned to his own tower in Shoshone National Forest. Henry’s only means of communication is a walkie-talkie connecting him to his supervisor, Delilah. 

Platform: 

Limbo is a puzzle platform game developed by independent game studio Playdead.  The primary character in Limbo is a nameless boy, who awakens in the middle of a forest on the “edge of hell” (the game’s title is taken from the Latin limbus, meaning “edge”). While seeking his missing sister, he encounters only a few human characters who either attack him, run away, or are dead.

Inside is a puzzle platformer. The player character is an unnamed boy who explores a surreal environment presented as a monochromatic 2.5D platform game. The game is dark, with color used sparingly to highlight parts of the environment, and mostly silent, with occasional musical cues. The player controls the boy who walks, runs, swims, climbs, and uses objects to overcome obstacles and progress in the game. 

Action: 

Katamari Damacy deals with the aftermath of the planet-sized King of All Cosmos’ binge drinking spree that wiped out all the stars and other celestial bodies from the sky. The King (who appears to be chronically dissatisfied with his 5-cm-tall son’s small size) charges the Prince to go to Earth with a “katamari”—a magical ball that allows anything smaller than it to stick to it and make it grow—and collect enough material for him to recreate the stars and constellations.

The Last of Us is a survival horror action-adventure game developed by Naughty Dog and published by Sony Computer Entertainment. Players control Joel, a smuggler tasked with escorting a teenage girl named Ellie across a post-apocalyptic United States. 

Role-Play: 

Dark Souls is an action role-playing game developed by FromSoftware and published by Namco Bandai Games. Dark Souls takes place in the fictional kingdom of Lordran, where players assume the role of a cursed undead character who begins a pilgrimage to discover the fate of their kind. A significant aspect of Dark Souls is the “humanity” system. There are two “forms” the player character can be in during the game, human form and hollow form. Whenever the player dies in human form, they are returned to hollow form and can only have their humanity restored by consuming an item (also called a “humanity”). In order to gain the assistance of other players, the player must be in human form. While in human form, the player is subjected to invasions by other players and non-player characters (NPC) who seek to kill the player and restore their own humanity.

Simulation:

Everything is a simulation game where the player has the ability to explore a procedurally generated universe and control various objects within it. The player starts as one of several possible creatures and has the ability to move around. Initially, the player can shift their control to any creature or object smaller than the current one they occupy; this shifts the scale of the game to reflect this. Eventually the player can only shift into smaller and smaller parts of matter, down to the sub-atomic level, after which the game then allows the player to shift to larger objects as well. From this point, the player can take forms that include landmasses, planets, and whole star systems. As the player moves and shifts forms, they will find other creatures or objects speaking to them.

Interactive Zine:

Dys4ia” is an abstract, autobiographical Adobe Flash video game that Anna Anthropy, also known as Auntie Pixelante, developed to recount her experiences of gender dysphoria and hormone replacement therapy. The game was originally published in Newgrounds but was removed by Anna so that she could sell it elsewhere. 

“Everything is going to be OK” is a desktop labyrinth of vignettes, poetry, strange fever dream games, and broken digital spaces. It is a collection of life experiences that are largely a commentary on struggle, survival, and coping with the aftermath of surviving bad things. The game developer Nathalie Lawhead writes, “On the surface it comes off as dark comedy, and humor is a prevalent theme, but as you interact the themes start to unravel and facilitate, what I hope to be, a deeper discussion about these topics.”

New Media Art Reference 

Art Game entry in Wikipedia provides historical evolution of the term Art Game. 

Browse through Video Game, Art Game, and New Media Art entries in Wikipedia to gain a basic understanding of the evolution of video game and new media art, and the emerging new space of Art Game that straddles the divide between Play and Aesthetics. 

Prix Ars Electronica is a major electronic art award, incorporated in Linz, Austria. 

Bitforms Gallery, The New Museum, MomaPS1, Postmasters Gallery, The Knockdown Center, Pioneer Works, Flux Factory, Transfer Gallery, CutureHub, AC Institute frequently feature career artists who work with digital and computational media. 

Blogs like Rhizome, Hyperallergic, Creators, Creative Applications, Motherboard frequently feature projects that fall within the space between Art, Play and Technology. 

New Media Artist Reference

Below is a list of New Media Artists who frequently use code and digital technology in their artistic practice.

Generative Art: Casey Reas, Raven Kwok, Axis Gan, Shizheng, Ololade Adeniyi 

NetArt: exonemo, aaaajiao 

Software Art: Mary Flanagan 

Performing Art: Jacolby Satterwhite 

Glitch Art: Rosa Menkman 

Interaction Art and Design: Zach Libberman  

Simulation Art: Ian Cheng, John Gerrard, Theo Trantafyllidis, Stephanie Dinkins

3D Animation: David O’reilly, Sondra Perry 

3D Scanning: Ziv Schneider, Rosalie Yu  

Bio Art:  Heather Dewy-Haborg, Zach Blaz 

Robotics: Bill Vorn 

Web Game: Mollenindustria  

Gif Art: Carla Gannis, Lorna Mills

AI Art: Lauren McCarthy

Weekly Class Schedule

Depending on the progress of the class, the weekly assignment is subject to change. I will post more detailed assignment requirement after each week’s lesson in the Weekly Notes section. 


DateLectureHomeworkPresentation Sign Up
1 8/27/2018Introduction to indie game and its relationship to new media art.Review Syllabus. Finish Roll-A-Ball tutorial. Blog about final project idea.n/a

9/3/2018college closed

29/5/2018(Wednesday)Exhibition Viewing at NMAspace. Environment setup. Player Character. Camera Setup. Finish NMAspace reading for Fall 2018 visiting artist and write a 500 word reflection. Browse Unity Asset Store. Personalize your procedural world setupZhenzhen

9/10/2018No class scheduled

39/17/2018Exhibition viewing at NMAspace. Creating Enemy AI.  Health HUD.Program enemy behaviorNo Love Lost curator artist talk
49/24/2018Player Health. Harming Enemy.Program simple controller behaviorPresentation Postponed
510/1/2018Spawning Enemies. Game End Mechanics. Finish a simple 3D walking simulation game.John-Paul – No Man’s Sky,Daphnelly – Tearaway, Taishi

10/8/2018College is closed

610/15/2018Project One Presentation. ThingThingThing workshop ISet up your own 2D gaming environmentJose Daniel BenitezGame: Spyro
710/22/2018ThingThingThing workshop II/Shader Lab IDesign stage of progression for your game narrativeJasmine Law 
810/29/2018Shader Lab II/Procedural ScriptingObject behavior scriptingMaya: ISLANDS
911/5/2018Level Transition. Sound Manager.Transition between two scenes.Adriana
Fatima
1011/12/2018Generative art with Unity, setup and visual programmingSet up an aesthetic-driven, abstract narrative

Alex Pitre
1111/19/2018Project two presentation. Generative art with Unity, scriptingGenerative aesthetic scripting
1211/26/2018Interactivity workshop one: VR integration/Final Project WorkshopInteractivity prototypingNatalie Rice: Night in the Woods
1312/3/2018Interactivity workshop two: xbox kinect and body motion integration/Final Project WorkshopInteractivity prototypingJoyce: Stanley Parable
1412/10/2018Final Project Workshop Finalize visual documentation
1512/17/2018Final PresentationFeel free to bring snack, wine, invite family and friends.N/A

Student Project Blogs:

Daphnelly Delacruz https://daphnellydelacruz.wordpress.com/ 

Fatima Daniel https://blogs.baruch.cuny.edu/laidbytima/

Maya Hilbert https://zenaleus.wordpress.com/

Joyce Huang https://blogs.baruch.cuny.edu/joycehuang/ 
https://github.com/petitchoux

Jason Jiggetts https://blogs.baruch.cuny.edu/jasonjiggetts/

Natalie Rice https://blogs.baruch.cuny.edu/natalierice/ 

John-Paul Pelletier https://goodjohnpaul.com/blog/

Adriana Rojas https://blogs.baruch.cuny.edu/adrianarojas/

TAISHI ISHIDA http://35.165.36.112/game/

John Penafiel https://blogs.baruch.cuny.edu/jp1441/

Jose Daniel Benitez: https://blogs.baruch.cuny.edu/jocosebenvideogameart/

Alex Pitre https://blogs.baruch.cuny.edu/alexp 

Jasmine Law: https://aquamorane.wixsite.com/jasminewlaw

Weekly Notes


Week 1 – 8/27/2018

Class Introduction. Course introduction and Syllabus review. 

Critique – Games, Game Communities and New Media Artists. 

Homework

  1. Review Syllabus, video game, game community and New Media Artist reference. 
  2. Sign up for artist presentation. 
  3. Skim through artist reference from NMA Fall 2018 artist pick list: http://www.newmediartspace.info/artistpicks.php?artist=Andrew%20Demirjian 
  4. Post class blog address
  5. Roll-A-Ball Tutorial (no prior computational art experience) or Presentation Blog (with prior computational art experience). 

Week 2 – 9/5/2018 (Wednesday) 


Basic Game Setup and Scripting review 

Critique – The Language of New Media, Dark Souls

In-class lab: 

Survival shooter: Environment setup. Player Character. Camera Setup. 

Github demo. Free lap time. 

Homework: 

Gallery Visit. Please visit No Love Lost exhibition before our next class meets on September 17th. 

Planning for your first project (Due October 15th)

  1. Start a blog page to collect inspirations for your first project.  Refer to Project Documentation Guide section of the Syllabus for reference. 
  2. Based on what you are interested to work at we have learned so far, find some asset with in the asset store: 
    1. Go to Unity Asset Store
    2. Click on Drop Down Manual to the left of search bar. Set it from “All Assets” to “Environment”
    3. Click “Sort by” option and set it to “price”
    4. You should see a list of free environment assets showing up at the top of the search, that you can download and use in your own project
    5. Download assets that contributes to the concepts described in your blog. See this tutorial for reference: 
    6. How to use Standard Assets in Unity
    7. How to use imported Assets in Unity
  3. Adjust relative location of your assets to set up an environment that expresses the theme mentioned in your blog write up. 
  4. Set up your player character
    1. Go to Unity Asset Store
    2. Click on Drop Down Manual to the left of search bar. Set it from “All Assets” to “character”
    3. Click “Sort by” option and set it to “price”
    4. You should see a list of free character assets showing up at the top of the search, that you can download and use in your own project
    5. Pick one that’s most suitable for the concept of your project and click import
    6. Refer to rollABall or Survival Shooter “Player Character” section to set up your own character player.
  5. Set up camera by referring to rollABall or Survivor Shooter tutorial. 
  6. Save your project in a USB drive(or push to Github if you already use it), and prepare to present it in class when we come back on September 17th. 

Suggested Reading: 

http://rhizome.org/editorial/2013/mar/28/artifacts/


Week 3 – 9/17/2018

Artist Talk: William Lee

William Lee is a New York-based artist. His works integrate mechanics developed by activating material conditions and sabotaging prefabricated structures in order to articulate a technological art, which is capable of rendering intelligible the convergence of identity politics and the history of technology. He is influenced by techniques and discourses in game-design, comic books, animation, biosemiotics, abstraction, cybernetics, and computer art.

Student Artist Talks: TBD

Sample student final project critique: 

Sarah Rothberg: Memory/Place 

Richard Amin: Triple Threat 

Homework: 

Project One prototyping: Adding Obstacles / simple interactions similar to inClass lab exercise. 

Helpful Resources:

Navigating Unity Interface: https://unity3d.com/learn/tutorials/topics/interface-essentials 

Understand simple code logic: https://unity3d.com/learn/tutorials/s/scripting

3D player physics: https://unity3d.com/learn/tutorials/s/physics

Visual Art in Unity: https://unity3d.com/learn/tutorials/s/unity-artists

In-class lab: 

Survival shooter: Player Character. Camera Setup. Enemy AI system setup. 

Github demo. Free lab time. 

Github App file management

  1. Open Github Desktop app installed from previous step on your computer, sign into the account you just created on github.com
  2. Click button on the left called “create new repository”
  3. Type in the EXACT SAME folder name into Name input field, and click “Choose…” button to choose a local Path up until the parent directory of your project folder path. 

For example: to host a project under /Users/Zhenzhen/Documents/webResume, the following selections should be made

  1. Click “Create Repository” button
  2. Click “history” tab to verify that all your files have been committed, and a new file called .git attributes is also automatically added
  3. Click “Publish repository” button on top right, and make sure the above option is unchecked.  
  4. Press “Publish Repository” button(blue). 
  5. Go to your github online account to verify that repository has been successfully created, and all files uploaded into the repository.
  6. When at a major development milestone, go back to github app, type in commit code, and press “commit to master”, and press “push origin” button to push new code to github
  7. To publish your project to the world wide web, got to online github account repository, click “settings” tab on to right, scroll down to “Github Pages” section, select “master branch” from the dropdown menu, and click “save”. A web url will now appear, telling you where your project is hosted on the internet. 

Linux install for windows user

Download GitBash at https://git-scm.com/downloads

inClass Lab:

Player rotation

  1. Locate Floor object.
  2. Delete mesh renderer
  3. Add mesh collider 
  4. Mark as layer “floor”
  5. In PlayerMovement.cs, add rotation function
void Turning ()

    {

        // Create a ray from the mouse cursor on screen in the direction of the camera.

        Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition);

        // Create a RaycastHit variable to store information about what was hit by the ray.

        RaycastHit floorHit;

        // Perform the raycast and if it hits something on the floor layer...

        if(Physics.Raycast (camRay, out floorHit, camRayLength, floorMask))

        {

            // Create a vector from the player to the point on the floor the raycast from the mouse hit.

            Vector3 playerToMouse = floorHit.point - transform.position;

            // Ensure the vector is entirely along the floor plane.

            playerToMouse.y = 0f;

            // Create a quaternion (rotation) based on looking down the vector from the player to the mouse.

            Quaternion newRotation = Quaternion.LookRotation (playerToMouse);

            // Set the player's rotation to this new rotation.

            playerRigidbody.MoveRotation (newRotation);

        }

    }

Camera Setup

  1. position to (1, 15, -22)
  2. rotation to (30,0,0)
  3. Background to Black
  4. Projection to Orthographic
  5. Size to 4.5
  6. Add code CameraFollow.cs

Player Collision

  1. Select Player Object
  2. Add a capsule collider component
  3. so we make sure that the capsule covers the player.
    1. Centre to 0.2 in the X
    2. 0.6 in Y
    3. Z as 0
    4. Height to 1.2

Question: What component is enabling the player to collide with obstacles?

Enemy AI

  1. Go to Models⇒ Characters⇒ Zombunny, drag into scene
  2. Go to prefabs⇒ HitParticles⇒ drag onto Zombunny
  3. Press Play on HitParticle’s particle effect to observe
  4. Go to Zombunny parent layer, and select Layer as “9.shootable”. Say yes, change Children as well
  1. Add rigid body to Zombunny
  2. drag an angular drag should be set to infinity
  3. Freeze position Y, rotation X, Z
  4. Add capsule collider
    1. Centre value of Y 0.8
    2. Height 1.5
  1. Add another sphere collider, and click “is trigger”. This will be used to send a signal when enemy collide with player.
    1. Center Y 0.8
    2. Radius 0.8
  2. We want the sphere collider to be slightly larger than capsule collider so enemy detect player before actually bumping into it.
  1. Add audio source component and choose sound clip “Zombunny hurt”. Deselect “play on awake”.
  2. Now we are going to introduce a very simple AI pathfinding system. Choose Window⇒ Navigation to dock the navigation system.
  3. Back to zombunny, add component “nav mesh agent”:
    1. Speed to 3
    2. Stopping distance to 1.3 (stop about one body’s length when in front of obstacle)
    3. Height 1.1
    4. Radius 0.3
  4. Switch back to the Navigation window we opened, and click “Bake”.
    1. Radius 0.75 (balance between three types of AIs)
    2. Height 1.2 (balance between three types of AIs)
    3. Hit Bake
  1. Check that on a blue area, grey walk paths have been generated for the AI.
  1. Create animator controller for enemy AI.
  1. Go to scripts⇒ enemy ⇒ EnemyMovement.cs, and drag it onto ZomBunny
  2. Notice how we are finding player through Tag. So make sure to tag our player object “player”

Week 4

Project Critique

inClass Lab: see note from last week

Linux 

  1. Go to spotlight, type “terminal”
  2. Type “pwd” to check current directory 
  3. cd Documents/unityProjectFolder
  4. Go to your github website and create a new repository
  5. github command line
    1. Git add –all
    2. Git commit  -m “XXXXXX”
    3. Git push origin master

Homework:

Try out Nav Mesh Agent system in your project. Implement a trigger into your project. 

Continue to expand on project one, and work on documentation blog. 

Watch gameplay scripting tutorials

https://unity3d.com/learn/tutorials/s/scripting

Beginner students: 1-7

Experienced students: 15-22

Readings: 

Pick three readings and three videos from the link below recommended by artist Andrew Demirjian. 

http://www.newmediartspace.info/artistpicks.php

We will meet at the circulation desk at library to view Andrew Demirjian’s exhibition at 6:05pm next week. 


Week 5

Announcement: 

  1. No class next week. 
  2. Discuss time and location for jamming session on next Monday. 
  3. Publishing github account

Critique:  

  1. Andrew Demirjian exhibition tour at NMAspace in Baruch Library. 
  2. Andrew Demirjian exhibition discussion lead by Maya. 

Student Presentations:

  1. JP: https://goodjohnpaul.com/2018/09/29/no-mans-sky/
  2. Nelly:  https://daphnellydelacruz.wordpress.com/2018/09/28/tearaway-the-4th-wall/

inClass Lab: 

https://github.com/zhenzhenqi/survivalShooter_student

Make Prefabs, instantiate and invoke it (auto spawn enemies)

  1. In prefabs folder, make new prefab
  2. Drag root zombunny model from scene to new prefab
  3. Note how it creates a blue cube without the white scripting icon on the lower right corner. 
  4. If you go back to the Zombunny in the scene, you will also notice that the inspector for Zombunny showed prefab with Apply button. 
  1. Add a PlayerHealth.cs script to Player, with the following code:
    1. https://github.com/zhenzhenqi/survivalShooter_student/blob/master/Assets/Scripts/Player/PlayerHealth.cs
  2. Add a new game object called SpawnPoint and place it somewhere in the scene
  3. Add a new game object called EnemyManager. Create a script called EnemyManager.cs and add the following code: 
    1. https://github.com/zhenzhenqi/survivalShooter_student/blob/master/Assets/Scripts/Managers/EnemyManager.cs
  4. Go to EnemyManager inspector, and drag in the player, zombunny prefab and the spawn point.

Game Over

  1. In PlayerHealth.cs script, add the following function at the very end of the script:
    1.  public void RestartLevel ()
    2.         {
    3.             // Reload the level that is currently loaded.
    4.             SceneManager.L                                                                                                            
    5.         }
  2. Go to Unity ⇒ File ⇒ Add Open Scenes, and add the current scene as scene 0
  3. Go to PlayerAC component on Player object, and double click Death node to bring up the Death animation clip. 
  4. Go to Events section, right click towards the end of the bar, and select add new event.
  5. Change the function name from NewEvent(default) to RestartLevel. 
  6. Click Apply.
  7. Now, at the end of Player’s Death animation, the entire game will be loaded again.

Cloud Hosting

  1. Go to Unity⇒ file==>build settings ⇒ webGL
  2. Make sure current scene is added and selected
  3. Click “build button”
  1. Publish the finished project folder on github, under a new repository
  2. Go to github repository⇒ settings ⇒ github pages section.
  3. Click on the “source” dropdown menu and switch it to “master branch”
  4. View the web version of your game at the web URL mentioned above. 

Homework: 

  1. Finalizing Project One – 3D walking simulation game, and documentation blog. 
    1. Beginner students: think of it as an opportunity to play and explore. Get familiar with Unity interface and incorporate it into your own artistic process. Focus on 3D scene design. Scripting is welcome, but not mandatory
    2. Experienced students: Try to gain a more intimate understanding on Camera, Player, Enemy, Trigger, Scene Management. In your blog, reflect critically on the language of new media, the conceptual significance of game as simulated reality, and its personal significance to you. 
  2. Publish game to github and host on world wide web. 
  3. Make a 1 minute screen capture of game walk-through and include it in the documentation section of your blog. 
  4. Watch gameplay scripting tutorials: https://unity3d.com/learn/tutorials/s/scripting
    1. Beginner students: 8-15
    2. Experienced students: 23-28

Week 7

ThingThingThing workshop I

https://docs.google.com/document/d/18rqBA01xjrEOiLuYqoa7b_HeCmha066y6eLI37iUFIA/edit

Homework: 

  1. Setup Github fork, local clone. Build a simple avatar and commit to your local directory
  2. Group 2 prepare to present your Project One for next week
  3. Keep developing project one on your own, especially you are interested to present it as your final project

Week 8

Setting up ThingThingThing in your own co mputer:

edit⇒ project settings ⇒ input ⇒ JoyStockRight⇒ Axis⇒ dropdown menu⇒ select “4th axis”

Type “git pull upstream master” into terminal to get the latest upstream update for the github repo.

ThingThingThing workshop II

https://docs.google.com/document/d/18rqBA01xjrEOiLuYqoa7b_HeCmha066y6eLI37iUFIA/edit

Homework: 

  1. Finalize ThingThingThing avatar. Use it as an opportunity to revisit basic component of 3D character creation in Unity: model, texture, shader, position, rotation, scale, animator controller, transition, collider, navigation etc. 
  2. Follow ThingThingThingworkshop note to add, commit, and push your avatar.
  3. Submit a pull request to the original remote repo(ZZYW/ThingThingThing) by clicking the “New Pull Request” button.
  1. Keep developing your personal project. 

Unity shader lab

Shader workshop

  1. Go to your own folder. Create new shader under “unlit”. For example, shader “unlit/shroom”.
  2. Drag it onto your own material.
  3. Drag your own material onto a new prefab in the scene.
  4. Note that in the first line, “Unlit” is the shader category, and Shroom is the shader name
  5. shaderScroll down to the bottom of shader
  1. This is the function that runs once for every single pixel that gets rendered in each frame on your screen. For example, a 1920 x 1080 screen would call this function 2073600 times per frame.
  2. Now, let’s try out writing some simple shader effects: https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
  3. Pick one of the warriors from the ThingGallery and set it up. Script the simple, unicolor, and world position based shader effect and observe its changes. See example below for warrior 10’s world position based shader.
 Shader "Unlit/shroom"

{

    Properties

    {

        //Color property for material inspector, default to white

        _Color ("Main Color", Color) = (1, 1, 1, 1)

    }

    SubShader

    {

        Pass

        {

            CGPROGRAM

            #pragma vertex vert

            #pragma fragment frag

            //vertex shader

            //get clip position of 3d model's vertex

            float4 vert (float4 vertex : POSITION) : SV_POSITION

            {

                return mul(UNITY_MATRIX_MVP, vertex);

            }

            //define a single color for the material

            fixed4 _Color;

            //define pixel shader without input needed

            fixed4 frag():SV_Target

            {

                return _Color;

            }

            ENDCG

        }

    }

}
  1. See example below for skybox reflection example effect:
  2. See example below for skybox reflection incorporating normal map:
skybox reflection example effect
incorporating normal map

Conclusion:

  • Struct v2f is a data structure that is used to hold certain information for every single pixel that will get rendered on your screen, such as world position, world rotation, normal map, texture coordinate etc.
  • v2f vert( ) function is responsible for populating the location related information of v2f
  • Finally, fixed4 frag( ), like we talked about in the beginning of the workshop, is responsible for populating the r, g, b and alpha information of each pixel on the screen.
  • The struct and vert() are optional. But frag() is a mandatory part of every shader script. Without it, pixels cannot get rendered on the screen.

Generative Aesthetics Workshop I: 

Download Assets, Scripts and notes from here

https://github.com/ZZYW/prism_unity/tree/inClass

Homework: 

  1. Bring 5 short wav or mp4 files for next week
  2. Create custom shaders to existing assets under Cubes
    1. For organization purpose, consider saving your custom shader code inside Shader folder
    2. All materials are stored inside materials folder

Sample Vertex and fragment shader tutorial from last week

https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html