You’re violating two different Unity “customs” here.
-
You’re using inheritance. By default Unity users and the way scripts are defaulted are NOT set up for this. Yes it works, but using it will open yourself to constant future headaches when you (or others) misuse your code, not noticing that it is derivative of something else derivative of a MonoBehaviour (for example)
-
you’re using GameObject.Find(). That almost always ends in disasters.
Remember the first rule of GameObject.Find():
Do not use GameObject.Find();
More information: Regarding GameObject.Find · UnityTipsRedux
More information: Why cant i find the other objects?
In general, DO NOT use Find-like or GetComponent/AddComponent-like methods unless there truly is no other way, eg, dynamic runtime discovery of arbitrary objects. These mechanisms are for extremely-advanced use ONLY.
If something is built into your scene or prefab, make a script and drag the reference(s) in. That will let you experience the highest rate of The Unity Way™ success of accessing things in your game.
For instance, just make a board controller with public fields for what you need and fill it out on each instance of your board.