Boltはほとんど経験がなくて的外れかもしれませんので、あくまでも参考程度ということでご容赦ください。
ある要素のプロパティを書き換えると他の要素のプロパティも一斉に変わってしまうのは、確かに値型と参照型の挙動と違い(参考:値型と参照型 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C)を連想したのですが、試しに下記のようにclass
をstruct
にしてみても...
lang
1using UnityEngine;
2using Unity.VisualScripting;
3
4[System.Serializable]
5[Inspectable]
6public struct StageStruct
7{
8 [Inspectable] public GameObject timeLinePrefab;
9 [Inspectable] public Material backGroundMaterial; // nullならステージ1のマテリアル使用する事
10 [Inspectable] public bool isCleard;
11 [Inspectable] public int cleardScore = 0;
12}
やはり同様に変な挙動になってしまいました。
何かこの現象を回避する手はないものか、といじっているうちに至った手段として...
- 「New Item:」欄の値側の型はひとまず
StageStruct
以外の型を選択する。
- キー側のキーを書き換えながら、必要な数の要素をひととおり追加してしまう。
- 要素が揃ったところで、個々の要素の型を
StageStruct
に切り替える。
としたところ、下図のように個々の要素を個別に編集できました。
ですがどうにも面倒で、何か根本的な解決法が欲しいところではあります。「Inspectable
属性を付けるだけでBolt上で使用可能になる」という機能は魅力的なだけに残念な感じですね。
radianさんの「設定している部分のソースが無いので」とおっしゃるのはもっともな話で、デバッガで挙動を追跡すれば手がかりが見つかるかもしれないとは思いました。ですが情けないことに、私にとってはどうにも複雑怪奇なコードで挫折しました...今後のアップデートで修正されるのを期待したいところです。
組み込みの型ではこのような変な現象は起こらないようですが、組み込みの型と独自の型で何が違うのだろうか...と考え、もしかすると型を画面上に描画する機構が用意されているかどうかに起因するのかもしれない、と思いました。
そこで下記のように...
lang
1using System;
2using UnityEngine;
3#if UNITY_EDITOR
4using UnityEditor;
5
6[CustomPropertyDrawer(typeof(StageStruct))]
7public class StageStructDrawer : PropertyDrawer
8{
9 public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
10 {
11 return EditorGUI.GetPropertyHeight(property);
12 }
13
14 public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
15 {
16 EditorGUI.PropertyField(position, property, label, true);
17 }
18}
19#endif
20
21[Serializable]
22public struct StageStruct
23{
24 public GameObject timeLinePrefab;
25 public Material backGroundMaterial; // nullならステージ1のマテリアル使用する事
26 public bool isCleard;
27 public int cleardScore;
28}
29
30namespace Unity.VisualScripting.Generated.PropertyProviders
31{
32 [SerializedPropertyProvider(typeof(StageStruct))]
33 public class PropertyProvider_StageStruct : SerializedPropertyProvider<StageStruct>
34 {
35 }
36}
class
ではなくstruct
とする。
Inspectable
属性は外してしまう。
StageStructDrawer
を追加し、ここに描画処理を記述する。
- Bolt上で使えるように
PropertyProvider_StageStruct
も用意する。
としたところ、下図のように個々の要素が独立するようになりました。
とはいえこれはこれで手間がかかりますし、表示のされ方も少々ブサイクです。見栄えをよくするにはもっとしっかりStageStructDrawer
を作り込む必要があり、ますます面倒になってしまいそうですね...