Unity4.6/5.0でつくる 2Dゲーム制作入門 [改訂第二版] その1
Unity4.6/5.0でつくる 2Dゲーム制作入門 [改訂第二版]
今日から「Unity4.6/5.0でつくる 2Dゲーム制作入門 [改訂第二版]」をやっていきたいと思います。新書の大型本を買う余裕がないので、Kindle Unlimitedに登録 (2ヶ月 99円) して、この本を選びました。2ヶ月経過する前に解約することを覚えておかないといけませんね。
作者の自作クラスを使ってスクリプトを書いていくようですが、勉強のために自作クラスの部分を自分で補っていきます。それと、他のブロガーさんを参考にして、コードに自分の言葉で書いたコメントをしていきます。僕はコードにコメントを書くのが苦手で、何を書けばいいのかといつも迷ってしまいます。リーダブルコードを読んだつもりではいるんですが・・・。
Chapter1 ミニゲームの作成
Section 8 敵の作成
たこ焼きを進行方向をランダムに決めて、等速直線運動させます。ただし、画面端にたこ焼きがきたら、反転させて画面から飛び出さないようにさせます。
ビューポート座標が何を指しているのか分からなかったので、調べました。
元のコードは著者の自作クラスを使ってきれいに書かれていますが、その部分を補うと、コードがスパゲッティに・・・。リファクタリングする必要がありますね。せめて似たようなコードはメソッドにしなければ。
コード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { public GameObject enemy; private Rigidbody2D rbody; private SpriteRenderer renderer; private float wid; private float hei; // Use this for initialization void Start () { // ランダムな方向に移動する // 方向をランダムに決める 0~359度 float dir = Random.Range(0, 359); // 速さは2 float spd = 2; // x軸, y軸の速さを計算し、Rigidbodyに設定する。 Vector2 v = new Vector2(Util.CosEx(dir)*spd, Util.SinEx(dir)*spd); rbody = GetComponent<Rigidbody2D>(); rbody.velocity = v; renderer = enemy.GetComponent<SpriteRenderer>(); wid = renderer.bounds.size.x / 2; hei = renderer.bounds.size.y / 2; } // Update is called once per frame void Update () { // 画面の端で跳ね返るようにする。 // ビューポート座標からワールド座標へ変換する。 // ビューポート座標では、左下が(0, 0)、右上が(1, 1)となる。 // カメラの左下座標を取得する。 Vector2 min = Camera.main.ViewportToWorldPoint(Vector2.zero); // 自身の大きさを考慮する min.x += wid; min.y += hei; // カメラの右上座標を取得 Vector2 max = Camera.main.ViewportToWorldPoint(Vector2.one); // 自身の大きさを考慮 max.x -= wid; max.y -= hei; // オブジェクトの座標を取得 float X = GameObject.Find("Enemy").transform.position.x; float Y = GameObject.Find("Enemy").transform.position.y; if (X < min.x || X > max.x) { // 画面外に出たので、X移動量を反転する。 rbody.velocity = new Vector2(rbody.velocity.x * -1, rbody.velocity.y); // 画面内に収まるように制限をかける. X = Mathf.Clamp(X, min.x, max.x); Y = Mathf.Clamp(Y, min.y, max.y); Vector2 pos = transform.position; pos.x = X; pos.y = Y; gameObject.GetComponent<Transform>().position = pos; } if(Y < min.y || Y > max.y) { // 画面外に出たので、Y移動量を反転する。 rbody.velocity = new Vector2(rbody.velocity.x, rbody.velocity.y * -1); // 画面内に収まるように制限をかける. X = Mathf.Clamp(X, min.x, max.x); Y = Mathf.Clamp(Y, min.y, max.y); Vector2 pos = transform.position; pos.x = X; pos.y = Y; gameObject.GetComponent<Transform>().position = pos; } } }
成果物
利用したもの
おめが試作設計局 / Omega Experimental Design Bureau
Unity4.6/5.0でつくる 2Dゲーム制作入門 [改訂第二版]
- 作者: 尾関俊介
- 出版社/メーカー: Wiz Publishing
- 発売日: 2015/03/20
- メディア: Kindle版
- この商品を含むブログ (1件) を見る