private void Update() { if (Input.GetMouseButtonDown(0)) { lastSegmentPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); lastSegmentPosition.z = 0; var stemPositions = new List <Vector3>(); stemPositions.Add(lastSegmentPosition); mainStem.SetStemPositions(stemPositions); } else if (Input.GetMouseButton(0)) { var newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); newPosition.z = 0; var delta = newPosition - lastSegmentPosition; if (delta.magnitude > segmentLength) { lastSegmentPosition = newPosition; mainStem.AddStemPosition(newPosition); } } if (Input.GetMouseButtonDown(1)) { mainStem.RemoveStemPosition(); } }
void Update() { Vector3 newHeadPosition = head.transform.position; if (Vector3.Distance(lastHeadPosition, newHeadPosition) > growthThreashold) { lastHeadPosition = newHeadPosition; stem.AddStemPosition(newHeadPosition); } int expectedLeavesCount = stem.Length() / spawnLeafEverySegments; if (expectedLeavesCount > leaves.Count) { // There should be more leaves. Spawn a new one Leaf leaf = Instantiate(leafPrefab); leaf.name = "Leaf " + leaves.Count; leaf.transform.position = stem.GetHeadPosition(); leaf.transform.parent = transform; leaf.flip = leaves.Count % 2 != 0; Vector3 growDirection = stem.GetGrowthDirection(); Vector3 leafDirection = new Vector3(growDirection.y, -growDirection.x, growDirection.z); leaf.transform.right = leafDirection; leaf.Spawn(stem.Length()); leaves.Add(leaf); } else if (expectedLeavesCount < leaves.Count && leaves.Count > 0) { // There is too many leaves. Remove the last one int last = leaves.Count - 1; Destroy(leaves[last]); leaves.RemoveAt(last); } foreach (var l in leaves) { l.Grow(stem.Length()); } }