本記事はDEMO動画にある、
「Unity+AIを用いた手書き数字識別システム」の実装方法について説明する。
前回の記事
本記事のテーマ
「会話機能(Fungus)の実装とTimelineからスクリプトを実行」
する処理を実装する。
下記DEMO動画内の1:24付近。
小さいCubeが自動で出現したあとに会話が始まる部分を実装する。
Demo
実装動画
本記事の実装を録画した動画です。
実装環境
- Ubuntu20.04
- UnityHub2.4.2
- Unity 2019.4.21f1
ソースコード
Githubで管理
・conversation-execute_from_timelineブランチ
ブランチの切り替えは下記画像の赤枠をクリックして変更できる。
FungusをImportする
まず、Assets StoreからFungusをImportする。
Window→Assets Store→Fungusで検索
FreeのものをImportする。
Fungusの使い方
Import後、ToolsのなかにFungusが 追加されている。
まず、Tools→Fungus→Create→FlowchartでFlowchartを作成する。
次にFungusを実装する上で使用するFlowchart画面を開く。
Tools→Fungus→Flowchart Window
会話で表示するMessageの設定
CreateしたFlowchartをダブルクリックしFlowchart Windowを開きます。
Blockを選択して+ボタンからSay Narrativeを追加します。
Say Commandの中のStory Textの中に入力した文字がGame内で表示されます。
※私の環境では日本語入力できなかったため、一度テキストエディタに入力した日本語をコピペしています。
Fungusを呼び出すスクリプトを実装
まず、スクリプトから呼び出すためにFlowchartの設定を変更します。
FlowchartはデフォルトではGame開始とともに開始される設定になっています。
Execute On Eventの設定をMessage Receivedに変更することによってスクリプトからFlowchart(会話)の開始を制御できるようになります。
また、Flowchartを呼ぶためのパラメータ(Message)をstart_questionに設定しています。
・SmallCubeDirector.cs
OnCollisionEnter()関数をオーバライドする。
↑で会話が開始されます
▶クリックでソースコードを展開
using using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SmallCubeDirector : MonoBehaviour
{
// Fungus
public Fungus.Flowchart flowchart = null;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void StartFungus(string message){
flowchart.SendFungusMessage(message);
}
public void StartFungusFromEventPlane(){
flowchart.SendFungusMessage("start_question");
}
}
}
TimelineにSignal Track追加
Timeline画面で右クリック→Signal Trackを追加する。
Timelineから呼び出すSignalを作成する。
Signalを使用することでTimelineからスクリプトを呼び出すことが出来ます。
■Signalの作り方
Project画面で右クリック→Create→Signalから生成
■Signal Trackの設定
Signal TrackにSmallBlackCubeオブジェクトをドラッグ・アンド・ドロップで紐付ける
次に、Signal TrackにSignalを追加する。
追加方法は右クリックからSignal Emitterを選択するかドラッグ・アンド・ドロップで追加できる。
Signal Track内に追加したSignal Emitterを選択して設定を変更する。
Timeで呼び出したいタイミングを設定する。
Emit Signalには使いたいSignalオブジェクトを選択する。
(ドラッグ・アンド・ドロップした場合は設定されている)
Signal Receiverの+で呼び出したい関数を追加します。
今回はSmallCubeDirector.StartFungusFromEventPlane()を設定しました。
これでEventPlaneを踏んだときにTimelineが実行され、Timelineの最後にSignal TrackからSmallCubeDirectorのStartFungusFromEventPlane()が呼び出されます。
すると、flowchart.SendFungusMessage("start_question");でstart_questionの会話flowchartが開始されるといった流れになります。
以上で実装は終了になります。
もし、動かない場合はコメント欄にて報告して頂けますと助かります。
参考記事
関連記事