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