/** * \brief Duplicates and mirrors the passed pb_Object. * @param pb The donor pb_Object. * @param axe The axis to mirror the object on. * \returns The newly duplicated pb_Object. * \sa ProBuilder.Axis */ public static pb_Object Mirror(pb_Object pb, Vector3 scale) { pb_Object p = ProBuilder.CreateObjectWithObject(pb); p.MakeUnique(); p.transform.parent = pb.transform.parent; p.transform.position = pb.transform.position; p.transform.localRotation = pb.transform.localRotation; Vector3 lScale = p.gameObject.transform.localScale; p.transform.localScale = new Vector3(lScale.x * scale.x, lScale.y * scale.y, lScale.z * scale.z); // if flipping on an odd number of axes, flip winding order if ((scale.x * scale.y * scale.z) < 0) { p.ReverseWindingOrder(p.faces); } p.FreezeScaleTransform(); p.Refresh(); p.GenerateUV2(true); pb_Editor_Utility.InitObjectFlags(p, ColliderType.MeshCollider, pb.entity.entityType); return(p); }
/** * \brief Duplicates and mirrors the passed pb_Object. * @param pb The donor pb_Object. * @param axe The axis to mirror the object on. * \returns The newly duplicated pb_Object. * \sa ProBuilder.Axis */ public static pb_Object Mirror(pb_Object pb, Vector3 scale) { pb_Object p = pb_Object.InitWithObject(pb); p.MakeUnique(); p.transform.parent = pb.transform.parent; p.transform.localRotation = pb.transform.localRotation; Vector3 lScale = p.gameObject.transform.localScale; p.transform.localScale = new Vector3(lScale.x * scale.x, lScale.y * scale.y, lScale.z * scale.z); // if flipping on an odd number of axes, flip winding order if ((scale.x * scale.y * scale.z) < 0) { p.ReverseWindingOrder(p.faces); } p.FreezeScaleTransform(); p.transform.localScale = pb.transform.localScale; Collider col = pb.GetComponent <Collider>(); ColliderType colType = ColliderType.None; if (col != null) { if (col is MeshCollider) { colType = ColliderType.MeshCollider; } else { colType = ColliderType.BoxCollider; } } pb_Editor_Utility.InitObjectFlags(p, colType, pb.GetComponent <pb_Entity>().entityType); p.ToMesh(); p.Refresh(); // InitObjectFlags runs ScreenCenter() p.transform.position = pb.transform.position; Undo.RegisterCreatedObjectUndo(p.gameObject, "Mirror Object"); return(p); }
private pb_Object GetShadowObject(pb_Object pb) { if (pb == null || pb.name.Contains("-ShadowVolume")) { return(null); } for (int i = 0; i < pb.transform.childCount; i++) { Transform t = pb.transform.GetChild(i); if (t.name.Equals(string.Format("{0}-ShadowVolume", pb.name))) { pb_Object shadow = t.GetComponent <pb_Object>(); if (shadow != null) { pbUndo.RecordObject(shadow, "Update Shadow Object"); pb_Face[] faces = new pb_Face[pb.faces.Length]; for (int nn = 0; nn < pb.faces.Length; nn++) { faces[nn] = new pb_Face(pb.faces[nn]); } shadow.GeometryWithVerticesFaces(pb.vertices, faces); return(shadow); } } } pb_Object new_shadow = pb_Object.InitWithObject(pb); new_shadow.name = string.Format("{0}-ShadowVolume", pb.name); new_shadow.MakeUnique(); new_shadow.transform.SetParent(pb.transform, false); Undo.RegisterCreatedObjectUndo(new_shadow.gameObject, "Create Shadow Object"); return(new_shadow); }