johnhattan

Unity TransformSnapAndLock component

Jan 9th, 2017
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.10 KB | None | 0 0
  1. using UnityEngine;
  2. #if UNITY_EDITOR
  3. using UnityEditor;
  4. #endif
  5.  
  6. [ExecuteInEditMode]
  7. public class TransformSnapAndLock : MonoBehaviour
  8. {
  9.     public float SnapX = 1.0f;
  10.     public bool LockX = false;
  11.     public float LockXTo = 0.0f;
  12.  
  13.     public float SnapY = 1.0f;
  14.     public bool LockY = false;
  15.     public float LockYTo = 0.0f;
  16.  
  17.     public float SnapZ = 1.0f;
  18.     public bool LockZ = false;
  19.     public float LockZTo = 0.0f;
  20.  
  21. #if UNITY_EDITOR
  22.  
  23.     void Update()
  24.     {
  25.         if(!Application.isPlaying)
  26.         {
  27.             Vector3 T = transform.localPosition;
  28.  
  29.             if (LockX)
  30.                 T.x = LockXTo;
  31.             else if(SnapX > 0.0f)
  32.             {
  33.                 float SnapInverse = 1 / SnapX;
  34.                 T.x = Mathf.Round(transform.localPosition.x * SnapInverse) / SnapInverse;
  35.             }
  36.  
  37.             if(LockY)
  38.                 T.y = LockYTo;
  39.             else if(SnapY > 0.0f)
  40.             {
  41.                 float SnapInverse = 1 / SnapY;
  42.                 T.y = Mathf.Round(transform.localPosition.y * SnapInverse) / SnapInverse;
  43.             }
  44.  
  45.             if(LockZ)
  46.                 T.z = LockZTo;
  47.             else if(SnapZ > 0.0f)
  48.             {
  49.                 float SnapInverse = 1 / SnapY;
  50.                 T.z = Mathf.Round(transform.localPosition.z * SnapInverse) / SnapInverse;
  51.             }
  52.  
  53.             transform.localPosition = T;
  54.         }
  55.     }
  56.  
  57. #endif
  58. }
  59.  
  60. #if UNITY_EDITOR
  61. [CustomEditor(typeof(TransformSnapAndLock))]
  62. public class LevelScriptEditor : Editor
  63. {
  64.     public override void OnInspectorGUI()
  65.     {
  66.         TransformSnapAndLock myTarget = (TransformSnapAndLock)target;
  67.         Color C = GUI.color;
  68.  
  69.         GUI.color = new Color(1.0f, 0.5f, 0.5f);
  70.         myTarget.LockX = EditorGUILayout.BeginToggleGroup("Lock X Position", myTarget.LockX);
  71.         EditorGUILayout.EndToggleGroup();
  72.         GUI.color = C;
  73.         EditorGUI.indentLevel++;
  74.         EditorGUI.BeginDisabledGroup(!myTarget.LockX);
  75.         myTarget.LockXTo = EditorGUILayout.FloatField("Lock X Position To", myTarget.LockXTo);
  76.         EditorGUI.EndDisabledGroup();
  77.         EditorGUI.BeginDisabledGroup(myTarget.LockX);
  78.         myTarget.SnapX = EditorGUILayout.FloatField("Snap X Position To", myTarget.SnapX);
  79.         EditorGUI.EndDisabledGroup();
  80.         EditorGUI.indentLevel--;
  81.  
  82.         GUI.color = new Color(0.5f, 1.0f, 0.5f);
  83.         myTarget.LockY = EditorGUILayout.BeginToggleGroup("Lock Y Position", myTarget.LockY);
  84.         EditorGUILayout.EndToggleGroup();
  85.         GUI.color = C;
  86.         EditorGUI.indentLevel++;
  87.         EditorGUI.BeginDisabledGroup(!myTarget.LockY);
  88.         myTarget.LockYTo = EditorGUILayout.FloatField("Lock Y Position To", myTarget.LockYTo);
  89.         EditorGUI.EndDisabledGroup();
  90.         EditorGUI.BeginDisabledGroup(myTarget.LockY);
  91.         myTarget.SnapY = EditorGUILayout.FloatField("Snap Y Position To", myTarget.SnapY);
  92.         EditorGUI.EndDisabledGroup();
  93.         EditorGUI.indentLevel--;
  94.  
  95.         GUI.color = new Color(0.5f, 0.5f, 1.0f);
  96.         myTarget.LockZ = EditorGUILayout.BeginToggleGroup("Lock Z Position", myTarget.LockZ);
  97.         EditorGUILayout.EndToggleGroup();
  98.         GUI.color = C;
  99.         EditorGUI.indentLevel++;
  100.         EditorGUI.BeginDisabledGroup(!myTarget.LockZ);
  101.         myTarget.LockZTo = EditorGUILayout.FloatField("Lock Z Position To", myTarget.LockZTo);
  102.         EditorGUI.EndDisabledGroup();
  103.         EditorGUI.BeginDisabledGroup(myTarget.LockZ);
  104.         myTarget.SnapZ = EditorGUILayout.FloatField("Snap Z Position To", myTarget.SnapZ);
  105.         EditorGUI.EndDisabledGroup();
  106.         EditorGUI.indentLevel--;
  107.     }
  108. }
  109. #endif
Advertisement
Add Comment
Please, Sign In to add comment