localScale如何在Unity的Fractal代码示例中减少

时间:2016-04-14 00:13:45

标签: c# unity3d fractals

我正在关注Unity Fractal示例:

http://catlikecoding.com/unity/tutorials/constructing-a-fractal/

using UnityEngine;
using System.Collections;

public class Fractal : MonoBehaviour {

    public Mesh mesh;
    public Material material;
    public int maxDepth = 20;
    public int depth = 0;
    public float childScale = 0.5f;

    // Use this for initialization
    void Start () {
        gameObject.AddComponent<MeshFilter>().mesh = mesh;
        gameObject.AddComponent<MeshRenderer>().material = material;
        if(depth < maxDepth)
        {
            new GameObject("Fractal Child").AddComponent<Fractal>().Initialise(this);

        }
    }

    // Update is called once per frame
    void Update () {

    }

    private void Initialise(Fractal parent)
    {
        Debug.Log(gameObject.transform.localScale);
        mesh = parent.mesh;
        material = parent.material;
        maxDepth = parent.maxDepth;
        childScale = parent.childScale;
        Debug.Log("childScale = " + childScale);
        depth = parent.depth + 1;
        transform.parent = parent.transform;
        transform.localScale = Vector3.one * childScale;
        Debug.Log("localScale = " + transform.localScale);
        transform.localPosition = Vector3.up * (0.5f + 0.5f * childScale);
    }
}

到目前为止,我确实有一个垂直堆叠的盒子在彼此的顶部,每个盒子的大小是它下面的盒子的一半(childScale设置为0.5f)。

我不太明白为什么每个游戏对象(Fractal实例)的大小都是其父级的一半。 childScale总是0.5f,我不知道在这段代码中它会如何减少到0.25f,0.125f等,以使每个递归创建的实例 - 它的父级的一半大小。

任何建议表示赞赏。

下面的图片是结果(请注意,这是使用0.9f而不是0.5f的childScale。)

enter image description here

1 个答案:

答案 0 :(得分:0)

编辑器中显示的比例是局部比例。局部比例相对于变换父项。分形示例是嵌套的。因此,如果您的顶级父母是.5本地比例,那么它也是.5世界范围,因为它没有父母。你的下一个对象是.5局部比例,但是(.5 * .5)世界范围。下一个对象是.5局部比例,(。5 * .5 * .5)世界范围。看看这个兔子洞在哪里? :)