#Boltとは
AssetStoreで売られているビジュアルスクリプティングシステム
プログラミングを知らない人でもノードを組んで制御できるもの
主にFlow Graphs(UE4のBPみたいなもの)とState Graphs(PlayMakerみたいなもの)で組んで行く
個人的には今一番きてるビジュアルスクリプティングシステム
Flow Graphs(UE4のBPみたいなもの)
State Graphs(PlayMakerみたいなもの)
#今回は
色々なUnityのイベントシステムをBoltでやったらどんな感じのノードになるかとか
スクリプトからBoltのイベントの呼び方などを紹介したいと思います
#動作環境
Unity2018.2.3f1
Bolt 1.4.0f3
#LifeCycle系イベントノード
UnityのStart()やOnEnable()など
使用例
他多数
#Input系イベントノード
ハードからの入力など
主にゲームパッド、キーボード、マウスが取れる
#UI系イベントノード
OnGUIやUGUIなどのボタンイベントなど
使用例
他多数
#Application系イベントノード
アプリ終了時やアプリ再開時など
使用例
他多数
#Physics系イベントノード
当たり判定時など
使用例
他多数
#Bolt固有イベントノード
ノード内で使えるイベント
使用例
#Uniyイベントノード
元々Unityにあるイベント 主にボタンクリックとかアニメーションイベントとかに使ったりする
使用例
#以外のイベントノード
Animation,Editor,Hierarchy,Navigation,Pysics2D,Renderingなどがあります
大体使うのは上記のものかなと思います
#スクリプト→Boltイベント
スクリプト側
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 () {
}
}
#Bolt→スクリプトイベント
このままだとスクリプトのメソッドがノードとして呼べないので
Tools→Bolt→UpDateUnitOptionsを実行するとスクリプトのメソッドが使えるようになる
この手順は毎回新規でメソッド作った際や引数などを設定し直した場合など毎回実行してあげる必要があります
あとはターゲットとなるスクリプトのオブジェクトをドラック&ドロップすれば任意のメソッドにアクセス可能です
受け側のスクリプト
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にイベントの名前を指定しましょう
次はノード側の設定です
イベント名前をAnimationキーイベントのParametersの名前と一緒にしましょう
以上です
#TimeLineイベント→Bolt
ここではTimeLineからスクリプトを呼べるアセットを使います
基本TimeLineイベント→スクリプト→Boltの順番で処理をします
先にスクリプトの書いて、Boltコンポーネントが入っているオブジェクトにアタッチします
TimeLineイベントからUnityEventを呼べるようになります
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を追加します
追加したら、トラックのゲームオブジェクトがnullであれば、FlowGraphsコンポーネントかStateGraphsコンポーネントが付いているオブジェクトをアタッチしてください
画面右クリックでAddTimelineEventClipでクリップの追加をします
クリップをクリックするとメソッドが呼べる画面がInspectorに出ます
Method with paramのチェックを付けて
Methodのプルダウンをクリックして
先ほど作ったスクリプトのメソッドを選びます
選ぶとeventName(UnityEventの引数名)とゆうプロパティができるので、イベント名指定します
このイベント名はノード側のイベント名と同じにして紐ずけないといけないので覚えときましょう
ちなみに引数は1つしか指定できないっぽいです
以上こんな感じであれば、TimeLineイベント→Boltを呼べるのですが、
間にスクリプトを挟んでるのが気持ち悪くありませんか?
正直Bolt バージョンが1.3.0の時は直接呼べたのですが、1.4.0になってAPIが変わっていて、アクセスできなかったので今回はスクリプトを挟めた形をとりました
ちなみにできていた頃はこんな感じ
https://twitter.com/SaseKubrick/status/1015081688265658368