Unityに関連する記事です

 以下の内容で実装していきます。

33.既読スキップ機能を追加する



実装する概要


 先ほどの手順とセットになっていますので、まずは手順32の自動再生機能を実装してください。

 ゲーム中のオプションの設定として、この手順では既読メッセージのスキップ機能を追加します。
既読スキップ用ボタンの設定や概要については自動再生ボタンと同じです。そちらを参考にしてください。

 この手順では自動再生機能を利用して、既読のメッセージの自動スキップ機能を追加します。


実装動画 既読メッセージスキップ機能(Skipと書いてあるボタンを押すと色が変わり、画面をクリックしなくても次のシナリオに進む。分岐がある場合には分岐まで進む)
https://gyazo.com/d1507b558a3cb6eebe160df05807bbba


事前準備


 ボタンの準備については前の手順で作成済ですので、事前の準備は不要です。


設計


 既読メッセージのスキップ機能は、この機能が実行されている間は既読メッセージについてはスキップし、自動的に分岐まで移動する機能です。

 次のような設計を行います。

 ・ゲーム中で既読スキップボタンを押す
 ・既読スキップ機能がオンになり、ボタンの色が変わる
 ・現在表示されているメッセージがすでに読んでいて既読扱いのメッセージの場合、メッセージが自動的にこのシナリオの最後までスキップして分岐が表示される
 ・分岐まで行くと終了する。もしも分岐のないシナリオだった場合には、分岐のあるシナリオまでスキップする
 ・この機能は、自動再生機能を利用して実装する
 ・既読スキップが実行中の間にもう一度既読スキップボタンを押すとオフ状態になり、ボタンの色が元の色に戻る


実装手順


 以下の手順で実装を行います。

 1.GameDataスクリプトを修正して、既読のシナリオデータの分岐番号をセーブ・ロードできる機能を追加する
 2.TextMessageViewewスクリプトを修正して、既読スキップ機能にかかわる処理を追加する
 3.Titleスクリプトを修正して、ゲームのシナリオデータを読み込む前に、既読のシナリオデータをロードする処理を追加する
 4.ゲームを実行して動作を確認する

 なお、メッセージウインドウ上ではなく、オプション機能をまとめたポップアップに既読スキップボタンを設置する場合には、
ポップアップ用のスクリプト内でTextMessageViewerスクリプトを取得し、既読スキップ処理用のメソッドを呼び出す処理を記述して対応してください。


1.GameDataスクリプトを修正して、既読のシナリオデータの分岐番号をセーブ・ロードできる機能を追加する


 既読スキップの機能を実装するために必要となる変数を2つ追加します。
1つはデータのセーブ・ロードに使用する string 型の READ_BRANCH_NO 変数です。固定値を入力するため、変数を分かりやすく大文字にしています。
この文字列にシナリオ番号を付与して、セーブする際のIDにします。そしてこの変数を利用してセーブデータの確認をし、ロードを行います。

 2つ目の変数は int 型のListです。ここにロードした既読シナリオの番号を追加し、管理を行います。
例えば既読のシナリオ番号が3、4,7であった場合、このListにも3、4,7が登録され、各シナリオの開始時に、この番号と照合します。
もしも該当のシナリオの番号を再生する際には既読扱いとし、既読スキップを実行出来るようにします。

 既読スキップ用のセーブ・ロード用にメソッドを2つ追加しています。


GameData.cs

 <= クリックすると開きます。



GameDataゲームオブジェクトを確認する


 新しく追加した readBranchNoList 変数が Size 0 で表示されています。
ゲーム起動時に、この値にセーブしている既読シナリオの番号が入るようにしますので、いまはそのままで確認だけしてください。

 なおデバッグしやすいように public 修飾子を利用してインスペクターに表示していますので、ここに既読にしたいシナリオの番号を登録することでデバッグが可能です。

GameData ゲームオブジェクトのインスペクター画像



2.TextMessageViewewスクリプトを修正して、既読スキップ機能にかかわる処理を追加する


 新しく設置した既読スキップボタン用の変数を1つ追加して、後程アサインします。また起動スキップであるかどうかの状態を管理できるように、bool型の変数を1つ追加します。
trueのときは既読スキップ機能がオン、falseのときはオフとして利用します。他にもいくつかの変数を追加します。

 既読スキップボタン用のOnClickSkipReadingMessageメソッドを新しく作成して、スクリプトからOnClickイベントにこのOnClickSkipReadingMessageメソッドを登録します。
こうすることで前の手順とおなじように、UnityのButtonコンポーネントで設定するのと同じ処理がスクリプトから実装出来ます。

 Startメソッド、SetUpScenarioDataメソッド、DisplayMessageメソッド、WaitTimeメソッド、NextTouchメソッドの5つのメソッドを修正して、自動再生機能の処理を追加して実装します。
どの処理がどのような役割を持っていて、どうしてその処理をその場所に書くことによって自動再生処理が動くのかを考えながら実装してください。


TextMessageViewer.cs

 <= クリックすると開きます。



TextMessageViewerゲームオブジェクトを設定する


 スクリプトの修正が終了したので、TextMessageViewerゲームオブジェクトを選択してインスペクターを確認します。
新しく追加した btnSkip 変数が表示されていますので、こちらに同名のゲームオブジェクトをヒエラルキーからドラッグアンドドロップしてアサインします。

 skipSpeed 変数には 0 を初期値で代入していますが、あまりにもスキップ速度が速い場合には、この値を適宜な数値に調整してください

 そのほかの変数はゲーム中に操作されるため、ここでは設定を行う必要はありません。


TextMessageViewerゲームオブジェクト インスペクター画像



3.Titleスクリプトを修正して、ゲームのシナリオデータを読み込む前に、既読のシナリオデータをロードする処理を追加する


 Startメソッドに、先ほどGameDataスクリプトに追加した LoadReadBranchNos メソッドを呼び出す処理を追加します。
そしてセーブされている既読のシナリオ番号があるか確認し、そのシナリオの番号を取得する処理を記述します。

 Titleスクリプトにこの処理を追加することにより、メインとなるゲームが始まる前に既読のシナリオ番号があるか確認し、それを管理できる状態にしておくことで
ゲーム内で既読のシナリオ番号を利用して既読スキップの機能を実行することが出来ます。


Title.cs



Titleゲームオブジェクトを確認する


 Titleシーンにある Title ゲームオブジェクトを確認します。
アサイン情報などの追加はありませんので、以前と同じ状態にアサインが保持されていることを確認しておきます。


Title ゲームオブジェクト インスペクター画像



4.ゲームを実行して動作を確認する


 Titleシーンからゲームを実行して動作を確認してみましょう。
既読のシナリオ番号はGameData ゲームオブジェクトに登録できますので、デバッグしやすい番号を入力してデバッグしてください。

 既読シナリオがセーブされていなければ、Debug.LogがConcoleに「既読シナリオなし」と表示します。
セーブされているシナリオがある場合には、Debug.LogがConcoleに「既読シナリオ番号 : シナリオ番号」の形式で表示します。
そして GameData ゲームオブジェクトの readBranchNoList に既読シナリオの番号が追加されます。
Debug.Logを上手く活用しましょう。


 Titleシーンでの処理が問題なければ、次はGameシーンに遷移して、既読スキップボタンが反応するか、押すことが出来た場合に、ボタンの色が変わって
既読のメッセージが画面をタップしなくても自動的に送られるようになるかを確認します。


 問題なく動作すれば、既読メッセージについては分岐が表示されるまで自動的にメッセージがスキップ(高速再生)されます。
分岐がないシナリオデータであれば、次のシナリオデータに移り、そこでもまたメッセージがスキップ分岐まで進みます。
 
 既読スキップ中にもう一度、既読スキップボタンを押した場合には処理が停止し、画面をタップするまでメッセージが表示されたままの通常の状態なり、ボタンの色も元に戻ります。


実装動画 .轡淵螢番号 1 が既読の場合、シナリオ番号 0 が終了時点で シナリオ番号 1 の最後にある分岐までスキップする(シナリオ番号 1 がエンディングの場合、そこでストップ)


https://gyazo.com/3b2670f042d4e477994bee2dd4d86f86


実装動画◆.轡淵螢番号 0 が既読の場合、シナリオ番号 0 をスキップし、シナリオ番号 1 からスタート(シナリオ番号 0 に分岐がある場合には分岐までスキップ)



https://gyazo.com/d1507b558a3cb6eebe160df05807bbba


実装動画 シナリオ番号 0 と 1 が既読の場合、既読スキップを実行すると、シナリオ番号 1 の最後までスキップする(シナリオ番号 1 がエンディングの場合、そこでストップ)



https://gyazo.com/a1668ccf1e307f2baf92c1ac950a3c89


 以上でこの手順は終了です。おつかれさまでした。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます