Dev Blog

Mar. 4th, 2018

Research for DIGM 540

Designing for Transformative Play by: Jon Back, Elena Marquez Segura, and Annika Waern

This paper could serve as a very useful base behind my current project for designing editable physical engineering mechanisms within the Unity game engine. I could use this idea along with my toy to look into creating a more open, user defined play area. This paper focuses on play designed in an open way.

Some Important Key Words:
  1. Human-Computer Interaction (HCI)
  2. Human-Centered Computing
  3. Interaction Design
  4. Interaction Design Theory
  5. Explorative Play
  6. Creative Play
  7. Transformative Play
Further Topics to Look Into:
  1. Ludic Design by Gaver et al.
  2. Stenros Thesis on foundational theory of play

Current Progress of Research Paper

Link to Google Doc of Paper Information

March 2nd. 2018

Talks on Game Design

SINFO, March 1st, 2018 – Greg “Ghostcrawler” Street from Riot Games – 20 Things I Learned in Twenty Years of Making Games

Talk on his career path as a game designer, and good ways to advance yourself as a game designer. Same key points are: Make things good enough, not perfect (consider diminishing returns); you will change jobs a lot; games ship when you run out of money; have goals and iterate; making a team is harder than making a game; as a game designer, not smarter than players (all people informed on game); empathy. Emphasize importance of varied types of people on teams producing elements of game (combine programmer, artist, designer, etc.)

Difference between Blizzard and Ensemble companies – Iteration. Ensemble: create something, put it in game, test. This worked but was a bit inefficient. Blizzard: Ideas must go through a lot of thought and people before even being created, which means most things created in game are going to be higher quality, which results in a more efficient process.

    How to get into game industry?

  • You have to stand out
  • You have to prove your passion
  • The best way is to make something

Compromise with feedback, take something from beginning to end, kill your babies, understand diminishing returns. Rather see someone finish things than start a bunch of things. See someone push through with changes and edits to finish something than just giving up (shows endurance, will to push through for end product).

Bennet Foddy – Bend Physics to your Will

Feb. 28th, 2018

Research for DIGM 540

  1. Predictive Physics Simulation in Game Mechanics by: Perttu Hämäläinen, Xiaoxiao Ma, Jari Takatalo, Julian Togelius
  2. Interactive Control For Physically-Based Animation by: Joseph Laszlo, Michiel van de Panne, and Eugene Fiume

Other Interesting Topics Encountered

  1. The lack of research in soft bodies (as opposed to rigid bodies) in the physics engines of games.

    Covered in: Unifying Rigid and Soft Bodies Representation: The Sulfur Physics Engine by DarioMaggiorini, Laura Anna Ripamonti, and Federico Sauro

Feb. 27th, 2018

Scripting Enemies to Check Distance for Ranged Attacks – Unity

Scripting is Fun – Unity 2D Game Basics – Enemy AI – Ranged Attack – Youtube Video

This video shows the basic setup for allowing an enemy in a 2D game to rotate, locate player with raycasting and distance tracking, and fire projectiles in the proper direction.

Unity Manuals – Layers

This is placed here for the use of layer masks to control raycasts. Layer masks allow the user to either ignore specific layers with their raycasts, or specifically target layers. This was searched because I had an issue where raycasts where colliding with the object itself and/or the parent object, both of which have colliders.

Feb, 25th, 2018

DIGM 540 Project – Resources

  1. Basic Mesh Scripting Tool Description for Unity
  2. Creating Basic Billboard Mesh Through Unity Scripting
    Shows how to create a vertex array, set these into triangles, and create a full mesh.

  3. More Help for Procedural Generation of Mesh

This shows that it is possible to create/modify meshes within Unity using scripting.

Project Direction – Create Script in Unity that Will Take User Inputs to Instantiate a Gear Model Based on Said Parameters

This may be possible through the general use of the Mesh class in Unity scripting. Something along the lines of creating a set of vertices for the central body (some smoothness level of cylinder), then creating a gear tooth mesh that can be multiplied and geometrically positioned around the central core body mesh created.

Bump Mapping

Normal Maps from Unity

“Normal Maps and Height Maps are both types of Bump Map. They both contain data for representing apparent detail on the surface of simpler polygonal meshes, but they each store that data in a different way. A height map is a simple black and white texture, where each pixel represents the amount that point on the surface should appear to be raised. The whiter the pixel colour, the higher the area appears to be raised.

A normal map is an RGB texture, where each pixel represents the difference in direction the surface should appear to be facing, relative to its un-modified surface normal. These textures tend to have a bluey-purple tinge, because of the way the vector is stored in the RGB values.”

Displacement Maps

Unity Displacment Maps and Tesselation

Tri Setup to Create Mesh for Gear Segments

DIGM530 – Coral Invasion – Sources

Unity – Making 2D Sprite Flash Upon Taking Damage

Make A Sprite Flash? – From Unity

    From gilad905 in this post:
  • Create an animation controller state machine and an animation clip for the flashing state, just like creating a normal animation state.
  • If you want to mix the flashing with another animation (e.g flash while walking), create a new animation layer in the animator and do all below in the new layer. In the new layer’s configuration, make sure it’s set to Blending: Additive (so it won’t override the base layer) and that its weight is set to 1.
  • Enter the animation view (Window -> Animation), chose the wanted GameObject and the empty animation clip you just created. If any properties are already attached to the clip, remove them.
  • Click ‘Add Property’ -> Sprite Renderer -> Enabled -> the ‘+’ icon near it. Using this, you make the object flash by turning SpriteRenderer.Enabled on and off. But for a different effect than flashing, you can use any other property here.
  • In the ‘Samples’ box, write 2 (you only need two samples). The timeline should have a key at 0:0 and another key at 1:0. Insert a new key at 0:1. Make sure that at 0:0 SprireRenderer.Enabled is checked, and on 0:1 it is unchecked.
  • The GameObject should now flash when this state is activated by the animator.

    Unity – Setting Up Animator

    • Followed above instructions to create a basic flashing animation in Unity where the sprite renderer turns off/on once, called TakingDamage
    • Created a second animation just titled IdleCoral, where literally nothing happens
    • Opened the Animator window in Unity
    • Here, I placed my two animations, IdleCoral and TakingDamage
    • Created a link from Entry to IdleCoral, then a back/forth link between IdleCoral and TakingDamage
    • Created a trigger parameter TakeDamage
    • In the script of the base coral, made an anim variable to interact with the TakeDamage trigger
    • That trigger is called in the TakingDamage method of the coral base
    • Since I just wanted the coral to be “idle”, except for taking damage, then return back to idle, the transitions are setup as:
      • IdleCoral to TakingDamage: no exit time, condition: TakeDamage trigger
      • TakingDamage to IdleCoral: Has exit time: this correlates to how many times I want the animation to run (how many flickers of the object I want), fixed duration, conditions: empty
    • Since I do not want the TakingDamage animation to actually take that long to run just to get more flickers, you can directly change the Speed value of the TakingDamage animation itself in the animator to compensate
    • By combining the Exit Time variable of the transition, and the Speed of the animation itself, I can control how many times an animation will play, and how long it will take to run all of those instances of that animation

    Setting Up Multiple Colliders Effectively on Game Objects – Unity

    Setting Up Colliders for 2D Objects

    Important take away from this link from Zaladur:

    “I add an empty child to my characters called “Hitbox” and add a box collider to it, and set it to a Trigger. The Hitbox can be its own layer, and handle collisions with things like bullets, fireballs, or other players or their hitboxes. Meanwhile the parent retains the character controller to handle movement and collision with terrain, obstacles, etc.”

    “Having the hitbox as a trigger allows you to pass through other players while still generating an OnTrigger events so that you can react to hitting an enemy. Just make sure you remember that the Trigger collider is the Hitbox, so you should act on collider.parent if you need to access the actual character.”

    This suggest for 2D game objects, one way to setup colliders is to have your physical collider (non-trigger collider) on the main, parent game object. Then, create a separate game object (called “Hitbox”) as a child to that main gameobject, and give this object a Trigger collider. This gives the overall system of objects a collider that will interact with the environment (walls, ground, other physical bodies if necessary) as well as a separate collider to determine events that occur when certain types of objects collide. This is partnered with labeling the parent collider and the child collider with different layers and/or tags, and use of the 2D collision matrix, to decide if objects physically collide and/or if an event occurs when they collide.

    Example from Coral Invasion currently: Wanted the player to take damage when “colliding” with an enemy, but did not want a true physical collsion to occur. The player and enemy parent game objects have non-trigger colliders, with rigid body components, while their layers are “Player” and “Enemy” respectively. The collision between the layers “Player” and “Enemy” was deactivated in the 2D layer collision matrix. The child objects of these two game objects were each given trigger colliders. The “Player” child was given tag:”Player” and layer:”Player”, but the child of the “Enemy” object was given a tag:”Enemy” and layer:”Default”. As long as the layers were not “Player” and “Enemy”, this allows some type of collision to occur, as that was the only type of collision turned off. Here we have a “Player/Default” collision now. The Enemy child having the tag:”Enemy” was necessary for the OnTriggerEnter2D scripting of how the player object determined if it took damage (this was also why the tag:”Enemy” was removed from the parent Enemy object, as this appeared to be making the player lose double the health upon collision). This all came together so that the player would take damage when colliding with an enemy, but not create any true physical collision of the objects.

    Some further investigation of exactly how this works is needed as the fact that the player was taking double the damage before changing the tag of the Enemy parent object suggests that the player child object was still picking up a collision there, even though it should have technically been a “player/enemy” layer collision. May have something to do with one being a trigger collider and the other being a non-trigger, but unsure.

    Feb. 19th, 2018

    Creating a Basic Cam Model – Maya

    Using Maya, I was able to create a very basic cam mechanism using a basic cylinder as the main body, and moving a few of the edges symmetrically to create a more interesting shape for the follower to follow as it rotated.

    Colliders for Cam in Unity

    Placing Colliders
    1. Use Capsule Collider for main body of Cam (turned sideways, the body of the capsule collider works well as a cylinder collider)
    2. This capsule collider has its radius set to that of the Cam main body, and its height can be adjusted to fit the thickness
    3. Create gameObject – cube
    4. Remove components: Mesh Renderer and Mesh Filter (leaves cube’s collider: this collider has more flexibility for more complex designs)
    5. Set this as a child of the original game object of choice (the gear model in our case)
    6. This was rotated at a 45 degree angle and moved to fit the sharp tear-shaped location of the Cam
    Setting Up Cam-Follower System
    1. Cam Constraints: Frezze Position – x,y,z; Freeze Rotation – x,y
    2. The Cam was given a script to rotate it about its Y-axis
    3. Cam rotation is used to physically drive the follower
    4. Follower Constraints: Frezze Position – x,z; Freeze Rotation – x,y,z
    5. Follower was also affected by gravity, to help physically drive it to follow the cam

    The follower for this cam-follower system is just a generic Unity cube game Object for now, with a basic box collider. This setup appeared to work well for this basic cam-follower mechanism. There was a bit of a difference in the way this cam was imported into Unity as opposed to the gear, which will need looked into. Its polySurface, which contains the mesh of the object, is a separate and child object of the actual “Cam_Basic_Unity” export.

    Driving Gear Mechanisms in Unity with Physics Engine

    The following video shows the cam-follower system in action.

    Example Video of this Cam Animation in Motion