原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】VContainerの使用例(MVPパターン)

ロゴ変更

プロジェクトのロゴを変更して切羽詰まった気分を一新したいルーザーの皆さんこんにちは。以前のロゴはとある方に発注して作成して頂いた物だったので、変更するのは忍び難かったのですが、昨年末からどうも思うようにいかない事が多く、停滞気味の状況に変化を加えるべくロゴを新しくしました。
(それに伴いブログのタイトル画像も変えました)

 

ファーストインパクトで乗り切るゲーム

Xでトレーラーが発表された時にかなり話題になっていたものの、本編発売後はそれほど取り上げられることが少なかったゲームを購入しました。


「写真をかざすと写真の中の世界が顕在化(3D化)する」というアイデアはパズルのメカニクスとして斬新でゲーム開始時のファーストインパクトは非常に大きいと思います。思わず「すげー」と声がでそうになるほど。

同じようなコンセプトのゲームで『Superliminal』というゲームがありますが、遠近感の錯覚を利用しオブジェクトの大小を変えることで解法を探す『Superliminal』と比べ、こちらは「2Dの写真で3D空間を上書きする」というメカニクスであるため、到達不能と思える場所には壁を写した写真をかざして足場を作る、数が不足しているアイテムは写真に映してコピーを作るといった、どちらか言えばストレートな考え方で正解に辿り着く問題が多い印象です。

この為、パズルの難易度的には低く、ゲーム後半でも詰まる場面は殆どありませんでした。ボリューム的にも3,4時間程度で終わってしまう為、人によっては物足りないものに感じるかもしれません。
とは言え、Steamのレビューでも「非常に好評」となっているように、「写真で空間を上書きする」というアイディアを可能な限り活かしてゲームに落とし込めており、徐々に難易度が上がっていくパズルに対して、それを解いた時の爽快感は終盤まで落ちる事はありませんでした。
3,4時間程度で終わるボリュームの少なさも、逆に言うと「写真で空間が上書きされる」という最初の驚きを超えるような事象は最後まで起きないので、このクリア時間程度で終わるのが丁度良い塩梅なのかもしれません。

 

VContainerとMVPパターン

前回の記事でUnityでDIコンテナを実現するアセットVContainerを紹介しました。

www.karvan1230.com

その具体的な利用例として最も最適なのがMVPパターンによる実装だと思います。
MVPパターンとはデザインパターンの一種で、ザックリ説明するとPresenterという仲介者を挟むことでプロジェクトの内部処理(Model)と表示処理(View)との依存関係を無くそう、という設計思想になります。


上の図では事務処理を行う部署(Model)とプレゼンテーションを行う部署(View)は互いの仕事に全く関与せず、それを仲介する部署(Presenter)を通してデータのやり取りを行っています。こうすることで、たとえどちらかの部署に大きな内部変更があったとしても、もう一方の部署の業務には影響を与えることが無くなります。
これよりModelとViewとは互いの依存関係は無くなりますが、逆にこれらを仲介するPresenterはどうしてもModelとViewに依存する形となってしまいます。
そこでVContainerを利用すればPresenterもModelとViewに依存しない形として実装することが可能となります。

サンプルプロジェクト

今回はUnity公式からデザインパターンの学習用としてリリースされているサンプルプロジェクトを使って見たいと思います。

github.com

こちらにMVPデザインパターン用のシーンがあります。

 

このシーンでは画面中央の的に対してマウスをクリックすると画面下部のHealth値とそれを示すバー(スライダー)が減っていきます。

これはマウスの入力(Clickイベント)を受け付けると

  1. Presenterに対してHealthの更新を依頼する
  2. PresenterはModelに対してHealthの減算を依頼する
  3. 同時にPresenterはModelが発行する更新ベントの受け手に登録
  4. ModelがHealthの減算を行い、更新イベント発行
  5. イベントを受けたPresenterがViewへ表示の更新を依頼

という順序で処理が行われます。

上図でもわかる通り、現状ではModelとViewは互いに疎結合ですが、PresenterはModelとViewに依存しています。

 

VContainerを導入

ここでVContainerの登場です。

 

まず事前準備としてPresenterは参照しているModelとViewのインスタンスをコンストラクタの引数に設定してVContainerから受け取れるようにします。

次にVContainerのLifeTimeScopeを継承したクラスを作り、その中でPresenter,Model,Viewを登録します。

各クラスの登録は必ずConfigureメソッド内で行いますが、登録に用いるメソッドはPresenter,ModelとViewで異なります。

Model、Presenterはそれぞれシーン内で一意で良いため、「Lifetime.Singleton」というオプションをつけて登録(Register)します。
Viewは、シーン内に存在するスライダー(Viewがアタッチされている)が処理の対象となるため、ヒエラルキー内でViewクラスがアタッチされているオブジェクトを探して登録する必要があります。この為、登録には「RegisterComponentInHierarchy」を使用します。

ここまで実装出来たらVContainerへの登録は完了したので、後はマウスクリックの入力を受け付けたタイミングでVContainerから取得したPresenterクラスへHealthの更新を依頼して処理を実行します。

■実装例

 

おわりに

VContainerの使用例の説明を行いました。

DIコンテナを導入することでSOLID原則に沿った綺麗な設計を行うことが出来る事が分かった思います。

とはいえ、このパターンを実装すれば色んな問題が解決する、というわけではないので導入前にはプロジェクト内のどの場面で利用できるのかきちんと整理する事が重要です。

 

宣伝

数学的脱出ゲーム「W.T.」早期アクセス版リリース中です。
歯ごたえのある脱出ゲームとなっているので腕に自信のある方のチャレンジ、お待ちしております。

store.steampowered.com

 

【アセット紹介】DIコンテナを使った疎結合デザインの実現 VContainer -概要編-

マスク

コロナ禍が一旦落ち着いてやっとマスクから解放されたと思っていたらインフルエンザと花粉症で再びマスク生活に戻った皆さんこんにちは。ここ最近外を歩くとマスクをしている人の方が多い気がします。電車とかノーマスクで乗っていたらちょと視線を感じるし。

 

SOLID原則

個人でゲームを開発している分には開発した本人がメンテナンスを出来さえすればどんなコードでも構わないのでしょうが、チーム開発だったり、私みたいに作っている最中に仕様変更を繰り返すような人間には出来るだけSOLID原則に沿った設計で開発を進める方が、後々の作業のし易さに直結すると思います。
SOLID原則とはソフトウェアの拡張性や保守性を高めるために設計時に考慮すべき開発原則で、ネットで調べれば解説記事が数多く上がっていますし、私もこのブログで記事にしています。

www.karvan1230.com

 

SOLID原則の中では基本的に各クラスは一つの役割を担うべき(複数の機能を持たない)なので、設計時に機能を細分化して各クラスに実装しますが、とはいえメイン処理に該当するクラスでは各機能を担うクラスへ処理依頼を出したり、処理結果を取得したりする必要があり、どうしても各クラスを参照する密結合な実装になりがちです。

密結合な例

 

そうするとメイン処理側は参照している各機能クラスが全て実装された後でないと実装できないし、各機能クラスが更新される度に影響を考慮する必要となります。

この為、それらの問題点の回避策として各機能クラスへの参照は共通的なInterfaceを介して行うようにする、といったデザイン設計がとられる事が多いです。
そうすることでメイン処理側も各機能の実装を待たなくても良いですし、各機能クラスの更新や入れ替えといった作業にも耐えうることが出来ます。

Interfaceを利用した疎結合モデル

 

上の図のようにメイン処理側が参照する各機能クラスのInterfaceは外部から渡される形式とすればメイン処理と各機能クラスは完全な疎結合な状態になることができます。では、各機能クラスのインスタンスは誰が生成してメイン処理に渡してくれるのか?
そういった役目を担ってくれるのが「DIコンテナ」と呼ばれるフレームワークになります。

DIコンテナの利用

 

VContainer

DIコンテナはクラス間の密な依存関係を外部で一元管理して疎結合な関係を実現し、問題を解決します。
Unityでは「Extenject(旧 Zenject)」といったアセットが有名ですが、今回は「VContainer」というアセットを取り上げます。

VContainerはExtenjectと比較して軽量で、シンプル形式のAPIを使用するため実装がわかりやすく、且つ無料です。
GitHubにunitypackageがリリースされているので、そちらをダウンロードしてUnityのプロジェクト内に取り入れる事ができます。

github.com

Unityでは基本的にGameObjectにMonoBehaviourを継承したクラスをアタッチして処理の起点としますが、VContainerを使用することで、純粋なC# クラスのエントリポイントをつくることができます。

これによりMonoBehaviourとは切り離して純粋なロジックのみのクラスを実装でき、より依存性が低い設計モデルを構築する事ができます。

 

概要

VCointanerは以下の流れで使用します。

  1. ContainerBuilderを生成
  2. ContainerBuilderに使いたいクラスを登録
  3. ContainerBuilderからIObjectResolverを生成
  4. IObjectResolverを通して使いたいクラスを取得

これを先ほどの図を使って表すとこんな感じ

VContainerを使用した関係図

手順だけを見ると少し複雑でコードの量が増える気さえしますが、上の1~3の部分はそれを担うコンポーネントがシーン内に一つあればよく、IObjectResolverから受け取るクラス(上の図ならMainService)はContainerBuilder内で一様(Singleton)に保持されているのでどこから取得されても同じものを使用する事ができます

これよりクラス間のデータの引き渡しもコンテナ内のクラス(上の図ならMainService)を介して行う事ができるので利便性が向上します。

 

Hello Worldは次回

概要の説明だけで記事が長くなってしまったので、具体的な使用例は次回紹介したいと思います。

 

【小ネタ】DOTweenのSetEaseの第二引数って何に使うのか

アベイラブル

「デフォルト」や「エビデンス」などの言葉を会話の中に混ぜる人はよくいますが「アベイラブル」を使ってくる人は初めて遭遇した皆さんこんにちは。どうやら「available=利用可能=手が空いてる」らしいのですが、何の連想ゲームですか?それなら素直に「手が空いてます」と言えよ。

 

福岡インディーゲームEXPO

先週末は東京ゲームダンジョン4が行われていた為、X(旧Twitter)やYoutubeでは展示作品の紹介や会場のレポート、プレイした感想等の投稿を見る事ができます。東京から遠く離れた地方民としては会場の様子を知ることができて有難い限りなんですが、やっぱり参加したかったなぁ、という思いが強いです。
去年初めて展示会イベントに参加して、自作ゲームを遊んでもらえて、直接感想を聞ける体験の重要さを知ったので、展示会イベントには積極的に参加しようと決めたのですが、東京に行くにも大阪に行くにもそれなりに時間と経費が掛かり、懐の関係上、おいそれと出掛ける事は出来きません。
出来れば地元の福岡でもインディーゲームの展示会イベントがあればなぁ、と思っていたところ、つい先日福岡インディーゲーム協会より「福岡インディーゲームEXPO」が開催される発表がありました!

www.fukuoka-indiegame.com

キャナルシティ博多で3/23,24の二日間行われること以外の詳細は発表になっていないのですが、展示会イベントに参加できず燻っている私にとっては非常に嬉しい発表です。
「福岡インディーゲームEXPO」は2022年にも一度開催されていますが、その時は参加できなかったんですよね。「次に開催された時は」と思っていたので、準備期間が約二か月とあまりありませんが、これから参加の準備を進めたいと思っています。まぁ、現時点では参加要項が分からないので参加できるのかわかりませんが。

 

Easing

DOTweenでEasingを指定する時は大抵「Ease.Liner」「Ease.InSine」などDOTweenが用意した列挙型クラスを使うのですが、変化率を確認しながら指定したい場合はAnimationCurveをSetEaseにそのまま指定することもできます。
一般的なEasingのAnimationCurveは有難い事に有志の方がPackageとして公開されているのでこちらを導入することをお勧めします。

baba-s.hatenablog.com

上記のPackage導入後は、AnimationCurveのウィンドウで歯車アイコン→Presetsから「EasingFuncitions」指定して使用することができます。

 

第二引数

DOTweenのドキュメントを確認して知ったのですが、SetEaseには特定のEasingにのみ対応したパラメータが存在します。

assetstore.unity.com


まず、Back系のEasing(InBack,OutBack)に対しては「Backする大きさ」を第二引数で指定できます。
試しにInBackでデフォルト値(1.70158)より大きな値を第二引数に指定して比べてみるとこんな感じ。

確かにBackする距離が伸びている事が分かります。

 

次にElastic系(InElastic,OutElastic)に対しては「振幅の大きさ」を第二引数で指定できます。
こちらも先程と同じようにデフォルト(1.70158)と、それより大きな値を第二引数に指定した場合を比べてみると

こんな感じで挙動に違いが出る事が分かりました。

 

EaseFactory

SetEaseには拡張的な使い方として「EaseFactory」を使用してストップモーションで再生しているかのように動作させる事もできます。
指定の仕方は以下のように、Easingをラッパーして第一引数に停める頻度?を設定するようです。

transform.DOMoveX(4, 1).SetEase(EaseFactory.StopMotion(5, Ease.InOutQuint));

イマイチ使いどころが分からないんですが、取り合えずEase.Linerについて比較してみます。

確かにTweenが途切れ途切れで再生されるような感じですが、EaseFactory.StopMotionの第一引数は「停める回数」の指定ではないようで、値を大きくすれば止まる回数は多くなりますが、値の回数分止まるわけではありませんでした

3を指定したら3回止まるわけではない。

う~ん、やっぱり使いどころが分からない。この機能を使った良いアイデアがある方はぜひご教授下さい。


【アセット紹介】現状では最速?のTweenアセット「LitMotion」

不慣れ

左手デバイスのボタンを右手で押してる不器用な皆さんこんにちは。購入して一週間以上経ちますが未だに不慣れで、ショートカットを登録したボタンを探す→右手でボタンを押す、の順で操作しており私の左手はちっとも活躍していません。まぁUnityでマウス操作をしながらキーを押す、というシチュエーションがあまり無い所為でもありますが。

 

フリーライドとリスペクトの間

フロムゲーが「ソウルライク」という名の下に多数の(特にインディー系の)ゲームから模倣されているように、ポケモンにおいても「ライク」としてカテゴライズされて一般化していれば、たとえ模倣の度合いが過ぎても大騒ぎには発展しなかったかもしれません。
しかし残念ながらこれまで「類似」とされてきたゲームの殆どが躓くか一時的なヒットに終わって「ライク」化するまでに至っていないので、今回のように「ぼくのかんがえたさいこうのポケモン」的ゲームが批判されるのは仕方のない事だなと思っています。

特に「ポケモン」に対して思い入れのあるファンにとっては、いくら制作側が「法的に問題ない」と強弁しても、日本で長らく愛されてきた強いIPをフリーライドしているようにしか見えないでしょうし、「ポケモン」に類似する「パル」に対して強制労働や虐待、殺害が行えるゲームデザインは許せないものでしょう。
私としては「クラフト要素のあるポケモン」「サバイバル要素のあるポケモン」というアイデアを具現化するというだけでもかなり凄い事だと思いますし、元ネタに対しても十分敬意を払っているように感じますが、今回の騒動は制作側がそれを世間一般に理解してもらえる為の努力が足りなかったのかなぁ、という感想です。

 

LitMotion

前回の記事で高速なTween系アセット「Magic Tween」を紹介しましたが、これと同じ作者の方が新しいTween系アセットを公開しています。

annulusgames.com

ECSを使用して高速化を実現した「Magic Tween」よりも更にECSの仕様に合わせて高速化を図ったアセットらしく、公開されたスペックでは「DOTweenの5倍以上、MagicTweenと比較しても1.5倍ほどと極めて高速」のようです。

このアセットの導入に必要な要件は以下の通り

  • Unity 2021.3 以上
  • Burst 1.6.0 以上
  • Collection 1.5.1 以上
  • Mathematics 1.0.0 以上

こちらのアセットもGitで公開されている為、導入する場合はGitURLを利用します。
UnityのWindowメニューからPackageManagerを開いて「+」ボタン > git URLからパッケージを追加してください

https://github.com/AnnulusGames/LitMotion/blob/main/README_JA.md

 

基本的な使い方

MagicTweenではDOTweenとほぼ変わりない使用法でTweenを生成することができましたが、こちらのLitMotionではECSのデータ指向に沿う為か全く違う指定の仕方でTweenを生成します。
具体的には

  1. floatやVector3等の値をTweenさせるMotionクラスを生成する
  2. MotionクラスでTweenされている値(floatやVector3等)の反映先を指定する
  3. LoopやEasing、完了コールバックなどのオプションはMotionの拡張メソッドで設定する

上記の手順でTweenを作成、実行します。
この為、ソースへの記述は以下のようになります。

var value = 0f;
LMotion.Create(0f, 10f, 2f)  // 開始値,終了値,動作時間
    .WithEase(Ease.OutQuad)
    .WithComplete(() => Debug.Log("Complate!"))
    .Bind(x => value = x);

上のソースの「LMotion.Create(0f, 10f, 2f)」の部分が「値をTweenさせるMotion」を意味します。
拡張メソッドの「WithEase」「WithComplete」でEasing、完了コールバックを指定しています。
最後の「Bind」の箇所で「値の反映先を指定」する事になります。
よって上のソースでは「valueの値が2秒で0から10へ変化し、完了後に"Complate!"というログを出力する」という動作となります。

LMotion.CreateでTweenさせる事が出来る変数の型は以下の通りです。

  • int
  • long
  • float
  • double
  • Vector2,Vector3,Vector4
  • Quaternion
  • Color
  • Rect

 

GameObjectを動かしたい

もっと具体的にDOTweenのようにGameObjectを動かしたい場合は、「Bind」の箇所でGameObject.transformのpositionに値を設定する事になります。

Transform target;

LMotion.Create(Vector3.zero, Vector3.one, 2f)
    .Bind(x => {target.position = x;});
上のソースだと「targetの位置を2秒で(0,0,0)から(1,1,1)へ移動させる」という動作になります、
ただ逐一、Bindの中で反映処理を記述するのは面倒くさいので、positionを動かす場合は専用のBindメソッド「BindToPosition」を利用します。

 

Transform target;

LMotion.Create(Vector3.zero, Vector3.one, 2f)
    .BindToPosition(target); // target.positionにバインドする

position以外にもLocalPositionやeularAngle,localScale等、専用のBindメソッドが幾つか用意されているので詳細は作者の方が公開しているドキュメントを確認してください。

annulusgames.github.io

 

注意点

ドキュメント方で作者の方も述べられていますが、高速化に特化して設計されたアセットであるためMagicTweenほどDOTweenと同様の機能を備えているわけではありません

特にSeqneuceは実装されておらず、今後も実装される事はないようなので、Tweenを組み合わせる場合はコルーチンやUniTask等を使用して自力で組み合わせる必要があります。
また、オプションについても残念ながら相対的(Relative)なTweenを指定するオプションはないので、相対的な動作をさせたい場合はそれを踏まえた値を指定するか、Bindの拡張メソッドを作成する事になります。
Bind拡張メソッドについて上記のドキュメントで具体的な実装方法が書かれているので、試しに相対的な移動(RelativeMotion)についてBind拡張メソッドを作ってみました。

 

まとめ

上記のように記述方法がDOTweenとは大きく異なるため、MagicTweenのようにDOTweenから直接的に移行するのは難しいかもしれません。
また、DOTweenと比較して機能は限定的であるため、使いどころ及び実装方法を事前に検討する必要があります。
それでも「DOTweenの5倍以上」というスペックは魅力的ですしドキュメント等も充実している為、これから新規にプロジェクトを起こす際には導入を検討しても良いのではないでしょうか。

【Unity】ハイパフォーマンスと噂のTweenアセット「MagicTween」を触ってみた

Reddit

海外ではXやらインスタよりもメジャーだと聞いて自作ゲームの宣伝のために導入したものの一切活用できていない情報弱者な皆さんこんにちは。無駄に通知だけは毎日受信しているのですが全てのメッセージが英語の為、全く意味が分かりません。誰か助けて。

 

左手デバイス

以前クラファンで購入予定だったもののプロジェクトが停止となり(返金された)、それ以降購入する予定がなかったのですが、ここ最近の怠惰な自分を反省し、ゲーム開発へのモチベーションを上げる為に購入してみました。

 

ack05 ショートカットリモート ワイヤレス接続 or 有線接続両方対応の左手デバイス | XPPen公式ストア

キーボードのショートカットを割り当てたり、一連の操作をマクロ的に実行する事ができるアイテムです。本来はタブレットで絵を描くような方が使用する為のデバイスなんですがUnityでもキーのショートカット割り当てやSceneビューでの拡大縮小の操作を行う事ができます。

これまではTransformのGlobal/Localの切替や、Gameビュー/Sceneビューの切替、空オブジェクトの生成などの操作はゲーム制作内で頻度が高く地味に面倒だったのですが、それらをこのデバイスのキーに割り当てることで作業効率が少し上がった気がします。

「ショートカットなんて覚えれば良いだろう」と言われたらそれまでなんですが、このデバイスなら1グループで10個ほどの操作が割り当てられ、グループを切り替えれば4グループ×10キー程の操作を扱えるので、私のような忘れっぽい方には非常に便利です。

また「どのキーにどの操作を登録したか忘れる」というような方でも、キー用のシールが付属しているのでそれなりに目印になります。
まぁ、Unityを扱う上では必須ではないのですが、有ればそれなりに有用なツールになると思います。

 

MagicTween

これまでTween系のアセットと言えばDOTween一択で使用していたのですが、調べてみると新しいTween系のアセットがソコソコ出回っているようで、その中でも「MagicTween」というアセットはECS(Entity Component System)を使用したTween系アセットらしく、かなりパフォーマンスに優れているらしい。公開されているパフォーマンスの比較を見ても圧倒で気に優れているので導入を検討することにしました。

パフォーマンス比較

このアセットはアセットストアで売られているアセットではなく、有志の方によって作成され、Gitで公開されているアセットです。

その為、導入にはアセットストア経由ではなくGitURLを利用するため、事前にGitをPCにインストールしておきます。

gitforwindows.org

また、ECSを利用するためUnityのPackageManagerから「Entities」を導入しておく必要があります


ちなみにUnityのバージョンはUnity 2022.1以上である事が必須です。

Gitをインストールし、Entitiesを導入したことを確認したらPackageManagerの「Git URL からパッケージを追加」から以下のURLを指定してインストールを行います。

https://github.com/AnnulusGames/MagicTween.git?path=/MagicTween/Assets/MagicTween

 

使い方

作者の方のHPにて詳しく解説されているのでそちらを参考にするのが一番正確なんですが、ザックリ解説するとDOTweenと殆ど同じような 記述形式で使う事ができます

annulusgames.com

例えば移動系のメソッドの場合、DOTweenと同じくtranformの拡張メソッドして使用する事が出来る為

transform.TweenPosition(終了位置, 動作時間);

の記述となり、EasingやRelativeなどのオプション指定はSetterから設定することができます。

transform.TweenPosition(終了位置, 動作時間)
          .SetRelative(true)
          .SetEase(Ease.Liner);

コールバックの指定もDOTweenと殆ど同じです。

transform.TweenPosition(終了位置, 動作時間)
          .SetRelative(true)
          .SetEase(Ease.Liner)
          .OnComplete(コールバック関数);

 

しかし残念ながらPath移動に関して経由地毎のコールバック(OnWaypointChange)は無いようです。
これに関してはPath移動専用のコールバックという事もあり、優先度的に低いと判断されたのかもしれません。

この他にも複数のTweenを登録できるSequenceもDOTweenと同様に使う事ができ、DOTweenではPro版のみの機能であったTextMeshに対するTweenのメソッドも用意されています
各種メソッドやオプションの細かい説明、利用法に関しては有難い事にReadMeも(日本語で)用意されているので、そちらを参考すれば困ることはないと思います。

github.com

注意点

このようにUnity 2022.1以上のバージョンを使っていてEntitiesパッケージの導入に差し障りがなければ、DOTweenからMagicTweenへの移行はパフォーマンス面の利点を考えれば十分検討する価値があると思います。
しかしながら、DOTweenとの挙動の違いは多少存在するようで、前述のOnWaypointChangeコールバックがない事に加えて、任意の値を変更するToメソッドにおいてはOnUpdateのコールバックのみで値を参照すると、Tweenが完了しても目的の値までには達しない、という事が分かりました。

Toメソッドで0から10まで変更→OnUpdateコールバックで参照した場合

 

OnCompleteコールバックでも加えて参照するようにすれば目的の値まで到達することは確認できたので、この辺に関してはDOTweenからそのまま移行する、というわけには行かないようです。

OnUpdateとOnCompleteで参照した場合

 

他にもPath移動のPathの指定によってはDOTweenのPath移動とは少し違う挙動が見受けられたので、DOTweenから完全に移行する前には一度挙動を確認することをお勧めします。

何よりこのアセットは有料のアセットではなく、有志の方によって公開されているアセットです。
作者の方に対して際限ない動作保証や継続的な更新を期待することはお門違いだと思うので、その点を踏まえた上で自己責任で使用される事を願います。

 

宣伝

数学的迷宮脱出ゲーム「W.T.」早期アクセス版リリース中です。

store.steampowered.com

色々と難局に遭遇して牛歩の進みなんですが、製品版リリースに向けて頑張っているので、何卒応援の程、よろしくお願いいたします。

【雑記】2024年の活動目標

末吉

初詣に行って御神籤を引いたら末吉でその運勢通りに新年早々から上司に嫌味を言われたり気になっていた女性から婚約したことを告げられたりとやんわり嫌な事続きで不憫な皆さんこんにちは。去年そんなに悪い事しましたかね?結構いろいろ頑張ったほうだと思うんですけど(本業以外)。まぁ、最初に少し運が悪い方が後々上昇し易いと思うので、今年の干支(辰)のように運気が上向く事を期待したいと思います。

 

面白いけど疲れるゲーム

日本では無名ながらも、あのティアキンを抑えてGOTYを獲得したという事で一部界隈で話題のゲームを購入しました。

TRPG(テーブルトークRPG)がベースとなっているゲームなので、RPGとは言え、あまり日本のゲームでは馴染みのない仕様のゲームです。
私自身もTRPGの経験はないし、TRPGについてはおおよそのイメージしか持ち合わせていない為、何をするにもダイスを振って正否を決めたり、いきなり天の声が流れて主人公の心情や周りの状況が説明されたり、簡単にNPCが死んで復活もない、など慣れるまでは色々と戸惑う場面が多かったと思います。
(学生時代にTRPGに興味がわいてそっち系のサークルを訪れたものの、TRPGを遊んでいる最中の方々からは全く相手にされず、「あの~、見学したいんですけど・・・」と声を掛けても誰かの応答ももらえなかったので、そのままスゴスゴと部屋を出た記憶)

特に戦闘の場面は「コマンド式&ターン制の戦闘」ながらも各コマンドの説明に専門的な用語が並んだり、ストラテジーゲームのように地形や地理的な優位性を考慮する必要があったりと、頭を悩ます場面が多くて戦闘の一戦一戦に時間が掛かって非常に疲れる印象でした。
Amazonレビューなどを見ても「覚える事が多くて大変」という感想も見受けられ、賛否両論となっているのも納得できます。
それでもその高い敷居を乗り越えると、敵と真正面から戦うだけでなく、敵陣の真上にある火鉢を矢で落としてダメージを与えたり、姿を透明化させて背後から致命傷を狙ったりと様々な方法を試すことができるようになり、戦闘を前に戦略を練る事が楽しくなっていきます。

選べる魔法やスキルが膨大で、スキル構成も自由に構築できるなど、ゲーム内で色々な選択、戦略が楽しめますが、その分、UI等の操作は煩雑で独特な用語にも慣れる必要があります。
その為、万人にお勧めするゲームとは言えませんが、より深いゲームプレイを体験したい方は手に取っても損はないゲームだと思います。

 

Unity1Week

殆どUnity2Weekになってしまったのですが、何とか年末ギリギリで投稿を済ませる事ができました。

unityroom.com

自分としては結構力を入れて作ったつもりなんですが、結果は評価点でも、閲覧数、コメント数でも、ここ最近では最低に近い結果となってしまいました。要因はアレコレあるのでしょうが、そういった原因を考える以前にUnity1Weekへの参加はもうこの辺が潮時なのかなぁ、という印象です。

まぁ、愚痴やネガティブな事を言っても結果が覆るわけではないので、とりあえずいつも通りプレイ動画を作成して終わりにしたいと思います。

youtu.be

 

今年の活動について

今年の最優先課題として考えているのは、去年の夏に早期アクセス版としてリリースした数学的迷宮脱出ゲーム『W.T.』、こちらをきちんと製品版として仕上げて正式にリリースする事。

store.steampowered.com

現在は全5章中4章までを作成しており、早期アクセス版で遊んで頂いていますが、色々と問題が見えてきたので、今一度、早期アクセス版をアップデートする必要があると思っています。

特に操作周りについては、去年2回参加した展示会でブラッシュアップが足りていないことを実感したので、より快適に遊んでもらえるよう操作性を改良していく予定です。

未だ手の付いていない最終章の方は操作性改良後に本格的に取り掛かる予定ですが。構想的に1~4章を合わせたぐらいのボリュームになりそうなので、製品版が完成するまでには当初予定(2024年春)よりは時間が掛かるかと思います。

それでも今年中には必ず正式リリースする、という意気込みで制作に勤しんでいきたいと思います。

youtu.be

新作

W.T.』の完成が最優先ですが、それと並行して次作の製作にも取り掛かる予定です。

今回のunity1weekでは惨敗しましたが、実は今回の投稿作品は次作を意識して作成しており、自分的にはこれを発展させていく予定でいます。

今回の作品そのままにステージ数を増やす方向でいくか、別の形で昇華させていくのかは未定ですが、グラフィックスの方向性やゲームコンセプトは変えずに今後の展開を考えていきたいと思っています。

 

ゲーム展示会

去年は「東京ゲームダンジョン」「デジゲー博」といった二つの展示会に出展できましたが、今年も参加できる展示会には参加する予定です。

www.karvan1230.com

www.karvan1230.com

前回、前々回と同様に『W.T.』を展示するのか、新しく次作を展示するのかは未定ですが、展示会はお客さんの反応を直に確認できる貴重な機会なので、積極的に参加して今後の糧にしたいと思っています。

直近で狙っているのはGWに開催予定の「東京ゲームダンジョン5」辺りなんですが(「東京ゲームダンジョン4」は締め切りに間に合わず)、この展示会は先着順に出展が決まるので出展募集を見逃さないように注意したいと思います。

 

最後に

去年は「ゲームクリエイター」としてやっと第一歩を踏み出せたと思うので、今年はその足を止めることなく、さらに前進して「ゲームクリエイター」として自立できるようになりたいと思っています。

また、ブログの方はこれまで通りにUnityネタを基本としならがらも、気ままに好きなことを書いていきたいと思っています。(ここ最近はだんだんとゲーム紹介の量が多くなってきた気もするけど・・・)

 

今年もよろしくお願いします。m(_ _)m

【雑記】怒涛の一年にしたかった2023年振り返り

クリスマス

今年のクリスマスも自主的に辞退した倹約家な皆さんこんにちは。日本人の風習に沿わないイベントに浮かれてプレゼントを買ったり、出掛けたり、お金を浪費するなんて愚の骨頂ですよね。まぁ、今年は急な冬将軍の到来により一歩も部屋から出なかったので当日がクリスマスイブであることも認識出来てませんでした。TVもYoutubeも殆ど観なかったのでいつの間にか終わってた。良かった良かった。

 

unity1week

それにこちとらunityroomの定例イベントUnity1Weekに飽きもせず参加している為、他の事にかまけている暇がありません。

unityroom.com

今回は寒波の影響により2日間ほどテレワークという名の休暇を開発時間に廻せたのですが、その甲斐なく未だ開発中です。なぜでしょう?自分でも不思議です。もう世界の七不思議に加えても良いと思う。

 

まぁ、一度締め切りを過ぎてしまえば、一日の遅刻も一週間の遅刻も同じ事だと、開き直っているので、今回はゲームの開発時間をちょっと割いて今年の振り返りをしてみたいと思います。

 

ゲーム制作

ずっとコツコツ作ってきた自作のアドベンチャーゲーム「W.T.
今年ようやく早期アクセス版をリリースすることが出来き、存外にも収益を獲得することができました。ありがとうございます。

store.steampowered.com

そしてこれを引っ提げて「東京ゲームダンジョン」と「デジゲー博」といった展示会にも出展することができました。

www.karvan1230.com

www.karvan1230.com

出展による直接的なリアクションはこれと言ってないのですが、体験版を試遊してもらったことでユーザ目線での操作感やらゲームへの理解度について知見を得る事が出来ました。

現在はストーリーの全五章中四章までが完成している状態で、これから最終章の作成に取り掛かりますが、展示会で得た知見をもとに更なるブラッシュアップに励みたいと思います。

 

ブログ

去年ぐらいから閲覧数がじわじわと右肩上がりだったのですが、今年は更に伸びてそれによる収益も年一回から年二回貰えるぐらいになりました。ありがとうございます。
ほぼ週一ペースで需要に沿わず好きな事を書いているので、それを読んで頂けている、という事だけでも有難いと思っています。

あまり記事毎の閲覧数とかは気にしてないのですが、アセットの紹介記事がUnityの技術系の記事よりも人気なようで、ここ最近では随分前に書いたKoreographerの紹介記事がよく読まれているみたいです。

www.karvan1230.com

まぁ、確かにソコソコ値段のする有料アセットだと購入前にどんなアセットなのか調べたくなりますからね。使い方を調べる場合でも英語じゃない日本語の記事を優先的に探すでしょうし、そういった方の助けになれば幸いです。これからも購入したアセットはドンドンこのブログで紹介したいと思います。

 

来年は・・・

2022年と比べるとゲーム制作において活動ペースは変わらないながらも、活動内容を表に出す機会が多かったと思います。自作ゲームを(早期アクセス版ながら)リリース出来たし、展示会は二回も出展出来たし。

出来ればもう少し外部から何かしらのリアクションが貰えて、怒涛の対応に追われるような一年にしたかったのですが、結果はほぼ無風。
unity1weekでもこれといった目立った成果を上げられていないので、ゲーム制作者として「ゲームクリエイターです」と自己紹介ができるような成果を上げて行きたいと思います。

まぁ、その為に「W.T.」を完成させないといけないし、インディーゲームのコンテストで名前が挙がるような作品を作らないといけない。
難易度は高いと思いますが、理想を実現するには自分で動くしかないので、出来ることを精一杯頑張りたいと思います。

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。