April 6th, 2018

Research Games of Similar Genre to Coral Invasion

What genre is it?

Wiki Page for Shooter Genre
Shooter Game – Subgenre: Shoot ’em Up

“Shoot ’em ups are a specific subgenre of shooters wherein the player may move up and down and left and right around the screen, typically firing straight forward.”

Top Down Shooter: “(sometimes referred to as twin-stick shooters) where the levels are controlled from an overhead viewpoint”

Game may also benefit from being categorized as strategy, or potentially puzzle. These two genres help drive the idea that the game may not be pushing the limits of speed, and will be played in a slower and more tactical way than a general shoot em up. This can be useful for rounding out another view on the way the core gameplay can be implemented.

Example Games of this Genre

Armed to the Gears Link to steam page
This game has the player move throughout the level/world, shooting many enemies in a top-down fashion. The player is a very strong robot (could use idea that player is very durable/invincible to focus on other parts of gameplay). Has turrets the player can place down to aid them (has light outline of range to show what the turrets can reach at all times). There are many different types of enemies and weapons for the player.

Blacksea Odyssey Link to steam page
Fast paced game that is still focused on the player surviving more than how they use their projectiles. There is some interesting use in the placement of projectiles as shooting boss enemies in certain locations allows you to dismember them (getting into strategic placement of the player’s weapons).

Tactical Link to steam page
Medium/slow paced top down shooting and puzzle/strategy game. The player must kill enemies by shooting them from behind while remaining undetected. Killing an enemy alerts the other enemies and will affect their movement patterns. Player succeeds by killing all of the enemies in the fastest time.

March 9th, 2018

Creating Interesting Particle Effects in Unity

Ripple Effects | Unity Particle Effects | Visual FX Tutorial – Youtube

This video is a tutorial on setting up a basic ripple effect using the particle effects given in Unity. This serves as a basic introduction to some of the different parameters of particle systems. This was useful in setting up the visuals for the projectile in our DIGM 530 project Coral Invasion.

Images and Video of Use as Projectile for Project

Video of Projectile in Motion with Audio

Some Useful Notes:
  • As a projectile effect, it was important to make sure to edit the parameter to have the particle gameObject destroy itself once all the particles died.
  • Editing the parameters of lifetime, rate, scaling size/color all useful to fit the particle between two circle colliders.
  • Was able to attach the particle system prefab to the player script exactly like would normally be done for a generic gameObject used as a projectile. Can instantiate particle systems.

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.