LoginSignup
0
0

More than 5 years have passed since last update.

Daydream開発入門 その4(簡単なゲーム作成)

Last updated at Posted at 2017-11-04

今回は敵(Cube)が自分の方へ向かって来るのでそれを倒すゲームを作ってみたいと思います
↓な感じです(ちょっとマウスポインターが邪魔ですね。すみません... )
daydream-easy-game.gif

前提

こちらの記事 の環境構築が済んでいること
(やらなくても実装はできますが、Instant Previewの設定Unityエディタ上でシミュレート も合わせてご覧いただけたらと思います)

Cubeオブジェクトを敵オブジェクト化する

環境構築時に動作確認用に置いたCubeオブジェクトを敵オブジェクトとして扱うようにします

  1. Hierarchy のCubeオブジェクトを Projectビュー にドラッグ&ドロップしプレハブ化する
  2. プレハブ化されたCubeオブジェクトの名前を Enemy に変更
  3. Hierarchy のCubeオブジェクトを削除

動的に敵オブジェクトを配置

  1. 動的に敵オブジェクトを作成するために、まずは空のオブジェクトを作成
  2. 作成したオブジェクトに EnemyCreator と名前をつける

    スクリーンショット 2017-11-04 21.21.03.png

  3. Add Componentでスクリプト EnemyCreator を追加

    スクリーンショット 2017-11-04 21.21.38.png

  4. Inspector上で敵オブジェクトと敵生成時間を設定出来るようにする

    EnemyCreator
    public class EnemyCreator : MonoBehaviour {
        // 動的に生成する敵
        public GameObject enemy;
        // 生成するまでのインターバル
        public float interval = 3;
    }
    
  5. インターバル毎にランダムで敵を配置するコードを作成

    EnemyCreator
    // 時間経過をカウント
    private float time;
    
    void Update () {
        time += Time.deltaTime;
        if (time >= interval) {
            time = 0;
    
            GameObject newEnemy = Instantiate (enemy);
            newEnemy.transform.position = new Vector3 (
                Random.Range(-10.0f, 10.0f), 
                Random.Range(0.0f, 3.0f),
                Random.Range(-10.0f, 10.0f));
        }
    }
    
  6. Inspector上でEnemyCreatorスクリプトのEnemy変数に、Enmyプレハブをドラッグ&ドロップし設定

    スクリーンショット 2017-11-04 22.20.42.png

これで敵オブジェクトのランダム配置は完了です!実行し、以下のようランダムでオブジェクトが生成されればOKです!
daydream-enemy-create.gif

敵オブジェクトをコントローラーのクリックで倒す

  1. EnemyプレハブにAdd Componentで Enemy スクリプトを追加

    スクリーンショット 2017-11-04 22.39.39.png

  2. コントローラーでクリックされた時に消滅する用のコードを作成

    Enemy
    public void Deth() {
        Destroy (this.gameObject);
    }
    
  3. EnemyプレハブにAdd Componentで Event Trigger を追加

    スクリーンショット 2017-11-04 22.29.39.png

  4. Add New Event Type > PointerClick を選択しクリック時にイベントを発行するよう設定

    スクリーンショット 2017-11-04 22.30.38.png

  5. イベントに反応するオブジェクトとしてEnemyプレハブを設定

    スクリーンショット 2017-11-04 22.44.09.png

  6. No Function > Enemy > Deth () を設定しクリック時に呼ばれるメソッドを指定

    スクリーンショット 2017-11-04 22.44.33.png

これで敵オブジェクトをクリックすると消えるようになりました!
こんな感じで動作していればOKです!
daydream-enemy-deth.gif

敵を自分の方に向かって来させる

その場に止まっているだけだと面白くないので、自分の方に寄って来るようにしたいと思います

  1. Enemyスクリプトに敵の移動スピードと自分と敵が衝突するまでの距離を設定する変数を作成

    Enemy
    // 敵スピード
    public float speed = 1f;
    // 自分と敵が衝突するまでの距離
    public float stoppingDistance = 2f;
    
  2. 続けて敵が向かって来るコードを作成

    Enemy
    void FixedUpdate() {
        // 自分の位置へ移動させる
        Vector3 moveDirection = Camera.main.transform.position;
        this.transform.LookAt (moveDirection);
        moveDirection = moveDirection - transform.position;
        if (moveDirection.magnitude > stoppingDistance) {
            moveDirection = moveDirection.normalized  * speed;
    
            transform.Translate (moveDirection * Time.deltaTime, Space.World);
        } else {
            // TODO 自分と衝突した
        }
    }
    

これで敵が向かって来るようになりました!
自分と衝突すると敵は止まるようになっています
daydream-enemy-move.gif



これで完成です!
なんとなくゲームっぽくなったかと思います!

おまけ

このまま実機で実行してもアプリを終了することができません
アプリを終了するためには こちらの記事 をご覧ください

最後に

まだまだゲームとして完成させるところは多くあるかと思います
例えば敵との当たり判定やスコア表示、音などの要素を盛り込めばもっと面白くなるはずです!
Daydreamは面白いので、もっとたくさん対応端末が出てくれたらなーと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0