Playモード中での変更値の適用

Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。

Post a reply

Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Playモード中での変更値の適用

Re: Playモード中での変更値の適用

by caitsithware » 2018/02/23 04:12

Reflectionについては.NETの使用方法なので詳しいところまではサポートできませんが簡単にですが説明いたしますね。

Code: Select all

Type type = typeof(取得したいクラス);
MethodInfo[] methodInfos = type.GetMethods(必要に応じてBindingFlagsなどを指定);
methodInfos[0].Invoke( staticメソッドならnull、そうじゃなければインスタンス , new object[]{ 渡したい引数... } );
みたいな感じです。

Code: Select all

//   [SerializeField] static MethodInfo[] methods = Type.GetType ().GetMethods (); <- ここが上手く取れない
この場合はType.GetType()の引数が空なので定義されてないstaticメソッドということでコンパイルエラーが出ているのではないでしょうか?
Reflection周りのリファレンスを見るのをお勧めいたします。

Re: Playモード中での変更値の適用

by kj555 » 2017/09/25 17:57

ありがとうございます。
よくわかりました。

https://www.slideshare.net/Unite2017Tok ... y-75810280
こちらの講演に感銘を受けて試用をしているのですが、パフォーマンスは早いほうが当然良いので、
コード自動生成の部分、スライドP61〜のリフレクションによるメソッド抽出をこちらも実装出来るか試しているのですが
メソッドをリフレクションで取得する部分の方法は分かりますでしょうか?
講演者様独自カスタマイズ部分になりますので、もちろん簡単に分かればという事でお願いいたします。

Code: Select all

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

public class StateMaker : StateBehaviour
{
	[SerializeField] public List<StateLink> trantisionList = new List<StateLink> ();
	//	[SerializeField] static MethodInfo[] methods = Type.GetType ().GetMethods (); <- ここが上手く取れない


	public void method1 ()
	{
		
	}

	public void method2 ()
	{

	}
}

Re: Playモード中での変更値の適用

by caitsithware » 2017/09/24 14:11

Play中での値を復元するにはArborEditorウィンドウ上で、変更したステートやStateBehaviourのコピーを行い、Play終了後に貼り付けしてください。
また、複数ステートを復元(上書き)する機能は現状ありませんので、貼り付け後に遷移の付け直し作業等が必要な場合もありますのでご注意ください。

実装できそうであれば今後のアップデートで復元機能も付けたいと思います。
本対応はそれまでお待ちください。

また、InspectorウィンドウでのCopy Componentにつきましては、Unityの仕様上、StateBehaviourが保持できないため基本的には使用しないようにお願いいたします。

Playモード中での変更値の適用

by kj555 » 2017/09/24 13:37

こんばんわ。

試用版にてMAC版最新リリースUnity(2017)から試しています。

AIを作成しPlayモード中にステート追加やパラメータの値変更等でチューニングした後プレイを終了させると
リセットされますが、これを覚えさせる方法は何か用意されているのでしょうか?

ステート追加に関してはプレイモード中にインスペクタよりFSMコンポーネントを右クリックしてCopy Componentし、
プレイモード終了後にPaste Component Valuesをすることで何度か上手く行きましたが、ステートが復元されますが
値の変更は復元されませんでした。
又、Paste後に稀にFSMエディタデータが壊れるのか、ノードの表示が一切無くなり、Unity再起動等でも復帰しなくなり
FSMを1から作り直す必要がありました。

これは試用版だからでしょうか。
何か正しい手段があればご教示下さい。

Top