Cz_mirror Game開発備忘録

週末にUnity でゲーム開発をしています。ゲーム開発を通じて得た情報の備忘録として活用するブログになります。

新ゲーム「Caplus(キャプラス)」開発日記7

引き続きCaplusの実装を進めていました。

f:id:godhandevilleg:20181130014630p:plain

タイトル、メニュー、ゲーム画面の各シーンの繋ぎ込み。メニュー画像の各ボタンはスプライト画像を準備して、UnityのSpriteEditorでスライスを行い、設置を行いました。

f:id:godhandevilleg:20181203100245p:plain

来週12/10のunityroom アドベントカレンダー 2018にて公開できるように準備中です。(来週の段階では一部のゲームのみ遊べる状態を目標としています。)

f:id:godhandevilleg:20181203100359p:plain


プレイヤーの動きについても、実装を行いました。プレイヤーの移動の際にRigidBodyに速度を加えて、キー操作のない場合、速度を強制的に0にしています。(以前はFixedUpdateを使っていましたが、今回はUniRXを使い、キー操作があった時のみ処理を実施するようにしています。)

プレイヤーの移動範囲については、画面に合わせてBoundaryクラスで定義しています。(シューティングチュートリアルのものと同様です。)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using UniRx.Triggers;

namespace Caplus.Assets.Scripts.Player
{

    [System.Serializable]
    public class Boundary
    {
        public float xMin, xMax, yMin, yMax;
    }

    public class PlayerMove : MonoBehaviour
    {

        public SimpleTouchPad touchPad;
        public Boundary boundary;
        public float speed;

        private Rigidbody rb;

        void Start()
        {
            rb = GetComponent<Rigidbody>();

            boundary.xMin = -16;
            boundary.xMax = 8;
            boundary.yMin = -10;
            boundary.yMax = 10;
            speed = 20;


            // UniRX 移動処理
            this.UpdateAsObservable()
                 .Where(_ =>
                            (Input.GetAxis("Horizontal") != 0) ||
                            (Input.GetAxis("Vertical") != 0)
                           )
                 .Subscribe(_ => ActionMove());
            this.UpdateAsObservable()
                 .Where(_ =>
                            (Input.GetAxis("Horizontal") == 0) &&
                            (Input.GetAxis("Vertical") == 0)
                           )
                .Subscribe(_ => ActionStop());
        }

        void ActionStop()
        {
            rb.AddForce(0, 0, 0);
            GetComponent<Rigidbody>().velocity = new Vector3(0, 0, 0);
        }

        void ActionMove()
        {
            float x = Input.GetAxis("Horizontal");
            float y = Input.GetAxis("Vertical");

            Vector3 movement = new Vector3(x, y, 0.0f);

            GetComponent<Rigidbody>().velocity = movement * speed;
            GetComponent<Rigidbody>().position = new Vector3
                (
                    Mathf.Clamp(GetComponent<Rigidbody>().position.x, boundary.xMin, boundary.xMax),
                    Mathf.Clamp(GetComponent<Rigidbody>().position.y, boundary.yMin, boundary.yMax),
                    0.0f
                );
        }


    }
}

 

 

 

新ゲーム「Caplus(キャプラス)」開発日記6

引き続きCaplusのタイトルを作ってみました。

背景の作り込みがまだだったので、Autodesk Graphicを使い、宇宙や地球をなんとなくですが、イメージしたものを目指してみました。

中央部分の光は独自ブラシを使い、端のほうが細くなるような光のようなイメージにして、レイヤーのモードを調整するなどしてみました。

 

f:id:godhandevilleg:20181130014630p:plain

 

一週間ゲームジャム テーマ「10」 TENKOWASUというゲームを作ってみました

一週間ゲームジャム テーマ「10」 TENKOWASUというゲームを作ってみました。

やはりあまり時間をとれず、Roll-a-ballをメインとしたゲームにしてみました。

 

f:id:godhandevilleg:20181121120603j:plain

今回チャレンジしてみたかったものの実現できなかったものはオブジェクトを砕く表現と加速した時にオブジェクト破壊にその威力が反映するようにする仕様でした。velocity magnitudeをつかってみたのですが、速度の取得がうまくいきませんでした。(ボールをいろいろな角度からオブジェクトにぶつけようとした時に、取得しようとする速度が極端に変わってしまう。)

 

オブジェクトを砕く表現については、オブジェクトに触れた時に、割れたオブジェクトを用意して、それに差し替えRigidbodyを使って破片を吹き飛ばすようなことができそうかなというイメージは湧いたのですが、こちら素材を作り込む時間がなかったため、Unityの標準機能で作ったプレハブと交換する程度にしてみました。

 

作ってみたいアイデアの練りこみをもう少し行うのと、開発期間を短縮するために簡単なゲームをもっとたくさん作っておく必要があると実感しました。

あとは最低限の挙動をするゲームのプロトタイプを用意しておき、今後はそれを使って開発期間を短縮させたり、UI周りの素材、音楽などを準備しておくなどして、クオリティをアップさせられるようにできればと思います。

一週間ゲームジャム テーマ「10」 TENKOWASUというゲームを作ってみます

今回の一週間ゲームジャムのテーマは10なので、10個のオブジェクトを破壊するTENKOWASUというゲームを作ってみることにします。

ゲームのルール自体は比較的シンプルなものになると思いますが、一度に10個壊すのは少しコツや運も必要なものにできればと考えています。週末にならないと開発に本格的に着手はできなそうなので、今はタイトル画像などの素材を作っています。

f:id:godhandevilleg:20181121120603j:plain

新ゲーム「Caplus(キャプラス)」開発日記5

Caplusのゲームシーンのカメラ表示を少し調整してみました。前作Captulionと同様にProjectionをOrthographicに変更し、Sizeを少し変更することで移動しても自機の大きさを一定のままにすることができます。

f:id:godhandevilleg:20181117235102p:plain

f:id:godhandevilleg:20181117235213p:plain

自機の大きさが良い感じになってきました。

 

あとは必要なスクリプトの洗い出しなどをしてみました。機能のメンテナンスをしやすいように極力機能毎にスクリプトをまとめておこうと思います。

spaceShip
スペースシップ
 プレイヤー
 エネミー
 スレーブ

GameManager
ゲームコントローラー 
 ゲームスクロール
 プレイヤースポーン
 エネミースポーン
 ボスエネミースポーン
 ゲームクリア

 

Sound
サウンド
 BGM
エフェクト
 エフェクトプレイヤービーム
 エフェクトプレイヤーキャプチャービーム
 エフェクトプレイヤーダメージ
 エフェクトエネミービーム
 エネミーダメージ
 エネミースレーブ

 

Attack
weapon abstract
ウェポン
 ノーマル
 マルチ
 レーザー
 ホーミング
 反射レーザー
 炸裂弾

 

Beam
ビームabstract
 ノーマルビーム
 エネミービーム
 レーザー
 ミサイル

Player
 プレイヤームーブ
 プレイヤーアタック
 プレイヤーキャプチャービーム
 プレイヤーダメージ
 プレイヤーデストロイ
 プレイヤーリカバー

 

Pirot

Enemy
 エネミームーブ
 エネミーアタック
 エネミーダメージ
 エネミーデストロイ

Capture
 キャプチャービーム
  ノーマル
  ラピッド
  ブラックホール

Camera

UI
 PlayerMoveButton
 CaptureBeamGage
 CaptureButton
 StageMove
 Shield

 

 

新ゲーム「Caplus(キャプラス)」開発日記4

Caplusのゲームステージの仮デザインをしています。

f:id:godhandevilleg:20181114145939p:plain

Captulionは縦型でしたが、Caplusでは横型にしてみようと思います。横型のシューティングゲームにすることで両手で操作しやすい形式にして、ショットは自動、敵機を捕獲するキャプチャービームは条件を満たした後にボタンを押下することで発射する仕様を考えています。(キャプチャービームは円ゲージにして、ゲージが溜まったら押下できる)

 

捕獲した敵機はCaptulionでは自機を追尾していましたが、Caplusでは画面端に移動し、そこから上下にランダムで移動するように変更してみようと考えています。捕獲する敵機が増えると当たり判定が大きくなってしまうのと、敵機の大きさによって自機に被って自機が見えにくくなってしまうため、その解消を目的としています。

 

自機は以前のCaptulionで使用したモデルを一旦設置してみましたが、横型に合わせて調整してみようと思います。