Ist eine Ability ein GameObject? Ich denke nicht.
Ich finde es auch keine gute Idee die Member-Variablen direkt dem Manager zugänglich zu machen. Er sollte die üblichen und vernünftigen Get/Set Methoden nutzen. Friend halte ich hier für schlechtes Design.
gameobject ist eher ein temporärer überbegriff, weil mir nichts besseres einfällt. der manager ist jedenfalls für folgende klassen zuständig was erstellen/aufräumen/suchen/etc. anbelangt:
- player
- unit
- hero
- ability
- buff
- item
mehr "objekte" gibt es vorerst im spiel nicht, damit lässt sich aber eh schon einiges anstellen.
set/get methoden will ich in diesem fall eigentlich nicht, da es eigentlich werte sind, die nur einmalig gesetzt werden. die id könnte ich in nem konstruktor mitgeben, aber mit dem scriptobjekt funktioniert das nicht. das objekt muss vorher schon erstellt sein um ein scriptobjekt dafür anlegen zu können, weshalb man den versuch mit konstruktorübergabe imo verwerfen kann, wenn es nur für die id funktionieren würde.
set finde ich dann eben auch nicht schön, weil set für mich immer dafür da ist, wenn ich mehrmals set aufrufen kann/muss. für ein einmaliges setzen einer variable gefällt es mir eigentlich nicht so. scriptobj muss z.b. auch von außerhalb nie zugänglich sein, weshalb ich dafür auch keinen getter bräuchte. die id selbst bräuchte nur ein get, da man die nicht mehr verändern können sollte, wenn sie zugewiesen wurde.