Unity 当使用 Instantiate() 创建实例时,在参数里定义父级与实例化后再设置父级的区别


设有:

  1. prefab:预制件, 默认的位置在(10,10,10)。
  2. parent:在场景中的游戏对象,位置在(20,20,20)。
  • 例1. 在参数里定义父级,会将实例直接旋转到父级,此时实例在父级内的局部坐标为(10,10,10),实例的世界坐标为(30,30,30)

    var inst = Instantiate(prefab, parent);
    
  • 例2.实例化后再设置父级(保持世界坐标系变换),会先将实例放置在当前激活的场景下,然后保持实例当世界坐标的位置转换父级,此时实例在父级内的局部坐标为(-10,-10,-10),实例的世界坐标为(10,10,10)

    var inst = Instantiate(prefab);
    
    inst.transform.parent = parent;
    // 或
    // inst.transform.SetParent(transform);
    // 或
    // inst.transform.SetParent(transform, true);
    
  • 例3. 实例化后再设置父级(不保持世界坐标系变换),此时与例1等效

    var inst = Instantiate(prefab);
    inst.transform.SetParent(transform,false);
    

相关