Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【Unity】ジスたんファイトで使った技術

第21回Unity1週間ゲームジャム、及びマスコットアプリ文化祭2021の振り返り記事です。
「ジスたんファイト」を作る上で使用したアセット、使った技術についてまとめておきます。

ゲームの概要

ジスたんファイト」はマスコットキャラクター「ジスたん」を題材にしたアクションゲームです。
アプリコンテストマスコットアプリ文化祭2021」に応募しています

 

Webでも遊べますが、画面タップを想定したUI配置などスマホ向けを前提として開発しています

 

Webブラウザで遊べるunityroom版Androidの2つがあります。

unityroom.com

play.google.com

 

 

 

使用アセットのまとめ

ジスたんファイトで使用したアセットのまとめ

「DOTween PRO」でUIアニメーション

いつもの定番アセット 説明いる?

UIアニメーションに使用

 

 

「Feel」で演出を作る

ゲーム演出を作成するアセット。このゲームのあらゆる演出で使用しています。
攻撃を当てたときのヒットストップ、画面揺れ、エフェクト再生、スローモーションなどなど

 

場面ごとに演出を登録してPlayFeedbacks()を呼び出すだけなので差し替えとかもめっちゃ簡単

 

過去に紹介記事を書いています。同じ手順で問題なく実装できました

raspberly.hateblo.jp

 

 

「Animancer Pro」でアニメーションを制御する

プレイヤーと敵キャラ両方のキャラクターのアニメーション制御に使用しています。
そのためAnimatorは使っていません!ごちゃごちゃしたステートマシンともおさらば!

 

使い方は簡単で
Animatorがアタッチされているモデルに、Animancer Componentと制御用のScriptをアタッチ。

f:id:Raspberly:20220410004959p:plain


ScriptからはAnimancerComponent.PlayでAnimationClipを指定するだけです。

using UnityEngine;
using Animancer;

public class EnemyAnimator : MonoBehaviour
{
    [SerializeField] AnimancerComponent m_Animator;
    [SerializeField] AnimationClip m_MoveClip;
    [SerializeField] AnimationClip m_AttackClip;
    [SerializeField] AnimationClip[] m_HitClip;

    public void Run()
    {
        m_Animator.Play(m_MoveClip);
    }

    public void Attack()
    {
        m_Animator.Play(m_AttackClip);
    }

    public void Hit()
    {
        var num = Random.Range(0, m_HitClip.Length);
        m_Animator.Play(m_HitClip[num], 0.3f);
    }
}

初めて使いましたがとても簡単でした
後で個別紹介記事を書くかも

 

 

「HighlightPlus」でキャラクターを強調する

敵が攻撃範囲内に入ったときに白く強調するエフェクトとして使用

 

過去に紹介記事を書いています、同じ手順で簡単に実装できました

raspberly.hateblo.jp

 

 

「Easy Save」でセーブ機能を作る

セーブ機能の実装に使用

kan-kikuchi.hatenablog.com

 

 

「AssetHunterPRO」で余計なアセットを削除する

開発終盤、余計なアセットを削除するのに使用

 

 

他アニメーション・エフェクト・UI・サウンド素材

なんか知らないうちにたくさん持ってたのでいろいろ使いました

Dancing Motionは最後のダンスシーンで使用

 

 

その他

UnmaskForUGUIでフェード画面を作る

Maskとは逆のことを行うアセット?です

github.com

タイトル画面のフェードインフェードアウトは、ジスたんの画像を切り抜いた画像を使っています。
これの実装に使用しました。

 

 

f:id:Raspberly:20220409013706p:plain

FadeCanvasにはFadeManagerをアタッチ、参照もそれぞれしておきます

f:id:Raspberly:20220409014837p:plain

 

ImageオブジェクトにはImageとMaskとCanvasGroupをアタッチ

f:id:Raspberly:20220409015108p:plain

 

UnmaskオブジェクトにはImageとUnmaskをアタッチ、Imageには切り取りたい画像を指定します
(今回はジスたんの画像)

f:id:Raspberly:20220409015136p:plain

 

LockオブジェクトにはImageをアタッチ

f:id:Raspberly:20220409015213p:plain

これで設定は終わり、
後はScriptでImageのCanvasGroup.alphaや、
UnmaskのScaleを変化させるだけでマスクを使ったフェードインフェードアウトができます。

www.hanachiru-blog.com

 

 

NCMB

定番のオンラインランキングを素早く作れるサービス

mbaas.nifcloud.com

ランキング部分のプログラムは、昔作ったゲームのやつをそのまま流用しました
(なおのちにやらかすことになる)

 

UniTask

実はちゃんと使うのは初めて
async/awaitのTaskを置き換えるだけでそのまま使えるくらい手軽で便利
でもCancellationTokenはよくわかってないニャンね...

qiita.com

 

 

やらかし

Beautifyを使うとなんかうまくいかない

最初はポストプロセスアセットに「Beautify 2」を使っていましたが、
WebGLビルド後に謎のエラーが出て動作させることができませんでした
検証する時間も余裕もなかったためアセット自体をオミット、今も原因はわかっていません

これに結構時間をとられました

 

オンラインランキングリセット

前述した通りオンラインランキングの部分は、かなり昔に作ったスマホゲームのプログラムを流用しました
このプログラムは「SystemInfo.deviceUniqueIdentifier」をIDとしてランキングに登録していましたが、
これはWebGLでは機能しないためオンラインランキングが壊れました

SystemInfo.deviceUniqueIdentifierではなく、初回起動時にランダムなIDを作成・保存しオンラインランキングのIDとして利用するような修正を入れましたが、オンラインランキングは一度リセットせざるを得ない状況に....
結果初期に遊んでくれた方のデータが全て吹き飛んでしまいました...

 

この対応で年を越したましたねェ...

今回一番大きい反省点です

 

 

 

Androidのビルド関係

Androidアプリを作ったのは、マスコットアプリ文化祭2017マスコットタワーバトル(現在は非公開)以来です
久々なので詰まったところをまとめておきます

Tweet機能の変更

WebGL版のツイート機能にnaichilabのプラグインを使用していましたがAndroidだとエラーが出るようなのでオミット。
unityroom専用なので条件コンパイルで呼び出さないようにしていましたが存在するだけでだめだったようです。

【Unity】 Androidでリリースするまでにやることメモ - 武0武/blog

別の方法で実装しました

 

KeyStoreの作成

[Unity]KeyStore作成メモー - Qiita

 

デバッグの無効化

【Unity2020.3】Google Play Consoleで「デバッグ可能なAPKまたはAndroid App Bundleをアップロードしました。」と出た時の対処 - 映画と旅行とエンジニア

64ビットの要件を満たしていませんと怒られた時

【Unity】Google Play の 64 ビット要件に準拠していません - Qiita

Android - UnityでIL2CPPのapkファイルをビルドしたい。|teratail

 

2回目以降アップロードできない時

【GooglePlay】APKがアップロード出来ない時の対処法1【Unity】 - D日記

 

プライバシーポリシーの作成

ここ参考

プライバシーポリシーの雛形(ひな型) | Webサイトの利用規約(無料テンプレート・商用利用可)

 

 

まとめ

ジスたんファイトを作る上で使ったアセットや技術、詰まった点をまとめました
アセットではFeelやAnimancerProが大活躍しました、使いやすく(重要)、欲しい機能や処理を簡単に実装することができました。
なんだかんだ過去に自分で書いた記事が大いに役立ちました。

 

UniTaskは(きちんと)使ったのは初めてでしたが、めちゃくちゃ便利でした
まださわりだけなのでもっと使いこなせるようになりたいところ

 

 

 

マスコットアプリ文化祭受賞結果

結果としてマスコットアプリ文化祭2021ではジスたん賞を受賞しました!🎉🎉🎉

こんなおっきいアクリルスタンドをもらえちゃいました🤗

 

 

 

以上です