Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- #if UNITY_EDITOR
- using UnityEditor;
- #endif
- [ExecuteInEditMode]
- public class TransformSnapAndLock : MonoBehaviour
- {
- public float SnapX = 1.0f;
- public bool LockX = false;
- public float LockXTo = 0.0f;
- public float SnapY = 1.0f;
- public bool LockY = false;
- public float LockYTo = 0.0f;
- public float SnapZ = 1.0f;
- public bool LockZ = false;
- public float LockZTo = 0.0f;
- #if UNITY_EDITOR
- void Update()
- {
- if(!Application.isPlaying)
- {
- Vector3 T = transform.localPosition;
- if (LockX)
- T.x = LockXTo;
- else if(SnapX > 0.0f)
- {
- float SnapInverse = 1 / SnapX;
- T.x = Mathf.Round(transform.localPosition.x * SnapInverse) / SnapInverse;
- }
- if(LockY)
- T.y = LockYTo;
- else if(SnapY > 0.0f)
- {
- float SnapInverse = 1 / SnapY;
- T.y = Mathf.Round(transform.localPosition.y * SnapInverse) / SnapInverse;
- }
- if(LockZ)
- T.z = LockZTo;
- else if(SnapZ > 0.0f)
- {
- float SnapInverse = 1 / SnapY;
- T.z = Mathf.Round(transform.localPosition.z * SnapInverse) / SnapInverse;
- }
- transform.localPosition = T;
- }
- }
- #endif
- }
- #if UNITY_EDITOR
- [CustomEditor(typeof(TransformSnapAndLock))]
- public class LevelScriptEditor : Editor
- {
- public override void OnInspectorGUI()
- {
- TransformSnapAndLock myTarget = (TransformSnapAndLock)target;
- Color C = GUI.color;
- GUI.color = new Color(1.0f, 0.5f, 0.5f);
- myTarget.LockX = EditorGUILayout.BeginToggleGroup("Lock X Position", myTarget.LockX);
- EditorGUILayout.EndToggleGroup();
- GUI.color = C;
- EditorGUI.indentLevel++;
- EditorGUI.BeginDisabledGroup(!myTarget.LockX);
- myTarget.LockXTo = EditorGUILayout.FloatField("Lock X Position To", myTarget.LockXTo);
- EditorGUI.EndDisabledGroup();
- EditorGUI.BeginDisabledGroup(myTarget.LockX);
- myTarget.SnapX = EditorGUILayout.FloatField("Snap X Position To", myTarget.SnapX);
- EditorGUI.EndDisabledGroup();
- EditorGUI.indentLevel--;
- GUI.color = new Color(0.5f, 1.0f, 0.5f);
- myTarget.LockY = EditorGUILayout.BeginToggleGroup("Lock Y Position", myTarget.LockY);
- EditorGUILayout.EndToggleGroup();
- GUI.color = C;
- EditorGUI.indentLevel++;
- EditorGUI.BeginDisabledGroup(!myTarget.LockY);
- myTarget.LockYTo = EditorGUILayout.FloatField("Lock Y Position To", myTarget.LockYTo);
- EditorGUI.EndDisabledGroup();
- EditorGUI.BeginDisabledGroup(myTarget.LockY);
- myTarget.SnapY = EditorGUILayout.FloatField("Snap Y Position To", myTarget.SnapY);
- EditorGUI.EndDisabledGroup();
- EditorGUI.indentLevel--;
- GUI.color = new Color(0.5f, 0.5f, 1.0f);
- myTarget.LockZ = EditorGUILayout.BeginToggleGroup("Lock Z Position", myTarget.LockZ);
- EditorGUILayout.EndToggleGroup();
- GUI.color = C;
- EditorGUI.indentLevel++;
- EditorGUI.BeginDisabledGroup(!myTarget.LockZ);
- myTarget.LockZTo = EditorGUILayout.FloatField("Lock Z Position To", myTarget.LockZTo);
- EditorGUI.EndDisabledGroup();
- EditorGUI.BeginDisabledGroup(myTarget.LockZ);
- myTarget.SnapZ = EditorGUILayout.FloatField("Snap Z Position To", myTarget.SnapZ);
- EditorGUI.EndDisabledGroup();
- EditorGUI.indentLevel--;
- }
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment