void Clone2D(axisToUse axis1, axisToUse axis2) { Vector3 translationToUse1 = new Vector3(0,0,0); Vector3 rotationToUse1 = new Vector3(0,0,0); Vector3 scaleToUse1 = new Vector3(1,1,1); Vector3 translationToUse2 = new Vector3(0,0,0); Vector3 rotationToUse2 = new Vector3(0,0,0); Vector3 scaleToUse2 = new Vector3(1,1,1); int numCopies1 = 0; int numCopies2 = 0; bool newParent = false; GameObject parentObject = GameObject.Find(parentName); if(!parentObject) { parentObject = new GameObject(parentName); newParent = true; } if(addOriginalToParent) { Selection.activeGameObject.transform.parent = parentObject.transform; } GameObject currentSelection = Selection.activeGameObject; switch(axis1) { case axisToUse.USEX: translationToUse1 = cloneTranslationX; rotationToUse1 = cloneRotationX; scaleToUse1 = cloneScaleX; numCopies1 = numberOfCopiesX; break; case axisToUse.USEY: translationToUse1 = cloneTranslationY; rotationToUse1 = cloneRotationY; scaleToUse1 = cloneScaleY; numCopies1 = numberOfCopiesY; break; case axisToUse.USEZ: translationToUse1 = cloneTranslationZ; rotationToUse1 = cloneRotationZ; scaleToUse1 = cloneScaleZ; numCopies1 = numberOfCopiesZ; break; } switch(axis2) { case axisToUse.USEX: translationToUse2 = cloneTranslationX; rotationToUse2 = cloneRotationX; scaleToUse2 = cloneScaleX; numCopies2 = numberOfCopiesX; break; case axisToUse.USEY: translationToUse2 = cloneTranslationY; rotationToUse2 = cloneRotationY; scaleToUse2 = cloneScaleY; numCopies2 = numberOfCopiesY; break; case axisToUse.USEZ: translationToUse2 = cloneTranslationZ; rotationToUse2 = cloneRotationZ; scaleToUse2 = cloneScaleZ; numCopies2 = numberOfCopiesZ; break; } Vector3 selectionScale = currentSelection.transform.localScale; for(int i = 0; i < numCopies1; i++) { for(int j = 0; j < numCopies2; j++) { GameObject clone = Instantiate(currentSelection) as GameObject; if(uniqueCloneNames) clone.name = currentSelection.name + "_" + i + "_" + j; else clone.name = currentSelection.name; if(newParent && !addOriginalToParent) { clone.transform.Translate( (translationToUse1 * i) + (translationToUse2 * j) ); if(incrementalRotation) clone.transform.Rotate( (rotationToUse1 * i) + (rotationToUse2 * j) ); else clone.transform.Rotate( rotationToUse1 + rotationToUse2 ); if(scaleToUse1 != Vector3.one && scaleToUse1 != Vector3.zero) { if(incrementalScale) clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse1.x, selectionScale.y * scaleToUse1.y, selectionScale.z * scaleToUse1.z) ) * i); else clone.transform.localScale += ( ( new Vector3(selectionScale.x * cloneScaleX.x, selectionScale.y * cloneScaleX.y, selectionScale.z * cloneScaleX.z) ) ); } if(scaleToUse2 != Vector3.one && scaleToUse2 != Vector3.zero) { if(incrementalScale) clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) * j); else clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) ); } } else { clone.transform.Translate( (translationToUse1 * (i + 1)) + (translationToUse2 * (j + 1)) ); if(incrementalRotation) clone.transform.Rotate( (rotationToUse1 * (i + 1)) + (rotationToUse2 * (j + 1)) ); else clone.transform.Rotate( rotationToUse1 + rotationToUse2 ); if(scaleToUse1 != Vector3.one && scaleToUse1 != Vector3.zero) { if(incrementalScale) clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse1.x, selectionScale.y * scaleToUse1.y, selectionScale.z * scaleToUse1.z) ) * (i + 1) ); else clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse1.x, selectionScale.y * scaleToUse1.y, selectionScale.z * scaleToUse1.z) ) ); } if(scaleToUse2 != Vector3.one && scaleToUse2 != Vector3.zero) { if(incrementalScale) clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) * (j + 1) ); else clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) ); } } if(AddToParent) clone.transform.parent = parentObject.transform; }//j for }//i for }
void Clone1D(axisToUse axis) { Vector3 translationToUse = new Vector3(0,0,0); Vector3 rotationToUse = new Vector3(0,0,0); Vector3 scaleToUse = new Vector3(1,1,1); int numCopies = 0; bool newParent = false; GameObject parentObject = GameObject.Find(parentName); if(!parentObject) { parentObject = new GameObject(parentName); newParent = true; } if(addOriginalToParent) { Selection.activeGameObject.transform.parent = parentObject.transform; } GameObject currentSelection = Selection.activeGameObject; switch(axis) { case axisToUse.USEX: translationToUse = cloneTranslationX; rotationToUse = cloneRotationX; scaleToUse = cloneScaleX; numCopies = numberOfCopiesX; break; case axisToUse.USEY: translationToUse = cloneTranslationY; rotationToUse = cloneRotationY; scaleToUse = cloneScaleY; numCopies = numberOfCopiesY; break; case axisToUse.USEZ: translationToUse = cloneTranslationZ; rotationToUse = cloneRotationZ; scaleToUse = cloneScaleZ; numCopies = numberOfCopiesZ; break; } Vector3 selectionScale = currentSelection.transform.localScale; for(int i = 0; i < numCopies; i++) { GameObject clone = Instantiate(currentSelection) as GameObject; if(uniqueCloneNames) clone.name = currentSelection.name + i; else clone.name = currentSelection.name; if(newParent && !addOriginalToParent) { clone.transform.Translate( translationToUse * i); if(incrementalRotation) clone.transform.Rotate( rotationToUse * i ); else clone.transform.Rotate( rotationToUse ); if(scaleToUse != Vector3.one && scaleToUse != Vector3.zero) { if(incrementalScale) clone.transform.localScale = ( scaleToUse * i); else clone.transform.localScale = ( scaleToUse ); } } else { clone.transform.Translate( translationToUse * (i + 1) ); if(incrementalRotation) clone.transform.Rotate( rotationToUse * (i + 1) ); else clone.transform.Rotate( rotationToUse ); if(scaleToUse != Vector3.one && scaleToUse != Vector3.zero) { if(incrementalScale) clone.transform.localScale += ( scaleToUse * (i + 1) ); else clone.transform.localScale += ( scaleToUse ); } } if(AddToParent) clone.transform.parent = parentObject.transform; } }