おれ、Unity2Dでゲーム作るんだ。

Unity2Dをメインに、覚書などを記事にしていきます。

「Android App Bundle は署名されていません」エラーは「Development Build」が原因

Google Play Consoleにアプリをアップロード出来ない理由としては、

abbでアップロードが必須

そもそも新規アプリはapkではなくabbファイルでアップロードしないといけません。 Unityの場合は、「Build App Bundle」にチェックを入れます。

Development BuildではNG

abbでアップロードしても、「Android App Bundle は署名されていません」とエラーが出る場合は、 Development Buildを確認してください。 チェックを入れていると、アップロードの時点で前述のエラーメッセージで弾かれます。

abbの設定

Unity - InputSystemのコールバックが複数回呼ばれる件

InputSytem

Input Sytemは、Input Managerに変わる新しい入力管理方法で、タッチもコントローラーも、キーボードもマウスも、同列に定義できる優れものです。 InputSystemの導入は色々調べてやってください。

forpro.unity3d.jp

ちょっと判りにくい?コールバック

で、コールバックに関して、ちょっと判りにくいところがあって、 ちまたでも、勘違いの筆頭で、あまり調べずに「まだ安定してない!バグだ!」って言われたりしたりもします。

コールバックが複数回呼ばれちゃう?

それが、例えばFireというアクションを設定すると、OnFireというコールバックを受け取ることになるんですが、 「Press Only」に設定しているのにもかかわらず、複数回OnFireが呼ばれる。ということです。

これは本当であり、間違いです。

コールバックにはフェーズがある

たとえば、以下の様に設定すると、

f:id:xev:20210824163108p:plain

OnFireレベルで考えると同じコールバックが複数回呼ばれます。

で、以下の様に、contextの中からphaseを確認してみると

    public void OnFire(InputAction.CallbackContext context)
    {
        Debug.LogFormat("OnFire Type:{0}", context.phase);
    }

コールバックにはStared/Performed/Canceledという3段階

があることが判ります。

f:id:xev:20210824163343p:plain

Press Onlyにしても複数回呼ばれる?

このInputActionにはInteractionという設定があり、イベントの発行タイミングが設定可能になっています。

f:id:xev:20210824164230p:plain

こんがらがってしまうのが、

じゃあ、Press Onlyを設定するとどうなるかというと、同じく3段階で呼ばれてしまいます

じゃあ、このPress Onlyってなんだ?っていうと、

Performedのコールバックが発行されるタイミング

になります。

つまり、Press Onlyは f:id:xev:20210824165707p:plain

Release Onlyは f:id:xev:20210824165813p:plain

ということで、Press & Releaseになると、 Performが2回! f:id:xev:20210824165833p:plain

こうなるわけですね。

どう対応するか?

結局、ざっくり使う場合に頭の中で想定されるのは大体はPerformの部分なので、

シンプルに

    public void OnFire(InputAction.CallbackContext context)
    {
        if (context.performed)
        {
            Debug.LogFormat("OnFire Type:{0}", context.phase);
        }
    }

にしてしまうか、

ActionInputインスタンスのperformedイベントに登録してしまうことで、

{
    _fireInput.performed += context => Debug.Log("OnFire!"));
}

意図通りの挙動を再現できるのではないでしょうか。