private void DisposeBillboardCells() { _prepareVegetationHandle.Complete(); for (var i = 0; i <= BillboardCellList.Count - 1; i++) { BillboardCellList[i].Dispose(); } BillboardCellList.Clear(); }
private void CreateBillboardCells() { DisposeBillboardCells(); var expandedBounds = new Bounds(VegetationSystemBounds.center, VegetationSystemBounds.size); var currentBillboardCellSize = BillboardCellSize; if (!Application.isPlaying) { currentBillboardCellSize = 400; } expandedBounds.Expand(new Vector3(currentBillboardCellSize * 2f, 0, currentBillboardCellSize * 2f)); BillboardCellQuadTree = new QuadTree <BillboardCell>(RectExtension.CreateRectFromBounds(expandedBounds)); var cellXCount = Mathf.CeilToInt(VegetationSystemBounds.size.x / currentBillboardCellSize); var cellZCount = Mathf.CeilToInt(VegetationSystemBounds.size.z / currentBillboardCellSize); var corner = new Vector2(VegetationSystemBounds.center.x - VegetationSystemBounds.size.x / 2f, VegetationSystemBounds.center.z - VegetationSystemBounds.size.z / 2f); for (var x = 0; x <= cellXCount - 1; x++) { for (var z = 0; z <= cellZCount - 1; z++) { var billboardCell = new BillboardCell( new Rect( new Vector2(currentBillboardCellSize * x + corner.x, currentBillboardCellSize * z + corner.y), new Vector2(currentBillboardCellSize, currentBillboardCellSize)), VegetationSystemBounds.center.y, VegetationSystemBounds.size.y); BillboardCellList.Add(billboardCell); billboardCell.Index = BillboardCellList.Count - 1; BillboardCellQuadTree.Insert(billboardCell); } } PrepareAllBillboardCells(); }