For starters, if all of the articles on the internet have not helped you to solve the problem of 2D pathfinding then you aren't looking hard enough haha.
Using a 2D tile array for your world/level generation and representation will definitely simplify things i.e. For example you could internally represent your world in a grid of tiles and take it from there :
Once you have a tile grid testing ifthats set up you can move a unit tothen interrogate a neighbouring tile is very straight forward as you have all of the information you need to test neighbours in your pathfinding algorithmmove path to see if its walkable based on the terrain type, or if it's blocked by an child obstacle etc.
For example you could just have a bit of logic code in your TryGetNeighbours function call in each step of your pathfinding algorithm [untested code example] :
void Search(Node start, Node goal) {
// ...
Node[] neighbours = new Node[];
if(TryGetNeighbours(currentNode, out neighbours) {
foreach(var node in neighbours) {
// do pathfinding calcs i.e. f = g + h. etc
...
}
}
// ...
}
bool TryGetNeighbours(Node current, out Node[] neighbours) {
Node neighbour;
for(int x = 0; x < 4; x++) {
// determine neighbouring node by Vector addition etc
neighbour = current.pos + x
if(neighbour.CanTraverse(current) {
neighbours[x] = neighbour;
}
}
if(neighbours[0] != null) return true;
return false;
}