private static void GenerateItemTiled(GameObject prefab, RoofGenerationSettings settings) { var countX = CalculateTiledCount(settings.itemLength, settings.targetLength); if (countX < 1) { countX = 1; } var countZ = CalculateTiledCount(settings.itemDepth, settings.targetDepth); if (countZ < 1) { countZ = 1; } var totalLength = countX * settings.itemLength; var totalDepth = countZ * settings.itemDepth; var scaleX = settings.targetLength / totalLength; var scaleZ = settings.targetDepth / totalDepth; var deltaX = settings.targetLength / countX; var deltaZ = settings.targetDepth / countZ; for (int z = 0; z < countZ; z++) { for (int x = 0; x < countX; x++) { var gameObject = Utils.Instantiate(prefab); if (gameObject == null) { continue; } var transform = gameObject.transform; transform.parent = settings.parent; transform.position = settings.pivot + settings.right * deltaX * x + settings.forward * deltaZ * z ; transform.eulerAngles = Quaternion.LookRotation(settings.forward, settings.up).eulerAngles; transform.localScale = new Vector3( scaleX, 1, scaleZ ); } } }
/// ====================================================================== private static RoofGenerationSettings CreateSettings(RoofParameters parameters, BoxDraft draft) { var result = RoofGenerationSettings.Create(); result.itemLength = parameters.length; result.itemDepth = parameters.depth; result.targetLength = draft.length; result.targetDepth = draft.depth; result.parent = draft.parent; result.pivot = draft.pivot; result.up = draft.up; result.right = draft.right; result.forward = draft.forward; return(result); }
private static void GenerateItemScale(GameObject prefab, RoofGenerationSettings settings) { var scaleX = settings.targetLength / settings.itemLength; var scaleZ = settings.targetDepth / settings.itemDepth; var gameObject = Utils.Instantiate(prefab); if (gameObject == null) { return; } var transform = gameObject.transform; transform.parent = settings.parent; transform.position = settings.pivot; transform.eulerAngles = Quaternion.LookRotation(settings.forward, settings.up).eulerAngles; transform.localScale = new Vector3(scaleX, 1, scaleZ); }