首页 > 代码库 > Fractal_Test
Fractal_Test
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Fractal_Test.html
参考:http://catlikecoding.com/unity/tutorials/constructing-a-fractal/
1 using UnityEngine; 2 using System.Collections; 3 4 public class Fractal : MonoBehaviour { 5 public Mesh[] meshes; 6 public Material material; 7 public int maxDepth; 8 public float childScale; 9 private int depth;10 public float spawnProbability;11 public float maxRotationSpeed;12 private float rotationSpeed;13 14 private static Vector3[] childDirections = {15 Vector3.up,16 Vector3.right,17 Vector3.left,18 Vector3.forward,19 Vector3.back,20 Vector3.down21 };22 23 private static Quaternion[] childOrientations = {24 Quaternion.identity,25 Quaternion.Euler(0f, 0f, -90f),26 Quaternion.Euler(0f, 0f, 90f),27 Quaternion.Euler(90f, 0f, 0f),28 Quaternion.Euler(-90f, 0f, 0f),29 Quaternion.Euler(0f, 0f, 180f)30 };31 32 private Material[,] materials;33 34 private void InitializeMaterials() {35 materials = new Material[maxDepth + 1, 2];36 for (int i = 0; i <= maxDepth; i++) {37 float t = i / (maxDepth - 1f);38 t *= t;39 materials[i, 0] = new Material(material);40 materials[i, 0].color = Color.Lerp(Color.white, Color.yellow, t);41 materials[i, 1] = new Material(material);42 materials[i, 1].color = Color.Lerp(Color.white, Color.cyan, t);43 }44 materials[maxDepth, 0].color = Color.magenta;45 materials[maxDepth, 1].color = Color.red;46 }47 48 // Use this for initialization49 void Start() {50 if(materials == null){51 InitializeMaterials();52 }53 gameObject.AddComponent<MeshFilter>().mesh = meshes[Random.Range(0, meshes.Length)];54 gameObject.AddComponent<MeshRenderer>().material = materials[depth, Random.Range(0, 2)];55 rotationSpeed = Random.Range(-maxRotationSpeed, maxRotationSpeed);56 if(depth < maxDepth) {57 StartCoroutine(CreateChildren());58 }59 60 }61 62 private IEnumerator CreateChildren() {63 for (int i = 0; i < childDirections.Length; ++i) {64 if (Random.value < spawnProbability) {65 yield return new WaitForSeconds(Random.Range(0.1f, 0.5f));66 new GameObject("Fractal Child").AddComponent<Fractal>().Initialize(this, i);67 }68 69 }70 }71 72 private void Initialize(Fractal parent, int childIndex) {73 meshes = parent.meshes;74 materials = parent.materials;75 maxDepth = parent.maxDepth;76 depth = parent.depth + 1;77 transform.parent = parent.transform;78 childScale = parent.childScale;79 transform.localScale = Vector3.one * childScale;80 transform.localPosition = childDirections[childIndex] * (0.5f + 0.5f * childScale);81 transform.localRotation = childOrientations[childIndex];82 spawnProbability = parent.spawnProbability;83 maxRotationSpeed = parent.maxRotationSpeed;84 }85 86 // Update is called once per frame87 void Update() {88 transform.Rotate(0f, rotationSpeed * Time.deltaTime, 0f);89 }90 }
PS:失败的地方是:没有DynamicBatch,为何原文说会合并呢?
unitypackage:http://files.cnblogs.com/files/YinaPan/Fractal_Test.rar
Fractal_Test
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。