人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

【Unity】会話機能(Fungus)の実装とTimelineからスクリプトを実行

 

本記事はDEMO動画にある、

「Unity+AIを用いた手書き数字識別システム」の実装方法について説明する。

前回の記事 

www.hiro877.com

 

 

本記事のテーマ

「会話機能(Fungus)の実装とTimelineからスクリプトを実行」

する処理を実装する。

下記DEMO動画内の1:24付近。

小さいCubeが自動で出現したあとに会話が始まる部分を実装する。

Demo


www.youtube.com

 

実装動画

本記事の実装を録画した動画です。


www.youtube.com

 

 

 

実装環境

  • Ubuntu20.04
  • UnityHub2.4.2
  • Unity 2019.4.21f1

 

ソースコード

Githubで管理

・conversation-execute_from_timelineブランチ

ブランチの切り替えは下記画像の赤枠をクリックして変更できる。

f:id:hiro-htm877:20210502170814p:plain

github.com

 

FungusをImportする

まず、Assets StoreからFungusをImportする。

Window→Assets Store→Fungusで検索

FreeのものをImportする。

f:id:hiro-htm877:20210505155439p:plain

 

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内で表示されます。

 

※私の環境では日本語入力できなかったため、一度テキストエディタに入力した日本語をコピペしています。

f:id:hiro-htm877:20210505161707p:plain

f:id:hiro-htm877:20210505161723p:plain

Fungusを呼び出すスクリプトを実装

まず、スクリプトから呼び出すためにFlowchartの設定を変更します。

FlowchartはデフォルトではGame開始とともに開始される設定になっています。

Execute On Eventの設定をMessage Receivedに変更することによってスクリプトからFlowchart(会話)の開始を制御できるようになります。

また、Flowchartを呼ぶためのパラメータ(Message)をstart_questionに設定しています。

f:id:hiro-htm877:20210505162734p:plain

・SmallCubeDirector.cs

OnCollisionEnter()関数をオーバライドする。

flowchart.SendFungusMessage("start_question");

↑で会話が開始されます

 

 

▶クリックでソースコードを展開
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オブジェクトをドラッグ・アンド・ドロップで紐付ける

f:id:hiro-htm877:20210505164536p:plain

次に、Signal TrackにSignalを追加する。

追加方法は右クリックからSignal Emitterを選択するかドラッグ・アンド・ドロップで追加できる。

f:id:hiro-htm877:20210505165020p:plain

Signal Track内に追加したSignal Emitterを選択して設定を変更する。

Timeで呼び出したいタイミングを設定する。

Emit Signalには使いたいSignalオブジェクトを選択する。

(ドラッグ・アンド・ドロップした場合は設定されている)

Signal Receiverの+で呼び出したい関数を追加します。

今回はSmallCubeDirector.StartFungusFromEventPlane()を設定しました。

f:id:hiro-htm877:20210505165113p:plain

 

これでEventPlaneを踏んだときにTimelineが実行され、Timelineの最後にSignal TrackからSmallCubeDirectorのStartFungusFromEventPlane()が呼び出されます。

すると、flowchart.SendFungusMessage("start_question");でstart_questionの会話flowchartが開始されるといった流れになります。

 

以上で実装は終了になります。

 

もし、動かない場合はコメント欄にて報告して頂けますと助かります。

 

参考記事

styly.cc


関連記事 

www.hiro877.com