Forums › 💬 NodeCanvas › 🤩 Custom Nodes and Tasks › Retrieve info from Data Classes
Is there an example or snippet how to retrieve data in a condition or action from nested data classes?
let’s say
|
1 2 3 4 5 6 7 8 9 10 11 |
public class myRoom { public bool hasChair; public List<Book> books; public Dictionary<string, string> tables } public class Book { public string name; public string title; } |
And how to create a node canvas drawer to see the information in the object editor?
All suggestion are appreciated.
First of all, sorry it was the wrong Section…
problem solved for the class, it should be initialised before use.
I am a Newbie…
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using ParadoxNotion.Design; public class BookDrawer : ObjectDrawer<Book> { public override Book OnGUI(GUIContent content, Book instance) { if (instance == null) { instance = new Book("", ""); } GUILayout.BeginVertical("box"); instance.name = EditorGUILayout.TextField ("Name", instance.name); instance.title = EditorGUILayout.TextField ("Title", instance.title); GUILayout.EndVertical(); return instance; } } |
Hey,
No problem about the wrong section!
I am glad you’ve solved the issue with the drawer. Indeed a class should first be initialized so that is not null and the way you are doing it is just fine as well. 🙂
Regarding your first question about retrieving data in an action/condition Task, considering you are still facing trouble with this, can you please clarify what you mean? I am not sure I correctly understand what you want to do.
Thanks!
Hey,
The problem was that i want to see in the object editor (blackboard) / task – condition window the data of custom classes. If there is no default initialiser but only custom initialisers the task / condition window freezes and the error count is more then 1000 in a few seconds. The solution for the problem is that i added in all my data-classes a default initialiser. Then the object editor (blackboard) and task window are always displaying the correct information without any custom drawers.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
public class myRoom { public bool hasChair; public List<Book> books; public Dictionary<string, string> tables // for correct display of data in object editor (blackboard) / task window / condition window public myRoom() { this.hasChair = true; this.books = new List<Book>(); this.tables = new Dictionary<string, string>(); } // for use in other methods public myRoom(bool _hasChair) { this.hasChair = _hasChair; this.books = new List<Book>(); this.tables = new Dictionary<string, string>(); } } public class Book { public string name; public string title; // for correct display of data in object editor (blackboard) / task window / condition window public Book() { this.name = ""; this.title = ""; } // for use in other methods public Book(string _name, string _title ) { this.name = _name; this.title = _title; } } |
What is the purpose of using the custom data / actions and so on …
Make a FSM that acts on data that is stored in the classes (GlobalBlackBoard), example:
Condition: hasChair == true
then
Action: instantiate a chair.
Thanks for the follow up and the further information! 🙂
Yes, you can definitely use custom data classes (or structs) in a blackboard and then read that data from within a task.
If you are facing trouble with this, just let me know.
Thank you.
