Вы можете просто передать parent
в Instantiate
parent
Родитель, который будет назначен новому объекту
var newObj = Instantiate(prefab, parentTransform);
или с дополнительными преобразованиями
var newObj = Instantiate (prefab, position, rotation, parentTransform);
Или, как уже говорили другие, вы можете сделать это потом в любое время, просто назначив новый transform.parent
newObj.transform.parent = parentTransform;
или с использованием transform.SetParent
newObj.transform.SetParent(parentTransform, worldPositionStays);
Преимущество последнего состоит в том, что у вас есть дополнительный параметр worldPositionStays
worldPositionStays Если true
, родительская относительная позиция, масштаб и поворот изменяются таким образом, что объект сохраняет то же положение в мировом пространстве, поворот и масштаб, что и раньше.
назначение нового
transform.parent = parentTransform;`
всегда будет действовать так же, как
transform.SetParent(parentTransform);
, так как значение по умолчанию для worldPositionStays
(так что если вы не явно передать его) true
.
Так что для конкретного c случая пользовательского интерфейса в Canvas
вы можете использовать
public TheSpawnComponent : MonoBehaviour
{
// Via the Inspector drag&drop any object here that is inside the canvas
// or the canvas itself
[SerializeField] private GameObject parentInCanvas;
[SerializeField] private Button buttonPrefab;
public void DoInstantiate()
{
var newButton = Instantiate (buttonPrefab, parentInCanvas);
//Todo Position and callback
}
}
Или я Если сценарий spawner прикреплен к объекту внутри холста, вы можете также порождать его как дочерний, используя
var newButton = Instantiate(buttonPrefab, transform);