Esempio n. 1
0
    /// <summary>
    /// 创建子枝
    /// </summary>
    /// <param name="parentBranch">上级树枝</param>
    /// <param name="scaleFactor">比例因子</param>
    /// <returns></returns>
    public IEnumerator generateChildBranch(GameObject parentBranch, float scaleFactor, int branchNum)
    {
        Branch    pb         = parentBranch.GetComponent <Branch>();
        float     pMaxSize   = pb.maxSize;
        Transform branchHead = parentBranch.transform.Find("BranchHead");

        yield return(new WaitForSeconds(branchDelay));

        for (int i = 0; i < branchNum; i++)
        {
            int levelUp = bigBranchSmallChild_Probabilites.selectRandomNum();
            if (pb.Level + levelUp > Manager.mg.treeIterNum)
            {
                levelUp = Manager.mg.treeIterNum - pb.Level;
            }
            int        level       = pb.Level + levelUp;
            GameObject childBranch = Instantiate(branchPrefab, transform);
            BranchCount++;
            childBranch.transform.rotation   = branchHead.transform.rotation;
            childBranch.transform.position   = branchHead.transform.TransformPoint(Vector3.up);
            childBranch.transform.localScale = new Vector3(0, 0, 0);

            Branch cb = childBranch.GetComponent <Branch>();
            pb.childrenBranchs.Add(cb);
            cb.parentHead  = branchHead;
            cb.Level       = level;
            cb.InterateNum = Manager.mg.treeIterNum;
            cb.maxSize     = scaleFactor * pMaxSize;
            for (int j = 1; j < levelUp; j++)
            {
                cb.maxSize *= scaleFactor;
            }
            if (branchNum % 2 == 1)
            {
                childBranch.transform.Rotate(branchHead.forward * selectRandomBranchTheta(), Space.World);
            }
            else
            {
                int tmp = i - (branchNum / 2 - 1);
                if (tmp <= 0)
                {
                    tmp--;
                    cb.Direct = Branch.Direction.Left;
                }
                else
                {
                    cb.Direct = Branch.Direction.Right;
                }
                childBranch.transform.Rotate(transform.forward * selectRandomBranchTheta(), Space.World);
            }
            if (level < Manager.mg.treeIterNum)
            {
                StartCoroutine(generateChildBranch(childBranch, scaleFactor, branchNum_Probabilites.selectRandomNum()));
            }
        }
        yield return(null);
    }
Esempio n. 2
0
    internal int BranchCount = 0;//树枝总数统计

    public void Initialize()
    {
        GameObject MainBranch = generateMainBranch();

        StartCoroutine(generateChildBranch(MainBranch, interateScaleRatio, branchNum_Probabilites.selectRandomNum()));
    }