MonoBehaviourを継承したクラスのFlexibleField

Forum rules
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。

Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

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

Topic review
   

Expand view Topic review: MonoBehaviourを継承したクラスのFlexibleField

Re: MonoBehaviourを継承したクラスのFlexibleField

by caitsithware » 2018/06/20 14:25

ご質問ありがとうございます。

FlexibleFieldについては、Serializable属性をつけた非Unityオブジェクトクラスを扱うためのクラスとなっています。
そのため、MonoBehaviourの継承クラスへの使用は想定しておりませんでした。
(Contant値を扱うために内部的にnew T()しており、今回TがMonoBehaviourだったためUnityが警告を出した、ということになります)

自作コンポーネントへの参照方法ですが、FlexibleComponentとSlotTypeAttributeを使用することで可能です。

【TestStateBehaviourScript.cs】

Code: Select all

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

[AddComponentMenu("")]
public class TestStateBehaviourScript : StateBehaviour {
    [SlotType(typeof(Test))]
    public FlexibleComponent test;

}
スクリプトリファレンス : FlexibleComponent
スクリプトリファレンス : SlotTypeAttribute

このあたりの詳細がドキュメントになかったので修正いたします。

MonoBehaviourを継承したクラスのFlexibleField

by kudou » 2018/06/20 13:58

unity 2018.1.0 f2
Arbor3.1.2

MonoBehaviourを継承したクラスのFlexibleFieldを使用すると警告が出力されます。
こういった使い方は問題ありますでしょうか?

You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
Test:.ctor()
System.Activator:CreateInstance()
Arbor.FlexibleField`1:.ctor() (at Assets/Plugins/Arbor/Internal/Scripts/FlexibleField.cs:42)
FlexibleTest:.ctor()

手順
①下記のコードを作成
②ArborFSMをもつGameObjectを作成
③ステートを作成してTestStateBehaviourScriptの挙動を追加する
④UnityEditorを再生する

【TestVariable.cs】

Code: Select all

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

[System.Serializable]
public class Test : MonoBehaviour
{
	// Declare Serialize Fields
}

[System.Serializable]
public class FlexibleTest : FlexibleField<Test>
{
}
【TestStateBehaviourScript.cs】

Code: Select all

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

[AddComponentMenu("")]
public class TestStateBehaviourScript : StateBehaviour {

    public FlexibleTest test;

}

Top