Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 13b1f16

Browse files
Create PreciseOffsetEditor.cs
1 parent 26927e8 commit 13b1f16

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
// gameobject position fiddling tool (when dragging x,y,z axist in transform panel is too fast)
2+
3+
using UnityEngine;
4+
using UnityEditor;
5+
6+
namespace UnityLibrary.SceneTools
7+
{
8+
public class PreciseOffsetEditor : EditorWindow
9+
{
10+
private const string SpeedMultiplierKey = "UnityLibrary_PreciseOffset_SpeedMultiplier";
11+
12+
private GameObject selectedObject;
13+
private Vector3 offsetSliderValues = Vector3.zero;
14+
private float speedMultiplier = 0.01f;
15+
16+
private Vector3 originalPosition;
17+
private GameObject lastSelectedObject;
18+
19+
[MenuItem("Tools/UnityLibrary/Precise Model Offset")]
20+
public static void ShowWindow()
21+
{
22+
var win = GetWindow<PreciseOffsetEditor>("Precise Model Offset");
23+
win.minSize = new Vector2(300, 220);
24+
win.maxSize = new Vector2(300, 220);
25+
}
26+
27+
private void OnEnable()
28+
{
29+
speedMultiplier = EditorPrefs.GetFloat(SpeedMultiplierKey, 0.01f);
30+
}
31+
32+
private void OnDisable()
33+
{
34+
EditorPrefs.SetFloat(SpeedMultiplierKey, speedMultiplier);
35+
}
36+
37+
private void OnGUI()
38+
{
39+
EditorGUILayout.LabelField("Precise Model Offset", EditorStyles.boldLabel);
40+
EditorGUILayout.Space();
41+
42+
int selectedCount = Selection.gameObjects.Length;
43+
selectedObject = Selection.activeGameObject;
44+
45+
if (selectedCount == 0)
46+
{
47+
EditorGUILayout.HelpBox("No GameObject selected.", MessageType.Warning);
48+
return;
49+
}
50+
51+
if (selectedCount == 1)
52+
{
53+
EditorGUILayout.LabelField("Selected: " + selectedObject.name);
54+
}
55+
else
56+
{
57+
EditorGUILayout.LabelField("Selected: (multiple)");
58+
}
59+
60+
if (selectedObject != lastSelectedObject)
61+
{
62+
originalPosition = selectedObject.transform.position;
63+
offsetSliderValues = Vector3.zero;
64+
lastSelectedObject = selectedObject;
65+
}
66+
67+
EditorGUILayout.Space();
68+
EditorGUI.BeginChangeCheck();
69+
speedMultiplier = EditorGUILayout.Slider("Speed Multiplier", speedMultiplier, 0.001f, 1f);
70+
if (EditorGUI.EndChangeCheck())
71+
{
72+
EditorPrefs.SetFloat(SpeedMultiplierKey, speedMultiplier);
73+
}
74+
75+
EditorGUILayout.Space();
76+
EditorGUI.BeginChangeCheck();
77+
78+
// Store old values to detect changes
79+
Vector3 oldOffset = offsetSliderValues;
80+
81+
offsetSliderValues.x = EditorGUILayout.Slider("X Offset", offsetSliderValues.x, -100f, 100f);
82+
offsetSliderValues.y = EditorGUILayout.Slider("Y Offset", offsetSliderValues.y, -100f, 100f);
83+
offsetSliderValues.z = EditorGUILayout.Slider("Z Offset", offsetSliderValues.z, -100f, 100f);
84+
85+
Vector3 delta = offsetSliderValues - oldOffset;
86+
87+
if (delta != Vector3.zero)
88+
{
89+
Undo.RecordObject(selectedObject.transform, "Precise Offset");
90+
91+
Vector3 newPosition = selectedObject.transform.position;
92+
93+
if (!Mathf.Approximately(delta.x, 0f))
94+
newPosition.x = originalPosition.x + offsetSliderValues.x * speedMultiplier;
95+
96+
if (!Mathf.Approximately(delta.y, 0f))
97+
newPosition.y = originalPosition.y + offsetSliderValues.y * speedMultiplier;
98+
99+
if (!Mathf.Approximately(delta.z, 0f))
100+
newPosition.z = originalPosition.z + offsetSliderValues.z * speedMultiplier;
101+
102+
selectedObject.transform.position = newPosition;
103+
104+
EditorUtility.SetDirty(selectedObject);
105+
}
106+
107+
EditorGUILayout.Space();
108+
if (GUILayout.Button("Reset Offset"))
109+
{
110+
offsetSliderValues = Vector3.zero;
111+
if (selectedObject != null)
112+
{
113+
selectedObject.transform.position = originalPosition;
114+
}
115+
}
116+
}
117+
}
118+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /