You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed.
I have an issue with MonoBehavior with these 2 script. I'm trying to make a grid and it work, but I also get this error " 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() Node:.ctor(Boolean, Vector3) (at Assets/Script/Node.cs:10) Grid:CreateGrid() (at Assets/Script/Grid.cs:37) Grid:Start() (at Assets/Script/Grid.cs:19)" I don't really understand this, how can I solve this ? Here's the 2 scripts that i'm using to make the grid.
public class Node : MonoBehaviour {
public bool walkable;
public Vector3 worldPosition;
public Node(bool _walkable, Vector3 _worldPos)
{
walkable = _walkable;
worldPosition = _worldPos;
}
}
public class Grid : MonoBehaviour {
public Vector2 gridWorldSize;
public float nodeRadius;
public Node[,] grid;
public LayerMask unwalkableMask;
float nodeDiameter;
int gridSizeX, gridSizeY;
void Start()
{
nodeDiameter = nodeRadius * 2;
gridSizeX = Mathf.RoundToInt(gridWorldSize.x / nodeDiameter);
gridSizeY = Mathf.RoundToInt(gridWorldSize.y / nodeDiameter);
//grid = new Node[gridSizeX, gridSizeY];
CreateGrid();
}
void Update()
{
//CreateGrid();
}
public void CreateGrid()
{
grid = new Node[gridSizeX, gridSizeY];
Vector3 worldBottomeLeft = transform.position - Vector3.right * gridWorldSize.x / 2 - Vector3.forward * gridWorldSize.y / 2;
for(int x = 0; x < gridSizeX; x++)
{
for (int y = 0; y < gridSizeY; y++)
{
Vector3 worldPOint = worldBottomeLeft + Vector3.right * (x * nodeDiameter + nodeRadius)+ Vector3.forward * (y * nodeDiameter+ nodeRadius);
bool walkable = !(Physics.CheckSphere(worldPOint, nodeRadius, unwalkableMask));
grid[x, y] = new Node(walkable, worldPOint);
}
}
}
private void OnDrawGizmos()
{
Gizmos.DrawWireCube(transform.position, new Vector3(gridWorldSize.x, 1, gridWorldSize.y));
if(grid != null)
{
foreach(Node n in grid)
{
Gizmos.color = (n.walkable) ? Color.white : Color.red;
Gizmos.DrawCube(n.worldPosition, Vector3.one * (nodeDiameter - .1f));
}
}
}
}
NV$$anonymous$$ I've solve it. The problem was because I have the Node class set as a $$anonymous$$onoBehavior. removing that part solve it.
Your answer
Follow this Question
Related Questions
Using arrays of vector3s to avoid new 1 Answer
Help with arrays of arrays please 2 Answers
Very slow performance when variable has serialize tag 3 Answers
Adding components via parameter 0 Answers