キーボード入力など、独自の入力処理をプログラムする


投稿日:2017年7月6日 | 最終更新日:2025年1月30日

宴の入力処理は、典型的なノベルゲームの標準的な動作をするように実装されています。
以下に、これらを自分のゲームの仕様に合わせて、カスタムしたいときの方法をまとめました。

宴の入力処理の基本

宴の入力処理は、Unity標準の「uGUI」を使って実装されています。
基本的な構成や拡張方法は、UIコンポーネントを確認してください。
以下では、入力判定など制御方法の説明をまとめます。

ページ送りなどのメインの入力処理

宴の文字送りなどの判定は、AdvEngine>UI>InputManagerに処理を発生させるオブジェクトがあります。
基本となる処理は、AdvUguiManager.csで行っています。

AdvUguiManagerをRemoveComponentして、代わりに以下の要領で独自に作成したUI管理クラスをAddComponentすることで、UIの処理を独自に書き換えることができます。

AdvUguiManagerを継承して独自クラスを作る

AdvUguiManager.csは3.1.2からクラスを継承して拡張しやすいように「virtual化、protected化」をしました。
キーボード入力に対応する場合などは、AdvUguiManager.csを継承して必要な個所をoverrideするなりして、処理をカスタムして書き換えてみてください。
継承についての詳細

AdvUiManagerを継承して独自クラスを作る

AdvUguiManager自体もAdvUiManagerを継承していて、AdvEngine本体から参照しているものはAdvUiManagerになります。
なので、根本的に処理を書き替えたいときはAdvUiManagerを継承した独自クラスを作成してそれを使ってください。

クリック検知をカスタム

「クリック処理」の部分だけちょっとuGUIの基本と異なる特殊な処理をしています。
文字送りなどのメインとなるクリック検知は、AdvEngine>UI>InputManagerで行っています。
これは「他のUIの当たり判定がない部分をクリックしたとき」に発生します。
「他のUIの当たり判定がない」というのを検知するために、「一番奥を描画するカメラ」に、
「UguiBackgroundRaycaster」というコンポーネントが必要です。
通常は「UguiBackgroundRaycaster」はClearCameraにAddComponentされています。
ClearCameraは、「画面全体を黒で塗りつぶす」ためのものですが、場合によって邪魔なため消してしまうことあるかと思います。
その場合は、「UguiBackgroundRaycaster」を「一番奥を描画するカメラ」にAddComponentしてください。

クリック判定の仕方を変える

AdvEngine>UI>InputManagerのEventTriggerで呼び出しているメソッドを呼べばノベルのクリック処理が行われます。
なので、上記の「他のUIの辺り判定がない」などのややこしい処理を使いたくない場合は、
自分が呼びたい判定の仕方、タイミングで、「AdvUguiManager」の「OnPointerDown」を呼びます。

プログラムから入力処理を呼び出す

プログラムから呼び出す場合は、下記のようにUguiManager のOnInput()を使います。

サンプルコード

using UnityEngine;
using Utage;

public class SampleInputReturnKey : MonoBehaviour
{
    AdvUguiManager UguiManager { get { return uguiManager ?? (uguiManager = FindObjectOfType<AdvUguiManager>()); } }
    public AdvUguiManager uguiManager;

    void Update()
    {
        //リターンキーが押されたら宴の入力処理を呼ぶ
        if (Input.GetKeyDown(KeyCode.Return))
        {
            UguiManager.OnInput();
        }
    }
}

判定の仕方は変えないがクリックが利かないとき

AdvEngine>UI>InputManagerのクリック検知は、「他のUIの当たり判定がない部分をクリックしたとき」に発生します。
「他のUIの当たり判定がない」というのを検知するために、「一番奥を描画するカメラ」に、
「UguiBackgroundRaycaster」というコンポーネントが必要です。
通常は「UguiBackgroundRaycaster」はClearCameraにAddComponentされています。
ClearCameraは、「画面全体を黒で塗りつぶす」ためのものですが、場合によって邪魔なため消してしまうことあるかと思います。
その場合は、「UguiBackgroundRaycaster」を「一番奥を描画するカメラ」にAddComponentしてください。