How do I set value ScriptableObject list element property in script?
If you can see the Cell size is initial value is 0. I want to resize Cell List in script. When I resize of Cell List property, I cant set value cell list element. I can't set value Element 0. Coordinate.X or any other property.
The problem is: When I create ScriptableObject from there I can create individual cells, but I want to create from within the script and the cell count is not specified. And I want to set cell count in script, then I want to set value list elements one by one. I want to complete the process at one time because that's not the runtime I am doing. I'm just creating the Scriptableobject from the JSON file. Here is My Code:
public class CrosswordGenerator : EditorWindow
{
public CrosswordObject crossword;
private string selectedPath;
private string path;
[MenuItem("Window/Crossword Generator")]
static void Init()
{
CrosswordGenerator window = (CrosswordGenerator)EditorWindow.GetWindow(typeof(CrosswordGenerator));
window.Show();
}
private void OnGUI()
{
EditorGUILayout.LabelField("");
crossword = (CrosswordObject)EditorGUI.ObjectField(new Rect(3, 3, position.width - 6, 20), "Select Crossword", crossword, typeof(CrosswordObject), true);
selectedPath = EditorGUILayout.TextField("File Path", selectedPath);
if (GUILayout.Button("Select Json File"))
{
path = EditorUtility.OpenFilePanel("Load Data file", "", "");
selectedPath = path;
}
if (GUILayout.Button("Generate Crossword"))
{
string dataAsJson = File.ReadAllText(path);
Debug.Log("dataasjson" + dataAsJson);
CrosswordData crosswordData = CrosswordData.FromJson(dataAsJson);
crossword.crossword.Width = Convert.ToInt32(crosswordData.CrosswordCompiler.RectangularPuzzle.Crossword.Grid.Width);
crossword.crossword.Height = Convert.ToInt32(crosswordData.CrosswordCompiler.RectangularPuzzle.Crossword.Grid.Height);
ListExtras.Resize<CrosswordModel.Cell>(crossword.crossword.Cells, crosswordData.CrosswordCompiler.RectangularPuzzle.Crossword.Grid.Cell.Count);
foreach (var pair in crossword.crossword.Cells.Zip(crosswordData.CrosswordCompiler.RectangularPuzzle.Crossword.Grid.Cell, (a, b) => new { crosswordCell = a, crosswordDataCell = b }))
{
if(pair.crosswordDataCell.X.Length <2 && pair.crosswordDataCell.Y.Length < 2)
{
pair.crosswordCell.Coordinate.X = Convert.ToInt16(pair.crosswordDataCell.X);
pair.crosswordCell.Coordinate.Y = Convert.ToInt16(pair.crosswordDataCell.Y);
}
}
}
}
}
CrosswordObject crossword is my ScriptableObject and CrosswordData crosswordData is my data from JSON. if you look at the code, I am doing resize of list Cells.
ListExtras.Resize<CrosswordModel.Cell>(crossword.crossword.Cells, crosswordData.CrosswordCompiler.RectangularPuzzle.Crossword.Grid.Cell.Count);
And then I am doing 1 foreach statements from taking 2 list elements(using System.Linq Zip). When I set value Cell property I have taking error: "NullReferenceException: Object reference not set to an instance of an object".
if(pair.crosswordDataCell.X.Length <2 && pair.crosswordDataCell.Y.Length < 2)
{
pair.crosswordCell.Coordinate.X = Convert.ToInt16(pair.crosswordDataCell.X);
pair.crosswordCell.Coordinate.Y = Convert.ToInt16(pair.crosswordDataCell.Y);
}
Answer by mgazisalik · Apr 02, 2019 at 06:57 AM
I solve it. if I taking new instance from CrosswordModel.Coordinates, it solves everything.
Your answer
Follow this Question
Related Questions
ObjectReference Not set to an instance of an object 1 Answer
Static function not working in between screen 2 Answers
getting a NullReferenceException error and can't see why. 1 Answer
CAR ENTER EXIT 1 Answer
Needing a hand circumventing a "Missing Reference Exception". Any help sincerely appreciated! 1 Answer