Cz_mirror Game開発備忘録

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

SmartRig Bipedのβ版を触ってみました

先日SmartRig Bipedのβ版を触らせていただける機会があり、ユニティちゃんに適用してみました。

SmartRig BipedはスクリプトでIKを操作するアセットで、モーションがなくても、人体に合わせたパラメーターの設定をすることで自動的にアニメーションを実現することができます。

gyazo.com

私の適用したデモはデフォルトのままなので、やや硬めの動きになっていますが、調整次第では自然な人体アニメーションを実現することができそうです。(腕のふりなどもパラメーターで調整可能です。)

例えばHip_hiの値を調整することで座り歩きのようなものも簡単に実現することができます。

gyazo.com

まだ未公開とのことですが、近々公開できるかもとのことでしたので、大変楽しみにしています!

 

SmartRig Bipedの公式の動画も公開されております。人型モデルのアニメーション作成がとても簡単かつ自然に表現できるので、触っていて非常に楽しいです。

 

www.youtube.com

www.youtube.com

www.youtube.com

Captulionを再度ダウンロードできるようになりました。

‪Captulionを再度ダウンロードできるようになりました。Caplusの前身のアプリで、敵機を捕獲するシューティングになります。よかったら遊んでいただけますと嬉しいです。‬

落とせなくなっていた原因は、Appleの開発者ライセンスの更新が切れてしまっていたため保留状態になっていたためでした。

‪App名: Captulion、デベロッパ: Kazushige Mori https://itunes.apple.com/jp/app/captulion/id1254989619?mt=8

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

先日作曲したステージクリアの曲を組み込む程度の軽微な内容ですが、Caplusをアップデートいたしました。

f:id:godhandevilleg:20181130014630p:plain

現在エフェクト周りや細かい部分なども修正中です。

まだデモ版なので、これから随時機能などを開発していければと思います。

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

まだステージクリアの音楽を作っていなかったため、簡易的なものですが作ってみました。

soundcloud.com

 

まだ公開を優先して、あまり最適化されていないスクリプトも多いので、全体的に見直そうと思います。

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

本日0時より遅れてしまいましたが、なんとかUnityRoomアドベントカレンダー12/10分の作品「Caplus」を公開いたしました。

f:id:godhandevilleg:20181130014630p:plain

Caplus | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう



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

‪Caplus用のBGMをMedlyアプリで簡易ながら作曲してみました。‬

タイトル‬
soundcloud.com


メニュー‬
soundcloud.com

ゲームオーバー
soundcloud.com

あとはNASAのウェブサイトで利用可能な画像を使いゲームの背景に設定してみました。
f:id:godhandevilleg:20181205153346p:plain

新ゲーム「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
                );
        }


    }
}