どこまでも自由な日々

パソコン初心者主婦のブログです。

Shooting Game チュートリアル 第12回

第12回 Waveを5個にする、スコアの実装

すすめていきます。

 

12.1 Waveの作成

とりあえず、インポートしてみる。

もっと自作のWavesを作って入れればいいのだろうけど今回はしない。

f:id:moph-moph:20150529221603p:plain

ここのSizeの値を増やせばそれだけ入る。

 

12.2 スコアの実装

スコアなどの値の保存はPlayerPrefsクラスで行えるらしい。

(NSUserDefault的なもの?)

 

とりあえず、完成!!

f:id:moph-moph:20150529224621p:plain

 

Shooting Game チュートリアル 第11回

第11回 エネミーのHP、弾の攻撃力、アニメーションの追加

すすめていきます。

ゲームバランス的な部分だね!ちょっと緊張。大事なところだからちゃんと覚えたい。

でも単なる記録なので読んでる人の役に立てるか謎。。

 

まずはコーヒー。

f:id:moph-moph:20150529091313p:plain

11.1 HP(ヒットポイント)と攻撃力(power)の実装

OK!

11.2 ダメージを受けた時の表現

こちらはアニメーション。

だいぶ苦戦してメモも取れなかった。苦戦というのは理解に苦戦ということでチュートリアルをそのまますすめていけば問題ない。

11.3 プレイヤーの無敵時間

これもアニメーション。

アニメーションってけっこう難しい。慣れが必要かも。。

あれ?無敵のまま止まらなくなった!これはExitTimeの問題か?

と思い確認するもうまくいかない。なぜだ。。

さらに起動しなくなった。

急に、Titleまわりでエラーが起こっている様子。

サンプルファイルと見比べるも違いがわからず、お手上げ状態に。

というわけで、サンプルファイルをそのまま使って進めていくことにしました。

f:id:moph-moph:20150529195509p:plain

あれ、プレイヤー、ずっと無敵のままじゃない??

 

 

Shooting Game チュートリアル 第10回

第10回 タイトルを付ける

すすめていきます。

 

10.1 タイトルの表示

そういえばGUI関係が大幅に変わっているときいた。

EmptyのGameObjectを作って、そこにComponent→Rendering→GUIText

10.2 タイトル -> ゲームスタート ( -> 死んだら ) -> タイトル のマネージャークラスを作る

特に特記事項なし。といいたいけど、表示非表示を切り替えるって方法がここにあった。タイトルを

        title.SetActive (true); //falseで非表示

 で表示非表示切り替えしてる。

moph-moph.hatenablog.com

 このやり方とは全然違う。学び多い。

10.3 他のスクリプトからマネージャーを呼び出す

ぽちぽち。

おおお!ちゃんと動いた!

 

そろそろ完成するのかなと思うと感慨深い。

続きます。

 

Shooting Game チュートリアル 第09回

第9回 プレイヤーの移動制限と様々な修正

すすめていきます。

そうそう気になってたの。プレイヤーがはみだして消えるの。

9.1 プレイヤーに移動制限つける

今回は移動の制限にカメラのビューポートとMathf.Clampを使用します。

Mathf.clampってどういう意味?

Mathfとは数学的な関数を使用するクラス。clampは固定とかそういう意味。ということで範囲制限をMathf.Clampで行うということらしいと理解。

 

9.2 Spaceship.csとEnemy.csの修正

そうだった、Moveメソッドを消さないと。

というわけで修正修正。

 

Enemy.csはこうした。

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {

    Spaceship spaceship;
    private Transform tran;
    private Rigidbody2D rb2;

    void Start () {
     
        spaceship = GetComponent<Spaceship>();
        tran = GetComponent<Transform> ();
        rb2 = GetComponent<Rigidbody2D>();
//        spaceship.Move (tran.up * -1);
        Move (transform.up * -1);
        StartCoroutine ("shotCoroutine");

    }

    IEnumerator shotCoroutine(){
        if (spaceship.canShot == false) {
            yield break;
        }


        while (true) {
        
            for(int i = 0; i < tran.childCount; i++){
                Transform shotPosition = tran.GetChild(i);
                spaceship.Shot(shotPosition);

            }
            yield return new WaitForSeconds (spaceship.shotDelay);
        
        }
    }

    public void Move (Vector2 direction){
        rb2.velocity = direction * spaceship.speed;
    }


    void OnTriggerEnter2D(Collider2D c){
        string layerName = LayerMask.LayerToName(c.gameObject.layer);
        if (layerName != "Bullet(Player)") {
            return;
        }

        Destroy (c.gameObject);
        spaceship.Explosion ();
        Destroy (gameObject);

    }

}

続きます。

 

Shooting Game チュートリアル 第08回

第8回 音をつける

すすめていきます。

 

8.1 BGMを付ける

なるほど、ちゃんとドロップしてもオブジェクトができない!と思ったらBackGroundにアタッチされていたことが発覚。

うしろのグレーのところにドロップでOK。

8.2 プレイヤーにショット音をつける

using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {

    public float speed = 5;
    public GameObject bullet;
    Spaceship spaceship;
    private AudioSource audiosource;

    void Start() {
        spaceship = GetComponent<Spaceship>();
        audiosource = GetComponent<AudioSource>();
        StartCoroutine ("FirstCoroutine");

    }


    IEnumerator FirstCoroutine ()
    {

        while (true) {

            spaceship.Shot (transform);
            audiosource.Play ();
            yield return new WaitForSeconds (spaceship.shotDelay);
        }
    }


    void Update () {
        float x = Input.GetAxisRaw("Horizontal");        
        float y = Input.GetAxisRaw("Vertical");

        Vector2 direction = new Vector2(x, y).normalized;

        spaceship.Move (direction);
    }

    // ぶつかった瞬間に呼び出される
    void OnTriggerEnter2D(Collider2D c){

        string layerName = LayerMask.LayerToName (c.gameObject.layer);

        if (layerName == "Bullet(Enemy)") {
            Destroy (c.gameObject); //c == bullet etc,,
        }

        if (layerName == "Bullet(Enemy)" || layerName == "Enemy"){
            spaceship.Explosion ();
            Destroy (gameObject); //gameobject == player
        }

    }

}

8.3 爆発音を付ける

なるほど、Explositonは生成と共に音がなるから、アタッチだけでいいんですね。

OK!

続きます。

 

Shooting Game チュートリアル 第07回

第7回 Wave型の仕組み作り

すすめていきます。

しかしタイトルからして意味がわかりません。Wave型って?陣形の一つと理解していいの?よくわからない。

 

7.1 Waveの作成

とりあえず3機あわせてWave!

7.2 Waveを呼び出すEmitter (エミッター)を作成する

Emitterって何?制御装置みたいに理解。

そして、はい、エラー。

でもこれは、スペルミスがほとんどでした。

f:id:moph-moph:20150529165754p:plain

ここのElement()は、Sizeを入力すると出てくるよ。

 

f:id:moph-moph:20150529165853p:plain

とりあえず、完成。

続きます。

 

Shooting Game チュートリアル 第06回

第6回 背景を作る

すすめていきます。

6.1 3枚の画像を表示させる

Quadにテクスチャをはりつける…

Quadって何?4個入りのもの、とかいう和訳が出てくるけど。

そんなときのオフィシャル

f:id:moph-moph:20150529124807p:plain

6.2 Frontを作る

Quadは3DObjectの中にあった。

6.3 MiddleとBackを作る

複製。

6.4 3枚の位置を調整する

6.5 背景をスクロールさせる

む、またもエラー。

そして修正。

using UnityEngine;
using System.Collections;

public class Background : MonoBehaviour {

    public float speed = 0.1f;
    private Renderer ren;

    void Start(){
        ren = GetComponent <Renderer> ();
    }

    void Update () {

        // 時間によってYの値が0から1に変化していく。1になったら0に戻り、繰り返す。
        float y = Mathf.Repeat (Time.time * speed, 1);
        // Yの値がずれていくオフセットを作成
        Vector2 offset = new Vector2 (0,y);
        // マテリアルにオフセットを設定する
        ren.sharedMaterial.SetTextureOffset ("_MainTex",offset);
    }
}

 実行!

わーい!!

すごいや!!!

背景が時差をもってスクロールするだけでこんなにゲームっぽくなるなんて、と感動しちゃいました。

続きます。

f:id:moph-moph:20150529124614p:plain