Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Boltで使える色々なイベントの紹介

More than 1 year has passed since last update.

Boltとは

AssetStoreで売られているビジュアルスクリプティングシステム
プログラミングを知らない人でもノードを組んで制御できるもの
主にFlow Graphs(UE4のBPみたいなもの)とState Graphs(PlayMakerみたいなもの)で組んで行く
個人的には今一番きてるビジュアルスクリプティングシステム
スクリーンショット 2018-08-18 18.10.17.png
Flow Graphs(UE4のBPみたいなもの)
スクリーンショット 2018-08-18 18.16.38.png
State Graphs(PlayMakerみたいなもの)
スクリーンショット 2018-08-18 18.16.49.png

今回は

色々なUnityのイベントシステムをBoltでやったらどんな感じのノードになるかとか
スクリプトからBoltのイベントの呼び方などを紹介したいと思います

動作環境

Unity2018.2.3f1
Bolt 1.4.0f3

LifeCycle系イベントノード

UnityのStart()やOnEnable()など
使用例
スクリーンショット 2018-08-18 19.07.35.png
他多数
スクリーンショット 2018-08-18 19.08.17.png

Input系イベントノード

ハードからの入力など
主にゲームパッド、キーボード、マウスが取れる 

使用例
Unity_2018_2_3f1_Personal__64bit__-_Untitled_-_2018_-_PC__Mac___Linux_Standalone__Personal___Metal_.png
他多数
Unity_2018_2_3f1_Personal__64bit__-_Untitled_-_2018_-_PC__Mac___Linux_Standalone__Personal___Metal_.png

UI系イベントノード

OnGUIやUGUIなどのボタンイベントなど
使用例
Unity_2018_2_3f1_Personal__64bit__-_Untitled_-_2018_-_PC__Mac___Linux_Standalone__Personal___Metal_.png
他多数
Unity_2018_2_3f1_Personal__64bit__-_Untitled_-_2018_-_PC__Mac___Linux_Standalone__Personal___Metal_.png

Application系イベントノード

アプリ終了時やアプリ再開時など
使用例
スクリーンショット 2018-08-18 19.03.17.png
他多数
スクリーンショット 2018-08-18 19.04.18.png

Physics系イベントノード

当たり判定時など
使用例
スクリーンショット 2018-08-18 19.11.58.png
他多数
スクリーンショット 2018-08-18 19.12.58.png

Bolt固有イベントノード

ノード内で使えるイベント
使用例
スクリーンショット 2018-08-18 19.30.39.png
スクリーンショット 2018-08-18 19.31.02.png

Uniyイベントノード

元々Unityにあるイベント 主にボタンクリックとかアニメーションイベントとかに使ったりする
使用例
スクリーンショット 2018-08-18 19.31.30.png
スクリーンショット 2018-08-18 19.31.37.png

以外のイベントノード

Animation,Editor,Hierarchy,Navigation,Pysics2D,Renderingなどがあります
スクリーンショット 2018-08-18 19.36.51.png
大体使うのは上記のものかなと思います

スクリプト→Boltイベント

スクリプト側

Send.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Bolt;

public class Send : MonoBehaviour {
    public GameObject target;
    // Use this for initialization
    void Start () {
        //第一引数 ターゲットなるノードがあるオブジェクト
        //第二引数 イベント名
        //第三引数 パラメーター  第三引数以降は自由に引数の数を設定できる
        CustomEvent.Trigger(target,"RecivEvent","hoge");
    }

    // Update is called once per frame
    void Update () {

    }
}

ターゲット側のノード
スクリーンショット 2018-08-18 19.57.16.png

Bolt→スクリプトイベント

このままだとスクリプトのメソッドがノードとして呼べないので
Tools→Bolt→UpDateUnitOptionsを実行するとスクリプトのメソッドが使えるようになる
この手順は毎回新規でメソッド作った際や引数などを設定し直した場合など毎回実行してあげる必要があります
スクリーンショット 2018-08-18 20.07.56.png
あとはターゲットとなるスクリプトのオブジェクトをドラック&ドロップすれば任意のメソッドにアクセス可能です
Aug-18-2018 20-18-07.gif

受け側のスクリプト

Receiv.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Receiv : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    public void OnReceiv(string str)
    {
        Debug.Log("ReceivEvent!!");
    }
}

Animationキーイベント→Bolt

自分はよく足音とかでAnimationキーイベントを使ってます
最初に適当にアニメーションを作ります
で適当にAnimationキーイベントを打ちます
キーイベントのFunctionをTriggerUnityEvent(string)を選びましょう
出てこないであれば、AnimationコンポーネントとFlowGraphsコンポーネントかStateGraphsコンポーネントが一緒のオブジェクトに入ってない可能性があるのでチェックしましょう 
Parametersにイベントの名前を指定しましょう
スクリーンショット 2018-08-18 20.24.43.png

次はノード側の設定です
イベント名前をAnimationキーイベントのParametersの名前と一緒にしましょう
スクリーンショット 2018-08-18 20.31.54.png
以上です

TimeLineイベント→Bolt

ここではTimeLineからスクリプトを呼べるアセットを使います
基本TimeLineイベント→スクリプト→Boltの順番で処理をします
先にスクリプトの書いて、Boltコンポーネントが入っているオブジェクトにアタッチします
TimeLineイベントからUnityEventを呼べるようになります

Send.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Bolt;

public class Send : MonoBehaviour {
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    public void UnityEvent(string eventName)
    {
        //第一引数 ターゲットなるノードがあるオブジェクト
        //第二引数 イベント名
        //第三引数 パラメーター 
        CustomEvent.Trigger(gameObject,eventName,"hoge");
    }
}

Timeline events
https://assetstore.unity.com/packages/3d/characters/timeline-events-115300
アセットをインポートしてきたら
先にTimelineを作ります
作ったらTimeline画面を出し、現在あるトラックを全消しにします
そして、画面右クリックで新しいトラックTimelineEventTrackを追加します
スクリーンショット 2018-08-18 20.44.54.png
追加したら、トラックのゲームオブジェクトがnullであれば、FlowGraphsコンポーネントかStateGraphsコンポーネントが付いているオブジェクトをアタッチしてください
画面右クリックでAddTimelineEventClipでクリップの追加をします
スクリーンショット 2018-08-18 20.48.29.png
クリップをクリックするとメソッドが呼べる画面がInspectorに出ます
スクリーンショット 2018-08-18 20.51.11.png
Method with paramのチェックを付けて
Methodのプルダウンをクリックして
先ほど作ったスクリプトのメソッドを選びます
スクリーンショット_2018-08-19_15_59_34.png
選ぶとeventName(UnityEventの引数名)とゆうプロパティができるので、イベント名指定します
このイベント名はノード側のイベント名と同じにして紐ずけないといけないので覚えときましょう
ちなみに引数は1つしか指定できないっぽいです
Unity_2018_2_3f1_Personal__64bit__-_test_unity_-_2018_-_PC__Mac___Linux_Standalone__Personal___Metal_.png

次にノード側の処理です
Unity_2018_2_3f1_Personal__64bit__-_test_unity_-_2018_-_PC__Mac___Linux_Standalone__Personal___Metal_.png

以上こんな感じであれば、TimeLineイベント→Boltを呼べるのですが、
間にスクリプトを挟んでるのが気持ち悪くありませんか?
正直Bolt バージョンが1.3.0の時は直接呼べたのですが、1.4.0になってAPIが変わっていて、アクセスできなかったので今回はスクリプトを挟めた形をとりました
ちなみにできていた頃はこんな感じ
https://twitter.com/SaseKubrick/status/1015081688265658368

Sase
元ゲームプログラマー 現在はインタラクティブ系の会社で Unityをメインでエンジニアをやっています!
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