Page 1 of 1

ランダム遷移コンポーネントの作り方について

Posted: 2017/05/10 10:40
by YMMY-
最近Arbor2が結構大きく取り上げられているようで嬉しく思いますが、こちらのスライドを見てひとつ気になったことがあります。

https://www.slideshare.net/Unite2017Tok ... y-75810280

これの26枚目にある、エディター上で任意数の分岐を作成し、それらに重みを付けたランダムな遷移ができるコンポーネントです。
使い始めのころ全く同じような機能のコンポーネントを作ろうとしたのですが、実行時になぜかnull参照エラーが発生してしまい、あきらめていました。
2つや3つ固定で重みを付けたランダム分岐はできたのですが……
これがあればとても便利になりますので、良かったらこれの作り方を教えて頂けないでしょうか。
よろしくお願い致します。

Re: ランダム遷移コンポーネントの作り方について

Posted: 2017/05/10 11:15
by caitsithware
Arbor組み込みBehaviourとして追加すべきでしたね。
一度暫定版として作成してみますので少々お待ちください。

あと少々確認していただきたいのですが、
実行時にnull参照エラーが出たというのはUnityエディタ上でのプレイでしょうかそれともビルドした実機上でしょうか。
もしかすると潜在的な不具合の可能性もあるので、よろしければ問題の出たスクリプトが残っているなら見せていただけたり、具体的なエラーの発生個所や発生状況など教えていただけると検証に助かります。

Re: ランダム遷移コンポーネントの作り方について

Posted: 2017/05/10 11:57
by caitsithware
暫定的にRandomTransitionを作成いたしました。
ArborRandomTransition.unitypackage
(9.59 KiB) Downloaded 338 times
こちらをダウンロードしてArborを使用しているプロジェクトにインポートしてください。

サンプルシーンは、ArborRandomTransition/Examples/Scenes/RandomTransitionです。
ランダムに遷移して別々のテキストを表示するサンプルとなっています。

使い方
ArborRandomTransition.png
ArborRandomTransition.png (21.25 KiB) Viewed 5424 times
  • 挙動追加から Transition > RandomTransition を選択して追加
  • LinksのSizeを遷移したい数を、各Weightに遷移の重み(多いほど遷移確立があがる)を設定。
  • Link[n]/Linkから遷移先ステートに接続
こちらで特に動作に問題ないようでしたら次回更新時に組み込みますので、
お手数おかけしますがご確認よろしくお願いいたします。

Re: ランダム遷移コンポーネントの作り方について

Posted: 2017/05/10 14:40
by YMMY-
迅速なご対応ありがとうございます。
さっそく確認しましたところ、理想的な動きをしてくれました。
これで更に製作が捗ります。
caitsithware wrote: あと少々確認していただきたいのですが、
実行時にnull参照エラーが出たというのはUnityエディタ上でのプレイでしょうかそれともビルドした実機上でしょうか。
もしかすると潜在的な不具合の可能性もあるので、よろしければ問題の出たスクリプトが残っているなら見せていただけたり、具体的なエラーの発生個所や発生状況など教えていただけると検証に助かります。
こちらについては該当するスクリプトを削除していたようで、残念ながら残っていませんでした。
しかし、当時を思い出しながらそれらしきものを再現してみました。

Code: Select all

using UnityEngine;
using System.Collections;
using Arbor;
using System.Collections.Generic;

public class RandomTest : StateBehaviour {

    [SerializeField]
    private List<StateLink> LinkList = new List<StateLink>();

    // Use this for initialization
    void Start () {	
	}

	public override void OnStateBegin() {
        if (LinkList == null) return;

        int i = Random.Range(0, LinkList.Count);

        Transition(LinkList[i]);
    }
}
ウェイトはどう処理していたか忘れましたが、概ねこんな感じでStateLinkのListを用意してました。
これでエディター上で分岐先を増やし、各々繋いでもnull参照になっていました。
(ちなみにビルドの確認はしませんでした)
しかし今確認したところ、特に問題なく動作していました。
問題が発生していたのは一年近く前のバージョンのUnityとArbor2なので、当時はバグが潜んでいたがここまでのアップデートにより解消されたのかもしれません。

どちらにしても、今回作って頂いたものはウェイトまでエディター上で簡単に調整できますし、とても重宝すると思います。
本当にありがとうございました!

Re: ランダム遷移コンポーネントの作り方について

Posted: 2018/02/23 06:24
by caitsithware
しかし今確認したところ、特に問題なく動作していました。
問題が発生していたのは一年近く前のバージョンのUnityとArbor2なので、当時はバグが潜んでいたがここまでのアップデートにより解消されたのかもしれません。
ご確認ありがとうございます。
とくに問題なさそうでよかったです。