任意のテキストをプレイヤーに入力してもらう機能を作成することはできますか?

757 views
Skip to first unread message

Hi2ji

unread,
Aug 19, 2017, 2:32:23 PM8/19/17
to utag...@googlegroups.com
宴のバージョン:3.1.5
UnityのバージョンとOS:Unity2017.1.f3 macOS Sierra
UnityのConsoleウィンドウのエラーメッセージ:なし

プログラミングの知識がほぼ皆無のunity、宴初心者です。

クイズ形式のゲームを作りたいのですが、選択肢を選ぶだけではなく、問題を虫食いにして、解答をプレイヤーがテキストでん入力できるようにしたいのですが、宴でそういった機能を作成することは可能でしょうか?

http://madnesslabo.net/utage/?page_id=1823でご紹介いただいているSendMessageのInputFieldを応用すればできるように感じたので、まずはこれを作成してみようとしたのですが、以下の点がわからなかったのでご教示いただけますでしょうか?


行なった手順は以下の通りです。

・ヒエラルキーにCreate→CreateEmptyでオブジェクトを作成、「RecieveMessageSample」としました。

・RecieveMessageSampleにおそらく宴に同梱されていると思われる「UtageRecieveMessageSample」を、インスペクターからコンポーネントとして追加しました。

・プロジェクト作製時に自動で生成されるエクセルの「Start」のシートと「Pram」のシートに、マニュアルのSendMessageのサンプルに書かれているセルを追加しました(添付画像をご参照ください)




ここまでで、一度ゲームビューから動作を確認しました。

特にエラーは出ませんが、入力フィールドが表示されませんでした。これは、InputFieldが作成されていないから、で間違いないでしょうか?




ここで、InputFieldの作成についてお伺いさせていただきたいのです。


・InputFieldの作成場所:Canvas-AdvUIかCanvas-SystemUIかそれとも別の場所なのかわかりませんでした…。これが作れなかったためだと思うのですが、unityの使い方に関することになっていましたら、申し訳ございません……。

この機能とIf分岐を組み合わせて、プレイヤーが正しい解答を入力したら「正解」、そうでなければ「不正解」とすれば虫食いを埋めるタイプのクイズができるかと考えたのですが、可能でしょうか? あるいはもっとシンプルな手段があるでしょうか、プログラミングの知識を身につけないと不可能でしょうか?

基本的なことばかりお尋ねしてしまい、申し訳無いのですが、何卒、ご教示お願い申し上げます。

マッドネスラボ

unread,
Aug 19, 2017, 3:39:00 PM8/19/17
to utag...@googlegroups.com
>これは、InputFieldが作成されていないから、で間違いないでしょうか?
オブジェクトを作成して、AddComponentするまではあっています。

SendMessageコマンドを使う場合は、「どのオブジェクトにメッセージを送るか」というのを設定しないといけません。
なので、こちらの手順が抜けています。



InputFieldは、AdvEngine-UI以下に置いてください。
Utage>Sample>Sampleシーンでも以下のようにしています。
Sampleシーンは、「基本機能」→「その他」→「その他」→「SendMessageによる拡張」を選ぶと、InputFieldを使ったサンプルを確認でます。




RecieveMessageSampleにも、「どのInputFieldを操作対象とするか」の設定が必要です。





>この機能とIf分岐を組み合わせて、プレイヤーが正しい解答を入力したら「正解」、そうでなければ「不正解」とすれば虫食いを埋めるタイプのクイズができるかと考えたのですが、可能でしょうか? あるいはもっとシンプルな手段があるでしょうか、プログラミングの知識を身につけないと不可能でしょうか?

できなくはないのですが、プレイヤーの任意入力に対して正解、不正解を判定して分岐を作るというのはかなり大変だと思います。
正解が必ず一字一句ブレのない一つだけの問題ならそこまで難しくないのですが、たとえば正解が「桃太郎」だった場合に「ももたろう」と入力した場合は不正解なのか?といったような問題があります。
これはプログラムができる人でも難しいので、ゲームデザイン上の問題ではありますが、
上記のものも、あくまでサンプルであって細かい調整をしたい場合はプログラムを書く必要がでてくるかと思います。
結局は、宴の基本機能でできないことをやろうとするならプログラムで拡張するしかありません。

また、InputFieldはUnity公式機能を使ってはいるのですが、その機能自体がWebGLではまともに動かないなどいくつか制約がありますのでそういったUnityの知識も必要となりますし、レイアウトなどを調整するにもUnityの知識が必要になります。
たとえば、上記の説明でも何点かある「コンポーネントにドラッグアンドロップで操作対象のオブジェクトを設定する」などは、Unityのもっとも基本的な手順ですので、そのあたりの基本操作は最低限身に着ける必要があります。


Hi2ji

unread,
Aug 19, 2017, 9:13:11 PM8/19/17
to utag...@googlegroups.com

早々のご返信ありがとうございます。


InputFieldの置き場所は見逃していました;;申し訳ございません;;;
そして、RecieveMessageSampleのオブジェクトをインスペクターのEnginにドラッグ&ドロップするところまでは、最初の投稿の段階でやれておりました。私の行なった手順の記載漏れです…重ねて申し訳ございません。

・今回、アドバイス頂いた通りにAdvEngin-UI下にInputFieldを作成し、インスペクター側のReciveMessageSampleのInputFieldに配置いたしました。




なのですが、プレイ画面に入力フィールドが現れませんでした;;

・InputFieldのZ座表がデフォルトで-600になっていたので、これを900にしてみたり試してみたのですが、解決できず…

その時の状況は以下の画像の通りです。



入力フィールドは表示されないので、入力されたテキスト(「入力された名前は」の後)は空欄のままですが、シナリオビューワーではエクセルに設定している<param=player_name>の文字が出ている、という状態です。
シナリオビューワーで入力フィールドが確認できるのかが分からないのですが、入力フィールドを示す内容は確認できませんでした。

注意深くサンプルの画像を確認しながら行なったつもりなのですが、何か見落としがあるのかもしれません。
また、mac版ゆえの動作不安定なのかを確認しようとしたのですが、うちのwindouws版unityが何故か起動できなかったため、これは確認ができませんでした。申し訳ございません。
unity側の操作の問題か、アセット拡張手順の見落としかの判別ができませず…大変御手数をおかけいたしますが、ご教示お願いできますでしょうか?

クイズで入力してもらおうとしている解答は主に数字(計算結果など、正解が一つしかないもの)で、そこまで複雑なものにはならないと思いますので、現時点ではプレイヤー名を入力できるくらいの機能で足りるかと思われます。

全てに素人なので時間はかかると思いますが、プログラミングやunityの操作方法についても、少しずつ学んでいきます。
ご配慮いただき、ありがとうございます。

マッドネスラボ

unread,
Aug 19, 2017, 9:52:13 PM8/19/17
to utag...@googlegroups.com
Z値は基本的には0にしてください。


サンプルシーンは確認しまでしょうか?

>Utage>Sample>Sampleシーンでも以下のようにしています。
>Sampleシーンは、「基本機能」→「その他」→「その他」→「SendMessageによる拡張」を選ぶと、InputFieldを使ったサンプルを確認でます。

サンプルシーンを実行すると、シナリオビュワーにはこのようにSendMessageコマンドが実行されるのがわかるかと思います。
スクショにあるシナリオビューワーの結果をみる限り、SendMessageコマンドが実行されてないようです。
SendMessageコマンドががシナリオビューワー上で見当たらないのであれば、エクセルのほうで記述が漏れているのだと思います。
エクセルファイルのほうを確認してください。





Hi2ji

unread,
Aug 20, 2017, 11:28:22 AM8/20/17
to 宴ユーザーグループ
早々のご返信ありがとうございます。

今の今まで、自分のunity上で実行できるサンプルが同梱されていることに気づいていませんでした…
公式サイト様の中のデータがサンプルと思い込んでおりまして、それをコピーしたり、見ながら手打ちしたりしておりまして、
正常に動作している状態を確認できていませんでした…(;;)

まだ自分のプロジェクトの中ではうまく動かせていないのですが、サンプルプロジェクトと比較してどこにミスがあるのか調べて見ます。

本当に余分な御手数をおかけいたしまして申し訳ございません…!
丁寧にご対応くださってありがとうございます!!<(_ _)>

Chan Zien

unread,
Aug 20, 2025, 5:30:26 AMAug 20
to 宴ユーザーグループ
8年前のスレッドですが、同じ箇所で引っかかり、その原因を見つけたのでこちらに書いておきます。

このページのサンプルコードの27行目のコマンド名の定数が"InputFileld"にtypoしているため、そのままだとUknown Message扱いになり表示されません。

シナリオファイルのコマンド名をInputFileldに合わせるか、判定定数のtypoを修正してInputFieldにする必要があります。


2017年8月21日月曜日 0:28:22 UTC+9 Hi2ji:

マッドネスラボ

unread,
Aug 20, 2025, 1:10:15 PMAug 20
to 宴ユーザーグループ
ありがとうございます。
Webサイトのほうの情報が古かったので修正しました。

古いサンプルは、レガシーテキスト用のInputFieldを使っているという問題あります。
新しいサンプル UtageReceiveMessageSampleTMPがすでに追加されていて、そちらでは スペスミス(typo) も修正済みです。そちらのほうに合わせてWebサイトのほうも更新いたしました。


初期のコードは、typoが多く申し訳ありません。
実は古いサンプルのクラス名「UtageRecieveMessageSample」のRecieveもtypoです。正しくはReceiveです。
近年は、IDEにtypoチェック用のプラグインを入れてミスを減らすようにしております。

・UnityのAssetStoreの制約上、ファイル名を変更してしまうとアップデートに不具合を生じやすい
・サンプル内の文字列指定を変更すると、サンプルコンポーネントを直接そのまま使っている人がいた場合に問題が生じる
という懸念があって、古いコードに関してはそのままにしてあります。



2025年8月20日水曜日 18:30:26 UTC+9 Chan Zien:
Reply all
Reply to author
Forward
0 new messages