public void GenerateBlackBoard(GraphData currentData) { Blackboard blackboard = new Blackboard(this) { scrollable = true, }; blackboard.AddToClassList("grayboard"); //blackboard.Add(new BlackboardSection { title="Exposed Properties" }); blackboard.addItemRequested = _blackboard => { }; blackboard.SetPosition(new Rect(10, 30, 200, 200)); this.Add(blackboard); /* Start: how to add to blackboard */ /*var container = new VisualElement(); * var blackboardField = new BlackboardField { * text = "Sample_Property", * typeText = "String Property" * }; * var blackboardFieldValue = new TextField("Value") { * value = "Value" * }; * blackboardFieldValue.RegisterValueChangedCallback(evt => { * Debug.Log(evt.newValue); * }); * var blackBoardRow = new BlackboardRow(blackboardField, blackboardFieldValue); * container.Add(blackboardField); * container.Add(blackBoardRow); * blackboard.Add(container);*/ /* End: how to add to blackboard */ if (currentData != null) { blackboard.title = currentData.name; blackboard.subTitle = "Properties"; FieldInfo[] fields = currentData.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance); //Debug.Log(currentData.GetType()); for (int i = 0; i < fields.Length; i++) { FieldInfo fieldInfo = fields[i]; if (!hiddenFields.Contains(fieldInfo.Name)) { //Debug.Log(fields[i].ToString()); string fName = SplitCamelCase(fieldInfo.Name); var container = new VisualElement(); BlackboardSection bbField; BlackboardRow bbRow; switch (fieldInfo.FieldType.ToString()) { case "System.String": bbField = new BlackboardSection { title = fName }; container.Add(bbField); TextField bbfValue = new TextField() { value = fieldInfo.GetValue(currentData) as string, multiline = true }; bbfValue.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfValue); container.Add(bbRow); break; case "System.Int32": bbField = new BlackboardSection { title = fName }; container.Add(bbField); IntegerField bbfIntValue = new IntegerField() { value = (int)fieldInfo.GetValue(currentData) }; bbfIntValue.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfIntValue); container.Add(bbRow); break; case "System.Single": bbField = new BlackboardSection { title = fName }; container.Add(bbField); FloatField bbfFloatValue = new FloatField() { value = (float)fieldInfo.GetValue(currentData) }; bbfFloatValue.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfFloatValue); container.Add(bbRow); break; case "UnityEngine.Vector2": bbField = new BlackboardSection { title = fName }; container.Add(bbField); Vector2Field bbfVector2Value = new Vector2Field() { value = (Vector2)fieldInfo.GetValue(currentData) }; bbfVector2Value.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfVector2Value); container.Add(bbRow); break; case "UnityEngine.Vector3": bbField = new BlackboardSection { title = fName }; container.Add(bbField); Vector3Field bbfVector3Value = new Vector3Field() { value = (Vector3)fieldInfo.GetValue(currentData) }; bbfVector3Value.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfVector3Value); container.Add(bbRow); break; case "UnityEngine.AnimationCurve": bbField = new BlackboardSection { title = fName }; container.Add(bbField); CurveField bbfAnimationCurveValue = new CurveField() { value = (UnityEngine.AnimationCurve)fieldInfo.GetValue(currentData) }; bbfAnimationCurveValue.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfAnimationCurveValue); container.Add(bbRow); break; default: if (fieldInfo.FieldType.ToString().IndexOf("UnityEngine.") == 0) { bbField = new BlackboardSection { title = fName }; container.Add(bbField); ObjectField bbfObjectValue = new ObjectField() { value = (UnityEngine.Object)fieldInfo.GetValue(currentData), allowSceneObjects = false, objectType = fieldInfo.FieldType }; bbfObjectValue.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfObjectValue); container.Add(bbRow); } else { bbField = new BlackboardSection { title = fName }; container.Add(bbField); EnumField bbfEnumValue = new EnumField((System.Enum)fieldInfo.GetValue(currentData)) { value = (System.Enum)fieldInfo.GetValue(currentData) }; bbfEnumValue.RegisterValueChangedCallback(evt => { fieldInfo.SetValue(currentData, evt.newValue); //Debug.Log(evt.newValue); }); bbRow = new BlackboardRow(bbField, bbfEnumValue); container.Add(bbRow); } break; } blackboard.Add(container); } } } // Get the properties of 'Type' class object. }