private void RenderAlignmentsAtOrigin() { EditorGUILayout.LabelField("Align Objects at Origin on:"); targetAlignment = (AlignmentTypes) EditorGUILayout.EnumPopup(targetAlignment); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("X") && hasSelection) { var transforms = selecteObjects.Select((o) => o.transform); foreach (var item in transforms) { item.position = GetPositionFrom(targetAlignment, TargetAxes.x, item.position, transforms); } } if (GUILayout.Button("Y") && hasSelection) { var transforms = selecteObjects.Select((o) => o.transform); foreach (var item in transforms) { item.position = GetPositionFrom(targetAlignment, TargetAxes.y, item.position, transforms); } } if (GUILayout.Button("Z") && hasSelection) { var transforms = selecteObjects.Select((o) => o.transform); foreach (var item in transforms) { item.position = GetPositionFrom(targetAlignment, TargetAxes.z, item.position, transforms); } } EditorGUILayout.EndHorizontal(); }
private Vector3 GetPositionFrom(AlignmentTypes type, TargetAxes axes, Vector3 oldPosition, IEnumerable<Transform> possibleReferences) { switch (type) { case AlignmentTypes.Origin: return GetNewPosition(oldPosition, axes); case AlignmentTypes.FirstSelected: var first = possibleReferences.First().position; return GetNewPosition(first, oldPosition, axes); case AlignmentTypes.LastSelected: var last = possibleReferences.Last().position; return GetNewPosition(last, oldPosition, axes); case AlignmentTypes.CenterOfMass: var sum = possibleReferences.Select(t => t.position).Aggregate((t_A, t_B) => t_A + t_B); var count = possibleReferences.Count(); var avg = new Vector3(sum.x / count, sum.y / count, sum.z / count); return avg; default: return oldPosition; } }