unity3d - 有没有办法指定游戏对象在层次结构中统一生成的位置?
问题描述
我已经设置了一个随机生成器来创建新的游戏对象,但是它们是在我的画布之外创建的,因此在玩游戏时看不到它们。有没有什么办法解决这一问题?对象“否定想法”是 UI 按钮,并且正在画布之外创建,即使我需要它们出现在屏幕上以便可以使用它们。
我确实看到了一个类似的问题,但这些建议对我的问题不起作用。
这对我来说非常令人沮丧,任何帮助都会很棒!
解决方案
你可以简单地传递parent
到Instantiate
parent
将分配给新对象的父级
var newObj = Instantiate(prefab, parentTransform);
或附加转换
var newObj = Instantiate (prefab, position, rotation, parentTransform);
或者正如其他人已经说过的那样,您仍然可以随时通过简单地分配一个新的transform.parent
newObj.transform.parent = parentTransform;
newObj.transform.SetParent(parentTransform, worldPositionStays);
后者的优点是你有一个可选参数worldPositionStays
worldPositionStays 如果
true
,则修改父相对位置、比例和旋转,以使对象保持与以前相同的世界空间位置、旋转和比例。
分配一个新的
transform.parent = parentTransform;`
将始终以相同的方式行事
transform.SetParent(parentTransform);
因为worldPositionStays
(所以如果你没有明确传递它)的默认值是true
.
因此,对于 a 中 UI 的特定情况,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
}
}
或者,如果生成器脚本附加到画布内的对象,您也可以直接使用
var newButton = Instantiate(buttonPrefab, transform);