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

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

【Unity】Shapesのステンシル設定を利用したマスク表現

自動車税

GWに浮かれて洋服を購入したりプリンタを新調したりアレコレと浪費していたら「自動車税を今月中に払え」と通知が来て赤貧になりかけた皆さんこんにちは。GWと母の日と自動車税の時期が重なるのは国の罠だと思う。

 

ステンシル

Unityではシェーダーの機能として1pixel毎にそのpixelの描画有無の判断として利用できるバッファ領域(ステンシルバッファ)が用意されています。
ステンシルバッファではpixel単位に8bitの整数値を設定する事が可能で、後続のドローコールでその整数値を参照してピクセルを廃棄するか描画するかを決定します。

docs.unity3d.com

これは3Dオブジェクトにマスク表現(切り抜き描画)を行いたい時に良く利用される機能ですが、アセットストアで販売されているような一般的な(トゥーンシェーダーのような)シェーダーには、このステンシルに対する操作のパラメータを用意している物は殆どなく、マスク表現をしたい場合にはマスク専用のシェーダーアセットを購入するか、シェーダーを自分で改良or作成するかの二択になっていました。

一応、技法として確立している為、Web上を検索すると有志の方がステンシルバッファを利用したマスクシェーダーを公開していたりするので、こちらを利用する事も可能です。私も以前お世話になり、このブログで紹介させてもらいました。

www.karvan1230.com

 

Shapesというアセット

Shapes」というアセットはゲーム空間に円、線、矩形といったプリミティブな図形のオブジェクトを作ることができるアセットで、図形描画に必要なパラメターをInspetor上やスクリプトで自由に変更可能な為、非常に使い勝手が良く、その辺りの基本的な機能については以前記事にしました。

www.karvan1230.com

で、このShapesではステンシルバッファに対して書き込み・参照もどちらも可能なパラメターが用意されている為、これを利用すればマスクとして手軽に利用する事が出来そうです。

赤い四角部分がステンシルバッファに対する設定箇所

 

例えば下図のように黒円の前に白三角がある場合、カメラからは白三角しか見えません


そこで黒円側のInspectorにてRef値に値を設定&Passの値に「Repalce」を選択してステンシルバッファにその値を書き込みます

 

白三角側ではRef値に黒円側と同じ値を設定し、Compareに「Equal」を選択すると

 

黒円側がステンシルバッファにRef値を書き込んだ領域のみが描画されるので、円形に切り抜かれます(マスキング)

 

逆にCompareで「NotEqual」を選択するマスク側と重なっていない領域が描画され(逆マスク)、背後にある黒円が見えるようになります。

 

白三角をマスクの形(円形)で切り抜きたい場合には、マスクする側(黒円)のColorのAlpha値を「1」と極めて小さい値にします。0だとステンシルバッファにRef値が設定されません

黒円のColorのAlpha値を「1」とした場合

 

ここで一番最初にお見せしたカメラと白三角、黒円の位置を確認するとマスクとなる黒円が白三角よりカメラから見て奥に配置されることに気づくと思います。

これはShapesでマスキングをする場合、ステンシルバッファに値を書き込む側(マスクする側)のオブジェクトは参照する側(マスクされる側)より奥に設置する必要があるためです

というのもShapesではRenderQueueがデフォルトで3000(Transparent)となっている為、

  • UnityではRenderQueueが2500以上の場合はカメラから遠い順に描画される
  • マスクされる側(ステンシルバッファを参照する側)よりマスクする側(ステンシルバッファを更新する側)の方が先に描画される必要がある
  • よってマスクする側をマスクされる側より奥側に設置する

となるからです。(以下のリンク参照)

www.vr-fluffyscafe.com

 

この性質を利用

先述のようにShapesのRenderQueueがデフォルトで3000(Transparent)となっている為、通常(不透明)の3Dオブジェクトの描画後にステンシルバッファの更新→参照が行われる事になります。
これを逆に考えると3DオブジェクトがShapesのマスクの手前にある領域ではステンシルバッファの更新はされない、という事なので、例えば下図のようにマスク側(白四角)のオブジェクトとマスクされる側(黒四角)の間に少女の3Dモデル(不透明)がある場合では

(カメラから見て)少女モデルが白い四角を遮っている為、その部分はステンシルバッファに値が書き込まれず、マスクされる黒い四角部分に本来なら見えないはずの少女モデルが見えるようになります。

 

これを先ほどと同じようにマスクされる側の設定を「NotEqual」(逆マスク)に変えてみます。

先程とは逆に少女モデルの部分に逆マスク部分(黒い四角)が反映されて影絵のような表現になりました。

少女を歩かせてみるとこんな感じ

マスク部分でShapseの黒四角が少女モデルの形に切り抜かれて表示されていますね。ちょっと演出に使えそうです。

 

【Unity】Splineを利用してLitMotionでパス移動を実現する

ゲーム漬け

休暇前はゲーム開発のみならずアレコレと意識高めの計画を立てるも結局は部屋に引き籠ってゲーム三昧だった怠惰な皆さんこんにちは。
このGW中には東京ゲームダンジョン5が開催されていたので東京近辺にお住まいの方はそちらへ出向かれた方もいらっしゃるでしょうが、福岡住まいの私は飛行機+ホテル代の高さと別の予定の為に参加を断念し、10連休のほぼ6割をRise of roninに費やし、そのうちの7割ぐらいの時間を道場での鍛錬(ボスキャラと1対1での対戦モード)で過ごすという全く"無駄"以外に表現のしようがない休暇を過ごしました。おかげさまで石火(パリィ)は非常にうまくなりました。そしてそれを誰にも誇れない事が残念です。

 

パス移動

ゲーム制作をしているとオブジェクトの移動は通常の直線移動以外に経路に沿った移動(パス移動)も必要となる事も多く、そういった場合はこれまで主にDOTweenのDOPath/DOLocalPathを使っていました。
逆に現状Tween系最速のアセットLitMotionではDOPath/DOLocalPathに該当するメソッドは用意されておらず、対策としてUnitaskとforループを駆使して経由点毎に移動を繰り返すような処理を組んでみたのですが、その手法だと経由点が多くなると指定した時間では経路全体を移動し終えない事もあったりで、DOTweenからLitMotionへ完全に移行する事はできませんでした。

なのでちょっと視点を変えて、DOPathのように通過したい地点の配列を使用するのではなく、それら(経由点)を通るようなSplineを利用する手法を取ることにしました。

4点を通るSpline

 

Spline自体はUnity2022以降であればPackage Managerからインストールする事ができ、Unityエディタ上で簡単にSplineを作成してくれるTool機能がついているので手軽に作成する事ができます。
導入法や簡単な使用法についてはこのブログでも以前記事にしているので、そちらを参考にしてください。

www.karvan1230.com

そしてこのSplineは便利なことに0~1の割合を指定すればEvaluteメソッドによりSpline上の指定した点での位置、向き、法線ベクトルといった情報を取得する事ができます。

 

割合をTweenする

という事は、その機能を利用して以下の手順で処理すれば経路に沿ってオブジェクトを動かすことが出来そうです。

  1. LitMotionで割合の値(0~1)をTweenさせる
  2. その値をEvaluteメソッドに指定してSpline上の地点(ワールド座標)を取得
  3. Bindで取得した地点をTransformに反映する

コードに表すとこんな感じ

LMotion.Create(0.0f, 1.0f, 移動時間)
    .WithEase(Ease.Linear)
    .Bind(
        value =>
        {
            // splineの位置、向き、法線ベクトルを取得
            spline.Evaluate(value, out var splinePos, out var splineTangent, out var upVector);

            // Transformに反映
            transform.SetPositionAndRotation(splinePos, Quaternion.LookRotation(splineTangent, upVector));
        }
    );

上の処理を組み込んだコンポーネントを動かしたいオブジェクトにアタッチして動作させてみると

狙った通りに動かすことが出来ました。

 

まとめ

今回の手法ではDOTweenのDOPathと比べてSplineを作るという手間は増えますが、逆にSplineで描いた自由曲線に沿った移動が可能なため使い勝手は良いのではないでしょうか。例えば

 

上のような曲線もSplineを作成して先程の処理を利用すれば

曲線に沿って綺麗に移動させることが出来ます。

【作業報告】アルファマスク使って少女の幽霊を作る

満員電車

毎年4月の初めになると朝の通勤電車が学生や新社会人で溢れて満員になるも、GWを過ぎたあたりから徐々に減り始め夏前にはすっかり元の乗車率に戻る事を知っている大人な皆さんこんにちは。ここ最近の新人の方は入社前の理想と入社後の現実とのギャップに挫けるというよりは、見習い・下働きといった下積み作業に耐性がなくて挫折する方が多いような気がしますが、実際どうなんでしょうか?

 

少女の幽霊

次作(Under A Groove)の新しいデモ版を作成するにあたりどうしても(ホラーではない)少女の幽霊のモデルが欲しかったのですが、アセットストアを漁ってもBOOTHを探してもコレといったものが見つからなかったので、既存の3Dモデルに手を加えて作ることにしました。

 

オリジナルのモデルはSURIYUNの「Farmer Girl SD」を使い、シェーダにはlilToonを使います。

 

booth.pm

lilToonではアルファマスクが使えるので、上のモデルのテクスチャ画像を基に少女の足元が徐々に消えて見えるようグラデーションを掛けたアルファマスク画像を用意します。



lilToon側の設定は「描画モード」を「半透明」に設定し

 

「アルファマスク」に「乗算」を指定してアルファマスク画像として上の画像を指定します。

 

するとこんな感じになりました。

まぁ狙い通りに足元は消えてくれたのですが、幽霊だから足元が見えないというよりは欠損したように見えるのでちょっと幽霊感が薄い感じがします。

 

発光させる

足元が徐々に消えるというだけではなく、逆に足元の部分が発光して見えるように設定を加えます。
なので今度はアルファマスク画像を反転して発光テクスチャ画像を作りました。

これをlilToonの「発光設定」にチェックを付けて上の画像を発光テクスチャとして指定します。

 

発光設定を加えたことで足元が白っぽく薄れて見えるので先程よりは幽霊っぽくなったと思います。

 

仕上げ

最後に足元の部分に光球がドロップするようなパーティクルを付けます。否が応でも常人ではない感がでるので、ただ足元を薄くするよりは「この少女は幽霊です」がプレイヤーに伝わりやすいかなと思います。

 

歩かせるとこんな感じに見えます

 

【Unity】Observerパターンの構築に役立つMessagePipe

悲哀

例の「年収4万で廃業」の話題を知りインディゲーム開発者としての悲哀を感じるより先にSNSでちょっとした話題になったことを羨ましく感じた狭量な皆さんこんにちは。例の方はゲームリリース時も一部SNSで話題になり、有名なゲーム実況者にも取り上げられていたので「実力不足」云々を嘆く前にSNSでバズる力があることを誇った方が良いと思います。それから開発者でもないただのゲームレビュアーがこの件に関して動画のネタにしているは非常に不快です。

 

Observerパターン

Observerパターンとはデザインパターンの一種で、プログラム内で発生したイベント(事象)を他のオブジェクトへ通知する形で処理が行われます。

Observerパターン

 

近年では通知者(Subject)と受信者(Observer)の1対1もしくは1対多といった直接的な関係を利用するのではなく、両者の間に仲介者(Broker)を置くことで通知者(Subject)と受信者(Observer)がより疎結合の状態となるよう工夫されたPub/Subパターンと呼ばれる手法が多く利用されているようです。

Pub/Subパターン

この場合、各々のモジュールは以下の通りとなります。

  • Publisher」は、発生した事象をBrokerに通知する
  • Broker」は、Publisherから受けた通知をSubscriberへ通知
  • Subscriber」は、Brokerから通知を受信して、それに応じた処理を行う

これによりPublisher、Subscriber双方の仕様相違や更改による影響などは全てBrokerの中で吸収することができるため、より柔軟なメッセージ伝達が可能となります。

 

MessagePipe

このようなパターンの処理をシンプルな記述で実装するには今回紹介する「MessagePipe」を利用する事が最適です。
MessagePipeはUnityで使えるハイパフォーマンスのPub/Subパターンの実装を提供するライブラリで、GitHubにて公開されています。

github.com

ただ、MessagePipeの導入はPackageManagerよりUPM経由で導入すると手早く導入することが出来ます。UnityのメニューからProjectSettingsを開いて、次のようにOpenUPMに対するURLを追加します。



するとPackageManagerから「My Registries」からインストールが利用可能となるので「MessagePipe」を選択します。
注意する点として、MessagePipeはDIライブラリ前提で組まれている為、導入に当たってはVContainerが必要です。また、UniRxも必須なのでそれらが未導入の場合は、PackageManagerの中から「MessagePipe.VContainer」「VContainer」「UniTask」を選び、事前に導入しておいてください。

 

基本的な使い方

簡単な使用例として、キーボードの矢印キーが押下された回数をそれぞれカウントする処理を考えます。


この場合、「Publisher」はキーの入力を受け付けて、そのキーコードをBroker経由で「Subscriber」へ送信します。
Subscriber」は受信したキーコードを判定してキー押下の回数を更新し、画面へ表示します。

 

■Publisher側の処理

Publisherは入力されたキーコードをBrokerに向けて通知するので、そのインターフェースを最初に定義します。
VContainerを利用するのでコンストラクタでそのインターフェースをVContainer側から受け取り、キーコードの送信処理でこのインターフェースを利用します。

using UnityEngine;
using MessagePipe;
using VContainer.Unity;
using System;

public sealed class TestInputEventProvider : ITickable
{
    /// <summary>
    /// MessagePipeへのメッセージ送信用インタフェース
    /// </summary>
    private readonly IPublisher<KeyCode> _inputPublisher;

    public TestInputEventProvider(IPublisher<KeyCode> argPublisher)
    {
        _inputPublisher = argPublisher;
    }

    /// <summary>
    /// 毎フレーム実行
    /// </summary>
    public void Tick()
    {
        if (Input.anyKeyDown)
        {
            // 押下キーコードを取得する
            foreach (KeyCode code in Enum.GetValues(typeof(KeyCode)))
            {
                if (Input.GetKeyDown(code))
                {
                    // メッセージを送信
                    _inputPublisher.Publish(code);
                    break;
                }
            }
        }
    }
}

 

■Subscriber側の処理

SubscriberはBrokerから受信する通知のインターフェースを定義します。SubscriberはMonoBehaviourを継承しますがコンストラクタでの注入を可能にするため[Inject]アトリビュートを付与しておきます。
ISubscriberのSubscribeで受け取り先の関数を定義しています。

using UnityEngine;
using VContainer;
using MessagePipe;
using Cysharp.Threading.Tasks;

public class TestSubscribeCounter : MonoBehaviour
{
    /// <summary>
    /// MessagePipeからのメッセージ受信用インターフェース
    /// </summary>
    [Inject] private readonly ISubscriber<KeyCode> _inputSubscriber;

    // Start is called before the first frame update
    void Start()
    {
        // 入力イベントの受信を開始する
        _inputSubscriber.Subscribe(OnInputEventReceived)
                                .AddTo(this.GetCancellationTokenOnDestroy());
    }
    
    /// <summary>
    /// 入力イベント処理
    /// </summary>
    /// <param name="code"></param>
    private void OnInputEventReceived(KeyCode code)
    {
        // キーコードを判定し、カウンタを更新する
        // 長くなるので割愛
        
    }
}

 

■DIの設定

Publisher,SubscriberともにVContainerにて依存性の注入を行う為、VContainerのLifetimeScopeを定義し、VContainerにPublisher,Subscriberのクラスと「Broker」役となるMessagePipeの登録を行います。

using VContainer;
using VContainer.Unity;
using MessagePipe;
using UnityEngine;

public class TestCountLifetimeScope : LifetimeScope
{
    protected override void Configure(IContainerBuilder builder)
    {
        // MessagePipeの設定
        var options = builder.RegisterMessagePipe();
        builder.RegisterMessageBroker<KeyCode>(options);

        // InputEventProviderを起動
        builder.RegisterEntryPoint<TestInputEventProvider>(Lifetime.Singleton);

        // ヒエラルキー上でTestSubscribeCounterがアタッチされているものを登録
        builder.RegisterComponentInHierarchy<TestSubscribeCounter>();
    }
}

 

Unityのシーン内に空のオブジェクトを作り、前述したLifetimeScopeのコンポーネントをアタッチしておきます。このアタッチされたGameObjectが起点となって「Publisher」「Subscriber」の初期処理が実行されます

 

これらを動作させた結果が以下の動画となります。
キー押下のイベント通知が行われ、UIテキストが更新されているのが分かります。

 

まとめ

MessagePipeを使用するとシンプルな処理で疎結合なObserverパターンが実装できるのが分かりました。
今回は紹介してませんがメッセージのハンドリングは「非同期」にできたり、「多対多」も実現できるようです。
Observerパターンはゲーム製作では結構な頻度で使用するので、MessagePipeの導入と使い方を覚えておいても損はないと思います。

【アセット紹介】プラットフォーム型ゲームで必要な機能が一通りそろった「Platform Project」

Unity1week

気が付けばUnity1weekが終了していいたうっかりものの皆さんこんにちは。今回からは参加はしないものの、投稿されたゲームは沢山遊ぼうと思っていたのですが、福岡インディーゲームEXPOで出展したゲームをアレコレ修正していたらUnity1weekの期間が終わっていました。
上位にランクインした作品を見ると投稿作品のレベルが益々上がっているようで、ゲームとしてバランスよく完成しているものが上位を占めているように感じます。もうそのままアプリとしてストアに出せそうなレベル。ここ数年で小規模インディのレベルがドンドン上がっているので、私も負けずに精進しないといけないですね。

 

指標になりそうなゲーム

前作の「Wo Long」がゲームクリア後即アンインストールしたぐらいプレイが辛かったので、今回は発売日での購入はスルーして同日発売だった別のゲームを購入したのですが、そちらの方が更に遊ぶのが辛くて結局予定より早く購入することになりました。

コーエーテクモゲームスのTeam NINJAが製作に携わったオープンワールドのアクションRPGです。
Team NINJAと言えば「死にゲー」と呼ばれる高難易度アクションゲームを作ることで有名で、前作の「Wo Long」はパリィができないと人権が無いようなゲームでしたが、今作ではその尖った部分が随分とマイルドになっており、「パリィできれば更に楽しい」ぐらいのレベルの難易度です。
また、「仁王」などで見られた攻撃法を「上段・中段・下段」と切り替える必要があった戦闘も、「流派」という概念に残されてはいるものの、そちらも「切り替えられたら楽しい」ぐらい塩梅で、難しい操作を必要とすることなくTeam NINJA製ゲームの持ち味だった高速でスタイリッシュなアクションを楽しむことができます。

高難易度アクションRPGとして一つの到達点にあるエルデンリングが戦技・魔法を使ったスキル合戦による面白さを表現しているのに対し、こちらのゲームではシンプルな操作によるアクションの面白さを追及しており、複雑なコマンドを必要としない最小限の操作で万人が「操作して楽しい」と思えるアクションゲームに仕上がっています。
今後、同じような形のアクションRPGを評価する際の一つ指標になりそうなゲームだと言えるのではないでしょうか。

 

テンプレートアセット

Unityのアセットストアを利用する理由としては、ゲーム製作で必要となる素材の購入や開発が便利になるツールの導入、といったものが挙げられますが、アセットストアでは色んな種類のゲームの基盤として利用できるアセットも販売されています。

例えばアクションゲームを作ろうとする際には、キーボード/ゲームパッドからの入力処理や自機の移動処理、当たり判定、敵の挙動ばかりでなではなく、状況に応じたアニメーションの切り替えや、各種ギミックの動作等々、プログラミングを作り込む必要のあるものが大量に発生しますが、それらを予め用意されたテンプレートを利用して素材を差し替えるだけで済むとすれば、作業工数は削減されゲームの完成はより早いものになると思います。
また、それ(素材を差し替えるだけ)を良しとしない場合でも、ゲームに必要な処理がどのように作り込まれて実装されているのか、を知ることはゲーム開発者として勉強になるし、レベルアップに繋がる事でしょう。

先日購入したのはそう言った意味で非常に有用な3Dのプラットフォーム型ゲームのテンプレートアセットでした。

 

プラットフォーム型ゲームとは文字通り、足場(=プラットフォーム)の上でジャンプすることがゲームプレイに不可欠な要素となるゲームで、その代表作としてスーパーマリオがあげられることが多いですが、このアセットはその3Dバージョン、3Dマリオのようなゲームのテンプレートとなっています。

www.youtube.com

 

Platformer Project

このアセットではゲームのコア部分のみではなく、タイトル画面、ゲームデータのロード画面、ステージセレクト画面といいた製品版として必要な機能のテンプレートも備えている為、それらに対して特に個性的な仕様を加える必要が無ければ、素材を入れ替えるだけでそのまま利用することが出来ます。

データロード画面

ステージセレクトからメインシーンへ

タイトル画面からデータロード画面へ

 

また、用意されている素材も豊富でキャラクターのアニメーション、SE等は別のアセットを追加で購入する必要がないぐらいに用意されています。

アニメーション設定

SEファイル

自機の移動処理、カメラ操作のスクリプトはキー/マウス入力だけでなくゲームパッドも対応している為、これらの処理を作り込む必要はありません。

 

学習の為に

プラットフォーム型ゲームに限らず3Dのアクションゲームでは状況に応じたアニメーションの切り替えも必要となってきます。
歩く→走るだけでなく、水の中に入れば泳ぐアニメーション、柱につかまればよじ登るようなアニメーションの切り替えが必要です。

柱によじ登る

 

プールで泳ぐ

私がこのアセットを購入した大きな理由は、上の動画のようにこのアセットではそれらが既に実装されている為、実際に動かしながらこれらの処理についてのスクリプトを参照して学習する事ができる為です。

これ以外にも、敵に対して正面からぶつかるとダメージを受け、ジャンプして上から叩くと敵を倒せるようになっており、これらについても実装方法を学ぶことができます。

 

注意点

このアセットでは上記の処理についてタグやレイヤーを利用している為、アセットをプロジェクトに導入する際にタグやレイヤーの設定に対して上書きが必要になります。
この為、既に製作途中のゲームのプロジェクトに対してこのアセットを導入する際には注意が必要です。
できれば新規プロジェクトにこのアセットを導入した上でゲーム製作に取り掛かるようにして下さい

【レポート】福岡インディーゲームエキスポ2024に出展した話

D-Pad

インディーゲームの展示会に出展したら大柄な外国人4人に囲まれて展示したゲームについて議論を交わしているけど英語がサッパリなのでオロオロするだけだった英語弱者な皆さんこんにちは。取り合えず十字キーの事をD-Padと呼んでいる事は分かりました。展示したゲームが言葉での説明を必要としないゲームだった為か、外国の方でも楽しんで頂けたようで良かったです。有難うございました。

 

福岡インディーゲームエキスポ2024

というわけで3/23(土),24(日)の二日間にわたって開催された福岡インディーゲームエキスポ2024に出展してきました。

www.fukuoka-indiegame.com


開場がキャナルシティ博多という大きな商業施設という事もあり、開催日両日とも生憎の雨模様だったものの来場者が途切れるという事があまりなく、手が空いて時間を持て余したのは初日の開始一時間と二日目の終了一時間前の時間帯ぐらいでしょうか、おかげさまで配布用に用紙していた紙製のクリアファイルは全て捌ける事が出来ました(一日目で全部配布し終えそうな勢いでした)

 

去年まではアーリーアクセス版の宣伝のために「W.T.」を展示会に出展していたのですが、今回は次回作の製作に向けて市井の方が方々から意見をもらう為に「Under A Groove」のデモ版を出展しました。ノーツが降ってくるようなリズムゲームとは少し趣向を変えて遊べるMV的なリズムアクションゲームとなっています。

youtu.be

全く無名のゲームタイトルなだけに展示会では素通りされるかと不安でしたが、存外にも多くの方に遊んで頂き、狙い通りに様々な意見を頂けて意義のある出展になりました。

特に初日の土曜日にはゲーム好きな方だけでなく、ゲーム実況をされている方、ゲームを制作している方などゲームに対して一家言ありそうな方々が多く来場されていたようで、こちらがプレイした感想を求めると、結構詳細に意見や疑問点を伝えてくれる方が多かった印象です。

そのおかげで自分では気づけなかった問題点や、改良点を知ることが出来ましたし、このゲームに対して私が強み(アピールポイント)だと思っている部分について賞賛頂ける事が多く自信を持つことが出来ました。

なので今回は展示会のレポート言うよりは、試遊された方から頂いた意見や質問などから、私が感じた事、気づいた事について記事に纏めてみたいと思います。

 

パブリックイメージ

上にあげているプレイ動画は初日に頂いた意見を元に応急処置で二日目に間に合いそうな箇所を修正したバージョンのプレイ動画です。
修正した箇所はいずれもゲーム中に起こるイベントで、パブリックイメージ(広く一般に認識されているイメージ)とは異なるリアクションとなっていた為に違和感を訴えられた箇所でした。

 

◆修正点1:正否を表現する色

画面下部の両端からノーツが移動してくるバーはノーツが中央に来るタイミングで色が変わります。
これはボタンを押すジャストのタイミングを表現していますが、当初は画面の背景に青系の色が多い事もあり、視認しやすいように赤系の色に変わるようにしていたのですが、これを「(操作を)間違ったのか?」と戸惑う方が多かったようで「操作の正否が分かりづらい」との意見を頂きました。

多くのゲームではプレイヤーが操作を誤った際のエフェクトには赤系の色が使われているため、赤系の色を見るとNGだと認識される方が多いのだと思います。逆に青、緑系の色はSafeの印象となるので、二日目は緑色の表示に変更しました

 

◆修正点2:ゲームパッドの振動

プレイ動画からは分かりませんが、ボタンを押したタイミングで判定がOKの場合はゲームパッドが振動するように処理を行っていました。

これはこのゲームを作る際に参考にしたゲーム(洋ゲー)がチェックOKの時にパッドが振動するようになっており、私も「操作が正解した」手ごたえを感じる事ができると思い、この仕様を採用したのですが、こちらもパッドが振動するのはミスをした所為だと勘違いされる方が多く、プレイ後に「パッドが振動するのはOKの時?NGの時?」と質問される事が多々ありました。

多くのアクションゲーム等で自機がダメージを受けた際にパッドが振動する為に、このゲームでも同じような認識を持たれたのだと思います。
二日目にはパッドが振動する条件を逆に(誤った時に振動)すると、このような意見を言われる方はいなかったので、こちらの方がパブリックイメージとして浸透しているのだと感じました。

 

ゲームの仕様を決める際にはデザイン的な趣向や制作側の都合よりもパブリックイメージを考えて、遊んでいる方が違和感を感じないような仕様にした方が無用なストレスなく遊んでもらえるという事が分かったので今後の参考にしたいと思います。

 

盲点だった事

展示会開催中での修正は間に合わなかったのですが頂いた意見の中で最も多かった意見は「操作が成功した時のエフェクトを派手にした方が成否が分かりやすい」というものでした。
これは私としては意外な意見で、というのも、このゲームでは操作の正否によって発生するアニメーションが大きく異なるような仕様になっている為です。

操作の成否によるアニメーションの分岐

それでもこのような意見が聞かれるのはどうしてだろう?と自問したところ、「そもそも初見のプレイヤーは正否のアニメーションを知らない」という事に気づきました。つまりOKの場合のアニメーションを見ても、NGの場合のアニメーションを見ても、初見のプレイヤー側はそのアニメーションが「OKを表現しているのか、NGを表現しているのか分からない」という事。

これは気づけば単純な事ですが、制作者として完全に盲点でした。

通常の音ゲーのように「JUST」や「BAD」等の文字ではなくアニメーションの変化でそれを表現しようとしましたが、それだけではプレイヤーに伝わらない、とは言え「(正否を文字表示するのは)ダサいから止めた方が良いですね」とおっしゃる方もいたので、ここら辺はもう少し表現方法を練る必要がある事に気づかされました。

 

他にも途中でゲームコントローラーを表示して十字キーの上にノーツを表示する、ようなイベントの箇所では、ボタンではなく実際にコントローラーの十字キーを押して操作しようとする方もチラホラ見受けられ、ここは「全てがボタン一つで操作可能とするか」「画面の通りにスティック、十字キーも押して操作できるようにするか」悩みどころだと感じました。

感想を下さる方の中でも意見が分かれていたので、対応策はこれから模索していくことになると思います。

 

全体の感想

色々と課題点を上げましたが、試遊して頂いた方の反応はおおむね好評だったと思います。中には手放しで絶賛してくれる方もいて非常に心強い思いになりましたし、小さなお子さんが私のゲームを指さして「これやりたい」と駆け寄って来てコントローラーを手に取ってもらった時は本当に嬉しかったです。

また、今回はいつになく名刺交換をさせて頂く機会が多かったり、周りの出展者の方とも少なからずお話しすることが出来ましたし、空いた時間で遊ぶことも出来ました。(東京で出展した前二回は他のブースに遊びに行くような余裕はなかった)

それにこのブログの読者さんにも声を掛けてもらったりと(嬉しかったです)、非常に実りある出展になったのではないかと思っています。

心残りは一日目の終わりに開催された懇親会に出席できなかった事ですが、これは次回のお楽しみに取っておきたいと思います。

 

来てくださった方々、遊んで下さった方々、

本当に有難うございました!

【告知】福岡インディーゲームエキスポ2024に出展します

香水

満員電車の中で横に並んだオバさんの香水の匂いがきつくて吐きそうになった弱者男性の皆さんこんにちは。あんなのラジカセ担いで爆音で鳴らしているのと同じだからね、あなたの好みが他者の好きとは限らないので匂いのテロは本当に迷惑だと分かって頂きたい。

 

福岡IGE2024

ここ4,5年の間にインディーゲームという存在が広く一般的に認知されてきた影響なのか、全国各地でインディーゲームの出展イベントが開かれるようになりました。
古くからあるデジゲー博の他に、東京ゲームダンジョンやゲームパビリオンjp(大阪)、ぜんため(岐阜)、BITSUMMIT(京都)、INDIE GAME MARKET(仙台)など多々あり、私の地元福岡でも一度2022年に出展イベント(福岡インディーゲームエキスポ)が開かれています。
残念ながら去年は諸般の事情により開催されなかったのですが、今年は早々に福岡インディーゲームエキスポ(福岡IGE)の第2回目の開催が決定しております。

www.fukuoka-indiegame.com

今回は3/23,24の二日間による開催で、しかも福岡を代表する商業施設であるキャナルシティ博多が会場となっています。
出展作品数が40弱と、他のイベントに比べ若干少ない事は否めないのですが、その分、出展する側はアピールするチャンスが多いという事なので、去年東京ゲームダンジョンやデジゲー博に出展した経験を活かし、会場を訪れたお客さんに作品をアピールしたいと思います。

また、上記のリンクでも記載されていますが、ゲーム展示以外にも地元タレントさんや、ゲームクリエイターによるトークショーがあったり、多数のVtuberさんによるゲーム紹介があったりと、ゲーム展示というよりゲーム祭り的な雰囲気のイベントになりそうなので、多くの方に来場してもらい楽しんで頂けたらなぁ、と思っています。

 

Under A Groove

東京ゲームダンジョンやデジゲー博ではSteamでアーリーアクセス版を配信している「W.T.」の展示会用Ver.を出展しました。

store.steampowered.com

福岡インディーゲームエキスポでも当初は「W.T.」を出展する予定だったのですが、前二回の出展で「W.T.」に対するお客さんの大体のリアクションは掴めたので、今回は宣伝を目的とするよりも次回作として試作中のゲームに対する反応を知りたいと思い、新しゲームを出展することにしました。

 

Under A Groove」というタイトルで「シチュエーションをGrooveする 」をゲームコンセプトに一風変わったリズムアクションゲームとなっています。

未だ構想と試作を繰り返している段階でゲームとしてハッキリと仕様が固まってないのですが、今の段階で遊んでもらう事でこのゲームのコンセプトを伝えるために不足しているもの、必要な要素を見つけたいし、このゲームの売りと(私が)考えている部分に思い違いがないか確かめたい、そんな考えで出展を決めました。

 

このゲームについては「Snow Town Under A Groove」というタイトルで今回とは別のバージョンでUnity1Weekに参加したのですが、思うようにコメントをもらう事が出来なかった事も福岡IGEでの出展の要因の一つとなっています。

unityroom.com

なので少し不安もありますが、遊んで頂く以上は楽しんで頂きたいのはゲーム開発者なら誰でも思う事、福岡IGEまでには少しでもブラッシュアップして、より面白いと思ってもらえるようなバージョンに仕上げていくつもりなので、当日参加される方は是非手に取って遊んでみてください!

 

私の出展ブースはNo.16、上の図の場所となっています。周りにはインディゲーム界隈では有名な方も出展されていますが、気後れせずお客さんに声を掛け、この「Under A Groove」を遊んで頂き、配布物を配っていきたいと思います。

 

ちなみに配布物はいつも通り紙製のクリアファイルでデザインは以下のようになっています。

(青枠の部分はクリアファイルの形で実際には印刷されていません)

 

3/23,24 キャナルシティ博多でお待ちしております。

よろしくお願いいたします!

 

 

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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