changed gameobject to be abstract class