• Home
  • About
    • Hanna's Blog photo

      Hanna's Blog

      I wanna be a global developer.

    • Learn More
    • Email
    • LinkedIn
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[Unity 4] Coin Crazy

21 Aug 2018

Reading time ~4 minutes

Game design

  • Player character
  • Stage
  • Coin
  • Obstacle
  • Generator for coin and obstacle
  • Game Controller

Create stage

  • Create Cube and change Scale to (100, 1, 100)
  • Change Position to (0, -0.5, 0)
  • Add texture
  • Create Cube and change Position to (0, 0.5, 0)

  • Create Directional Lights
    • Create Directional Light
    • Change Position to (0, 0, 0) and Rotation to (90, 0, 0)
    • Change Intensity to 0.5
    • Create Directional Light
    • Change Position to (0, 0, 0) and Rotation to (-90, 0, 0)
    • Change Intensity to 0.2
  • Create Physic Material
    • Create folder and change Name to Physic Material
    • Create Physic Material in the folder and change Name to Default Physic Material
    Coin Crazy Stage
    • Change Dynamic Friction to 0.2, Static Friction to 0.2 and Bounciness to 0
    Coin Crazy Stage
    • Edit>Project Settings>Physics
    • Open Physics Manager in Inspector View
    • Drag and drop to Default Physic Material in Physics Manager
    Coin Crazy Stage
  • Set Camera
    • Change camera Position to (0, 7, -10), Rotation to (30, 0, 0) and Field of View to 30
    • Change Near to 0.3 and Far to 50 in Clipping Planes
  • Organize name and hierarchy
    Coin Crazy Stage

Use character

  • Import file
    • Download Character Pack: Free Samp in Asset Store
    Coin Crazy Character
  • Deploy character
    • Open DemoScene in character Asset folder
    Coin Crazy Character
    • Copy character and paste to game Scene
    Coin Crazy Character
    • Set Bounce Combine to minimum
    • Change Jump Force to 6

Implement coin and obstacle

  • Create coin and obstacle
    • Download Old Coin in Asset Store
    Coin Crazy Coin
    • Download Ball Pack in Asset Store
    Coin Crazy Obstacle
    • Open Presentation Scene in Old Coin
    • Copy coin and paste to game Scene
    • Change Scale and Rotation
    • Open Material folder and change Color to yellow in Inspertor in Coin Object
    Coin Crazy Coin
    • Open Ball Pack
    • copy SpikeBall and paste to game Scene
    • Change Scale and Position
  • ShortMoveController.js
  var velocity : float = 8.0;
  var moveDelay : float = 1.0;
  var sustainTime : float = 3.0;

  function Start(){
    yield WaitForSeconds(moveDelay);

    var player : GameObject = GameObject.FindWithTag("Player");
    if(player != null){
      var direction : Vector3 = (player.transform.position - transfor.position).normalized;
      rigidbody.AddForce(direction * velocity, ForceMode.VelocityChange);
    }

    yield WaitForSeconds(sustainTime);
    Destroy(gameObject);
  }
  • Add ShortMoveController.js to Coin, SpikeBall
  • Change Tag of character to Player

Create generator

  • Generator.js
  var intervalMin : float = 0.5;
  var intervalMax : float = 1.5;
  var coinRate : float = 0.3;

  var coinPrefab : GameObject;
  var spikeBallPrefab : GameObject;

  function Start(){
    while(true){
      yield WaitForSeconds(Random.Range(intervalMin, intervalMax));

      var Prefab : GameObject = Random.value < coinRate ? coinPrefab : spikeBallPrefab;
      var theta : float = Random.Range(0.0, Mathf.PI * 2.0);
      var position : Vector3 = Vector3(Mathf.Cos(theta), 0.0, Mathf.Sin(theta)) * 5.5;
      position.y = 2.5;
      Instantiate(prefab, position, Quaternion.identity);
    }
  }
  • Create Empty Game Object and change Name to Generator
  • Drag and drop Generator.js to Generator
  • Prefab Coin and SpikeBall
  • Drag and drop each prefabs to coinPrefab and spikePrefab in Generator.js
Coin Crazy Generator

Messaging for getting coin and demage

  • Set layer
    • Create layer and change Name to Character and Moving Object
    Coin Crazy Message
    • Set Layer of character Game Object to Character
    • Set Layer of Coin and SpikeBall Prefab to Moving Object
    • Set Matrix to not collide Charater Layer and Moving Objects Layer
    Coin Crazy Message
    • Check Is Trigger in Inspector of C_man_1_FBX2013 Game Object of character
  • Create sender script
    • Coin.js
    function OnTriggerEnter(other : Collider){
      other.gameObject.SendMessage("CatchCoin", 1);
      Destroy(gmaeObject);
    }
  
  • Drag and drop Coin.js to Coin Prefab
  • SpikeBall.js
    function OnTriggerEnter(other : Collider){
      other.gameObject.SendMessage("ApplyDamage", 10);
      Destroy(gmaeObject);
    }
  
  • Drag and drop SpikeBall.js to SpikeBall Prefab

  • Create receiver script

    • PlayerStatus.js
    private var life : int = 100;
    private var score : int = 0;

    function CatchCoin(amount : int){
      score += amount;
    }

    function ApplyDamage(amount : int){
      life -= amount;

      if (life <= 0){
        Destroy(transform.parent.gameObject);
      }
    }

    function OnGUI(){
      var rect : Rect = Rect(0, 0, Screen.width, Screen.height);
      GUI.Label(rect, "LIFE: " + life.ToString() + " / SCORE: " + score.ToString());
    }
  

Improve visual presentation

  • DamageEffector.js
  private var effectFlag : boolean;
  private var originalColor : Color;

  function Start(){
    originalColor = render.material.color;
  }

  function Update(){
    if(effectFlag){
      renderer.material.color = Color.red * Mathf.Abs(Mathf.Sin(40.0 * Time.time));
    }
  }

  function ApplyDamage(amount : int){
    effectFlag = true;
    yield WaitForSeconds(0.3);
    effectFlag = false;
    renderer.material.color = originalColor;
  }
  • Drag and drop DamageEffector.js to character Game Object

Apply sound

  • Import sound file
    • Download Sound Pack Free Pack in Asset Store
    Coin Crazy Sound
  • Click C_man_1_FBX2013 Game Object and click Component>Audio>Audio Source
  • Change Audio Clip to buy and uncheck Play On Awake in Audio Source in Inspector

  • PlayerSoundEffector.js
  function CatchCoin(amount : int){
    audio.Play();
  }
  • Drag and drop PlayerSoundEffector.js to character Game Object
  • PlayerSoundEffector.js(change)
  var coinSE : AudioClip;
  var damageSE : AudioClip;

  function CatchCoin(amount : int){
    audio.PlayOneShot(coinSE);
  }

  function ApplyDamage(amount : int){
    audio.PlayOneShot(damageSE);
  }
  • Change demage sound


UnityJavaScriptGame Share Tweet +1