Фактический ответ на заголовок «Какая разница» будет:
newTerrain.GetComponent("Terrain")
возвращает ссылку Component
, а
newTerrain.GetComponent<Terrain>()
возвращает ссылку Terrain
.
Так что для фактического использования ссылки вам нужно будет ввести первый тип, например
(Terrain) newTerrain.GetComponent("Terrain")
Однако оба имеют оператор bool
(поскольку Terrain
наследует от Behaviour
, который наследует от Component
, который наследует от Object
), поэтому для простой проверки существования оба должны точно вести себя одинаково .. за исключением того, что string
версия медленнее.
Так что остается странным, что перегрузка, принимающая string
, не работает должным образом.
В качестве альтернативы вы также можете использовать либо перегрузку с Type
в качестве параметра, например
public GameObject GetPooledObject(Type type)
{
... GetComponent(type)
}
и используйте
GameObject newTerrain = ObjectPool.Instance.GetPooledObject(typeof(Terrain));
или снова сделайте общий метод объединения объектов, как
public GameObject GetPooledObject<T>() where T : Component
{
... GetCompoment<T>()
}
и используйте
GameObject newTerrain = ObjectPool.Instance.GetPooledObject<Terrain>();