Help us understand the problem. What is going on with this article?

Unity 宴 会話シーンのメッセージ送りをゲームパッドで行う方法

More than 1 year has passed since last update.

読者対象
・Unity初心者の方
・Project内に宴を使った会話シーンを組み込み済

目標
・Unityのアセット宴を使って会話シーンを追加したProjectを
 ゲームパッドでも文字送り出来るようにする(ジャンプボタンを押した時に文字送りする)

筆者
・Unity初心者
・和尚本のお写経をしてアクションゲームを作成
・宴をアセットストアで購入し、使い方を勉強中

1.はじめに

Unityでアクションゲームのお写経が完成し、宴のアセットを使って会話シーンをゲーム内に入れ込むことが出来ました。
クリックやEnterを押すと会話も進んでいくし、動作も問題ない。
しかし、アクションゲームは、ゲームパッドでも遊びたいでしょう~ということで、ゲームパッドのボタンを押すと宴で作った会話シーンも進むようにしたいと考えました。

何はなくとも公式のマニュアルが肝心だー!
宴のマニュアル(http://madnesslabo.net/utage/?page_id=9794)
マニュアル > UIを変更する > キーボード入力など、独自の入力処理を実装する

にアクセスしました。

しかし、初心者の私には????だらけの内容で、書いてある意味すら分かりません。
初心者からの目線としての印象ですが、宴の公式マニュアルは、プログラム未経験者には、難易度が非常に高いと感じました。
プログラム未経験者でも簡単にノベルゲームが作れるという触れ込みのアセットの割に、初心者殺しのマニュアルだな~という印象が拭えませんでした。

2.何をすれば希望の動作を行えるのか?

諸先輩方のお話しによれば「クリック判定の仕方を変える」の項目に書いてある。
『自分が呼びたい判定の仕方、タイミングで、「AdvUguiManager」の「OnPointerDown」を呼びます。』
を行えばゲームパッドでの操作が可能になるらしい。

しかし、私はここで困った事がありました。
「AdvUguiManager」が、どこにあるのか?どうやって「OnPointerDown」を呼びだすのかといったことが分からないのです。

3.AdvUguiManagerがついたオブジェクトはどこあるの?

「OnPointerDown」は、Scene >Hierarchy >AdvEngine >UI InputManagerに格納されていました。

あらかじめ画像のようにUIをPlayerのオブジェクトにセッティングしておきます。
WS003819.JPG

4.どうやって「OnPointerDown」を呼び出そうか?

・シーン内にAdvUguiManagerがついたゲームオブジェクトがある
・自分のスクリプトにAdvUguiManager型の変数を用意して、
 そのオブジェクトをインスペクタでセットしておく
・キーパッドが押されたらOnPointerDownを呼び出すコードを
 自分が作成したPlayerを操るスクリプトに追加する
どうやらこれらのことを行えば今回やりたい動作を行えるようだ。

ゲームパッドで現在動いているボタン("Jump")に「OnPointerDown」のコードを埋め込めば手っ取り早いか?と考えた私は、

public AdvUguiManager advUguiManager;
advUguiManager.OnPointerDown()

を追加しました。……が、動かない! 以下のエラーが出てきます。

引数 0 を指定するメソッド'OnePointerDown'のオーバーロードはありません。

このエラーメッセージは`PointerEventData` って型の引数が必要との意味らしいので、以下に修正。

advUguiManager.OnPointerDown(new PointerEventData())

すると今度はこんなエラーが・・・

型または名前空間の名前'PointerEventData'が見つかりませんでした(using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。

5.どうやってエラーを倒そうか?

どうやら先程のエラーは「今 using している namespace 達の中には PointerEventData って型のクラスか構造体が見当たらないよ!」という意味らしい。

C# は、namespace を using することで「その namespace に含まれるクラスとか構造体とかを使えるようになる」仕様なので、上の方にある「using なんたら~」を書き足さないといけなのです。

ということで、以下の必要な記述を追加しました。

using Utage;    //宴を使うために必要な記述
using UnityEngine.EventSystems; //PointerEventDataを使うために必要な記述
public AdvUguiManager advUguiManager;   //宴標準のAdvUguiManagerマネージャー

// ジャンプボタンを押した
    public void PushJumpButton () {
        if (canJump) {
            goJump = true;
            //宴の会話送りを進める動作を呼び出す
            advUguiManager.OnPointerDown(new PointerEventData(EventSystem.current));   
        }
    }

やったーーーーーー! 動いたーーーーっ! 動きましたよっ! 先生いぃーーーーーーーヽ(゚∀゚)ノ

6.まとめ

・宴のイベントを呼び出す際には OnPointerDown メソッドを自前で呼び出す必要がある
・OnPointerDown メソッドは PointerEventData 型の引数を1つ要求する
・PointerEventData は `UnityEngine.EventSystems` namespace 以下に居るので using の追加が必要
・PointerEventData の初期化には EvemtSystem のインスタンスが必要

musyu
しがない同人描き。コミケではマニアックなネタの四コマ漫画や、個人ゲームの制作をしています。 お仕事のご依頼は、TwitterのDMかHPのお問い合わせからお願い致します。
https://www.pixiv.net/
unity-game-dev-guild
趣味・仕事問わずUnityでゲームを作っている開発者のみで構成されるオンラインコミュニティです。Unityでゲームを開発・運用するにあたって必要なあらゆる知見を共有することを目的とします。
https://unity-game-dev-guild.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away