GameObject? obj;
string? message;
クラスに分類されるデータ型は参照型といいます。
それぞれの固有のデータの他に、null という情報が代入出来ます。
つまり元々、クラス自体は null を代入できるのですが、それゆえに Null Reference Excepton エラーが発生します。
そのため最近の C# では、参照型であるクラスも、? を付けているときだけ、null を代入できる機能が追加されました。
それが今回の string の null 許容参照型です。参照型であるクラスに ? を付けることで、null 許容型となります。
そしてこの機能を利用する場合、単に string と宣言した場合には、null が代入できない状態になります。
元々 null が代入できる型であるものの、それを明示的に ? を付けたときだけ null を代入できるようにし、
それ以外では参照型であっても null を代入できないようにすることで、null チェックの処理や、
null エラー自体をなくそう、というのが、この null 許容参照型の趣旨です。
ただし現在は、これはプレビュー機能です。採用してもいいですが、エラーまみれになります。
GameObject obj; と書いてある場合、本来なら自動的に null が代入されるのですが、それが null許容参照型からみればルール違反となるためです。
こういう方法がある、とだけ覚えておくといいでしょう。
参考サイト
MicroSoft
null 許容参照型