DarkSKL 2022-09-11 22:14 采纳率: 50%
浏览 42
已结题

Unity递归生成问题

问题遇到的现象和发生背景

Unity使用递归出现场景父子级错误,但没代码里父子级没问题

问题相关代码,请勿粘贴截图

父类所挂载的类
public class Create_Circle_Sup : MonoBehaviour
{

private void Start()
{
    name = this.gameObject.name;
    Create_Child();
}
public String name
{
    private set { this.gameObject.name = value; }
    get { return gameObject.name; }
}
//递归层级
private int recurve_Layer=0;
//最大递归层级
[Header("最大递归层级")] public int recurve_Layer_Max;
//同级最大数量
[Header("最大层级数量")]public int peer_Max;
//子对象
[Header("子对象链接")] public GameObject child_Object;
//下级对象
private List<GameObject> child_GameObject = new List<GameObject>();
void Create_Child()
//创建子级函数
{
    for (int i = 0; i < peer_Max; i++)
    {
        //创建对象
        child_GameObject.Add(GameObject.Instantiate(child_Object));
        child_GameObject[0].GetComponent<Create_Circle_Sub>().Initialize_Self(
            this.transform,
            (this.name + $"_{i}号"),
            this.recurve_Layer + 1,
            recurve_Layer_Max,
            i,
            this.peer_Max);
    }
}

}
子类所挂载的类
public class Create_Circle_Sub : MonoBehaviour
{
//名字
public String name
{
private set { this.gameObject.name = value;}
get { return gameObject.name; }
}

public String parentObject;
//递归层级
public int recurve_Layer { private set; get; }
//最大递归层级
public int recurve_Layer_Max { private set; get; }
//同级序号
public int peer_Number { private set; get; }
//同级最大数量
public int peer_Max { private set; get; }
//下级对象
private List<GameObject> child_GameObject=new List<GameObject>();
public  void Initialize_Self(Transform parent,String name,int recurve_Layer,int recurve_LayerMax,int peer_Number,int peer_Max)
//初始化自身
{
    Debug.Log($"自身对象:{this.gameObject.name},父级对象:{parent.name}");

    #region 初始化自身数据
    //设定父级
    this.transform.parent=parent;
    //设定名字
    this.name = name;
    //设定递归图层
    this.recurve_Layer = recurve_Layer;
    //设定同级序号
    this.peer_Number = peer_Number;
    //设定最大同级数量
    this.peer_Max = peer_Max;

    this.parentObject = parent.name;
    #endregion

    //如果递归层级小于最大值
    if (recurve_Layer< recurve_LayerMax)
    {
        //就创建子对象
        Create_ChildObject();
    }

}

void Create_ChildObject()
//创造子对象
{
    for (int i = 0; i < peer_Max; i++)
    {
        //创建对象
        child_GameObject.Add(GameObject.Instantiate(this.gameObject));
        child_GameObject[0].GetComponent<Create_Circle_Sub>().Initialize_Self(
            this.transform,
            (this.name + $"_{i}号"),
            this.recurve_Layer + 1,
            recurve_Layer_Max,
            i,
            this.peer_Max);
    }
}

}

运行结果及报错内容

运行结果:

img

我想要达到的结果

img

  • 写回答

1条回答 默认 最新

  • 呼呼突突 2022-09-12 22:16
    关注

    Instantiate出来的对象没有指定父级

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月24日
  • 专家已采纳回答 9月16日
  • 创建了问题 9月11日

悬赏问题

  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题