OnInspectorGUI
How do I use On Inspector G U I
Below are practical examples compiled from projects for learning and reference purposes
Featured Snippets
File name: PhotonAnimatorViewEditor.cs
Copy
18 public override void OnInspectorGUI()
19 {
20 //base.OnInspectorGUI();
21
22 if (this.m_Animator == null)
23 {
24 GUILayout.BeginVertical(GUI.skin.box);
25 GUILayout.Label("GameObject doesn't have an Animator component to synchronize");
26 GUILayout.EndVertical();
27 return;
28 }
29
30 DrawWeightInspector();
31
32 if (this.m_Animator.layerCount == 0)
33 {
34 GUILayout.BeginVertical(GUI.skin.box);
35 GUILayout.Label("Animator doesn't have any layers setup to synchronize");
36 GUILayout.EndVertical();
37 }
38
39 DrawParameterInspector();
40
41 if (GetParameterCount() == 0)
42 {
43 GUILayout.BeginVertical(GUI.skin.box);
44 GUILayout.Label("Animator doesn't have any parameters setup to synchronize");
45 GUILayout.EndVertical();
46 }
47
48 serializedObject.ApplyModifiedProperties();
49
50 //GUILayout.Label( "m_SynchronizeLayers " + serializedObject.FindProperty( "m_SynchronizeLayers" ).arraySize );
51 //GUILayout.Label( "m_SynchronizeParameters " + serializedObject.FindProperty( "m_SynchronizeParameters" ).arraySize );
52 }
File name: PhotonRigidbody2DViewEditor.cs
Copy
7 public override void OnInspectorGUI()
8 {
9 PhotonGUI.ContainerHeader("Options");
10
11 Rect containerRect = PhotonGUI.ContainerBody(EditorGUIUtility.singleLineHeight*2 + 10);
12
13 Rect propertyRect = new Rect(containerRect.xMin + 5, containerRect.yMin + 5, containerRect.width, EditorGUIUtility.singleLineHeight);
14 EditorGUI.PropertyField(propertyRect, serializedObject.FindProperty("m_SynchronizeVelocity"), new GUIContent("Synchronize Velocity"));
15
16 propertyRect.y += EditorGUIUtility.singleLineHeight;
17 EditorGUI.PropertyField(propertyRect, serializedObject.FindProperty("m_SynchronizeAngularVelocity"), new GUIContent("Synchronize Angular Velocity"));
18 }
File name: PhotonRigidbodyViewEditor.cs
Copy
7 public override void OnInspectorGUI()
8 {
9 PhotonGUI.ContainerHeader("Options");
10
11 Rect containerRect = PhotonGUI.ContainerBody(EditorGUIUtility.singleLineHeight*2 + 10);
12
13 Rect propertyRect = new Rect(containerRect.xMin + 5, containerRect.yMin + 5, containerRect.width, EditorGUIUtility.singleLineHeight);
14 EditorGUI.PropertyField(propertyRect, serializedObject.FindProperty("m_SynchronizeVelocity"), new GUIContent("Synchronize Velocity"));
15
16 propertyRect.y += EditorGUIUtility.singleLineHeight;
17 EditorGUI.PropertyField(propertyRect, serializedObject.FindProperty("m_SynchronizeAngularVelocity"), new GUIContent("Synchronize Angular Velocity"));
18 }
File name: PhotonTransformViewEditor.cs
Copy
47 public override void OnInspectorGUI()
48 {
49 this.m_Target = (PhotonTransformView) target;
50
51 DrawIsPlayingWarning();
52 GUI.enabled = !Application.isPlaying;
53
54 DrawSynchronizePositionHeader();
55 DrawSynchronizePositionData();
56
57 GUI.enabled = !Application.isPlaying;
58 DrawSynchronizeRotationHeader();
59 DrawSynchronizeRotationData();
60
61 GUI.enabled = !Application.isPlaying;
62 DrawSynchronizeScaleHeader();
63 DrawSynchronizeScaleData();
64
65 serializedObject.ApplyModifiedProperties();
66
67 GUI.enabled = true;
68 }
File name: PhotonViewInspector.cs
Copy
21 public override void OnInspectorGUI()
22 {
23 #if UNITY_3_5
24 EditorGUIUtility.LookLikeInspector();
25 #endif
26 //EditorGUI.indentLevel = 1;
27
28 m_Target = (PhotonView)this.target;
29 bool isProjectPrefab = EditorUtility.IsPersistent(m_Target.gameObject);
30
31 if( m_Target.ObservedComponents == null )
32 {
33 m_Target.ObservedComponents = new System.Collections.Generic.List
34 }
35
36 if( m_Target.ObservedComponents.Count == 0 )
37 {
38 m_Target.ObservedComponents.Add( null );
39 }
40
41 EditorGUILayout.BeginHorizontal();
42 // Owner
43 if (isProjectPrefab)
44 {
45 EditorGUILayout.LabelField("Owner:", "Set at runtime");
46 }
47 else if (m_Target.isSceneView)
48 {
49 EditorGUILayout.LabelField("Owner", "Scene");
50 }
51 else
52 {
53 PhotonPlayer owner = m_Target.owner;
54 string ownerInfo = (owner != null) ? owner.name : "
55
56 if (string.IsNullOrEmpty(ownerInfo))
57 {
58 ownerInfo = "
59 }
60
61 EditorGUILayout.LabelField("Owner", "[" + m_Target.ownerId + "] " + ownerInfo);
62 }
63
64 // ownership requests
65 EditorGUI.BeginDisabledGroup(Application.isPlaying);
66 m_Target.ownershipTransfer = (OwnershipOption)EditorGUILayout.EnumPopup(m_Target.ownershipTransfer, GUILayout.Width(100));
67 EditorGUI.EndDisabledGroup();
68
69 EditorGUILayout.EndHorizontal();
70
71
72 // View ID
73 if (isProjectPrefab)
74 {
75 EditorGUILayout.LabelField("View ID", "Set at runtime");
76 }
77 else if (EditorApplication.isPlaying)
78 {
79 EditorGUILayout.LabelField("View ID", m_Target.viewID.ToString());
80 }
81 else
82 {
83 int idValue = EditorGUILayout.IntField("View ID [1.."+(PhotonNetwork.MAX_VIEW_IDS-1)+"]", m_Target.viewID);
84 m_Target.viewID = idValue;
85 }
86
87
88
89 // Locally Controlled
90 if (EditorApplication.isPlaying)
91 {
92 string masterClientHint = PhotonNetwork.isMasterClient ? "(master)" : "";
93 EditorGUILayout.Toggle("Controlled locally: " + masterClientHint, m_Target.isMine);
94 }
95
96
97
98 //DrawOldObservedItem();
99 ConvertOldObservedItemToObservedList();
100
101
102 // ViewSynchronization (reliability)
103 if (m_Target.synchronization == ViewSynchronization.Off)
104 {
105 GUI.color = Color.grey;
106 }
107
108 EditorGUILayout.PropertyField( serializedObject.FindProperty( "synchronization" ), new GUIContent( "Observe option:" ) );
109
110 if( m_Target.synchronization != ViewSynchronization.Off &&
111 m_Target.ObservedComponents.FindAll( item => item != null ).Count == 0 )
112 {
113 GUILayout.BeginVertical( GUI.skin.box );
114 GUILayout.Label( "Warning", EditorStyles.boldLabel );
115 GUILayout.Label( "Setting the synchronization option only makes sense if you observe something." );
116 GUILayout.EndVertical();
117 }
118
119 /*ViewSynchronization vsValue = (ViewSynchronization)EditorGUILayout.EnumPopup("Observe option:", m_Target.synchronization);
120 if (vsValue != m_Target.synchronization)
121 {
122 m_Target.synchronization = vsValue;
123 if (m_Target.synchronization != ViewSynchronization.Off && m_Target.observed == null)
124 {
125 EditorUtility.DisplayDialog("Warning", "Setting the synchronization option only makes sense if you observe something.", "OK, I will fix it.");
126 }
127 }*/
128
129 DrawSpecificTypeSerializationOptions();
130
131 GUI.color = Color.white;
132 DrawObservedComponentsList();
133
134 // Cleanup: save and fix look
135 if (GUI.changed)
136 {
137 EditorUtility.SetDirty(m_Target);
138 PhotonViewHandler.HierarchyChange(); // TODO: check if needed
139 }
140
141 GUI.color = Color.white;
142 EditorGUIUtility.LookLikeControls();
143 }
File name: ServerSettingsInspector.cs
Copy
17 public override void OnInspectorGUI()
18 {
19 ServerSettings settings = (ServerSettings)this.target;
20
21 #if UNITY_3_5
22 EditorGUIUtility.LookLikeInspector();
23 #endif
24
25
26 settings.HostType = (ServerSettings.HostingOption)EditorGUILayout.EnumPopup("Hosting", settings.HostType);
27 EditorGUI.indentLevel = 1;
28
29 switch (settings.HostType)
30 {
31 case ServerSettings.HostingOption.BestRegion:
32 case ServerSettings.HostingOption.PhotonCloud:
33 if (settings.HostType == ServerSettings.HostingOption.PhotonCloud)
34 settings.PreferredRegion = (CloudRegionCode)EditorGUILayout.EnumPopup("Region", settings.PreferredRegion);
35 settings.AppID = EditorGUILayout.TextField("AppId", settings.AppID);
36 settings.Protocol = (ConnectionProtocol)EditorGUILayout.EnumPopup("Protocol", settings.Protocol);
37
38 if (string.IsNullOrEmpty(settings.AppID) || settings.AppID.Equals("master"))
39 {
40 EditorGUILayout.HelpBox("The Photon Cloud needs an AppId (GUID) set.\nYou can find it online in your Dashboard.", MessageType.Warning);
41 }
42 break;
43
44 case ServerSettings.HostingOption.SelfHosted:
45 bool hidePort = false;
46 if (settings.Protocol == ConnectionProtocol.Udp && (settings.ServerPort == 4530 || settings.ServerPort == 0))
47 {
48 settings.ServerPort = 5055;
49 }
50 else if (settings.Protocol == ConnectionProtocol.Tcp && (settings.ServerPort == 5055 || settings.ServerPort == 0))
51 {
52 settings.ServerPort = 4530;
53 }
54 #if RHTTP
55 if (settings.Protocol == ConnectionProtocol.RHttp)
56 {
57 settings.ServerPort = 0;
58 hidePort = true;
59 }
60 #endif
61 settings.ServerAddress = EditorGUILayout.TextField("Server Address", settings.ServerAddress);
62 settings.ServerAddress = settings.ServerAddress.Trim();
63 if (!hidePort)
64 {
65 settings.ServerPort = EditorGUILayout.IntField("Server Port", settings.ServerPort);
66 }
67 settings.Protocol = (ConnectionProtocol)EditorGUILayout.EnumPopup("Protocol", settings.Protocol);
68 settings.AppID = EditorGUILayout.TextField("AppId", settings.AppID);
69 break;
70
71 case ServerSettings.HostingOption.OfflineMode:
72 EditorGUI.indentLevel = 0;
73 EditorGUILayout.HelpBox("In 'Offline Mode', the client does not communicate with a server.\nAll settings are hidden currently.", MessageType.Info);
74 break;
75
76 case ServerSettings.HostingOption.NotSet:
77 EditorGUI.indentLevel = 0;
78 EditorGUILayout.HelpBox("Hosting is 'Not Set'.\nConnectUsingSettings() will not be able to connect.\nSelect another option or run the PUN Wizard.", MessageType.Info);
79 break;
80
81 default:
82 DrawDefaultInspector();
83 break;
84 }
85
86 if (PhotonEditor.CheckPunPlus())
87 {
88 settings.Protocol = ConnectionProtocol.Udp;
89 EditorGUILayout.HelpBox("You seem to use PUN+.\nPUN+ only supports reliable UDP so the protocol is locked.", MessageType.Info);
90 }
91
92 settings.AppID = settings.AppID.Trim();
93
94 EditorGUI.indentLevel = 0;
95 SerializedObject sObj = new SerializedObject(this.target);
96 SerializedProperty sRpcs = sObj.FindProperty("RpcList");
97 EditorGUILayout.PropertyField(sRpcs, true);
98 sObj.ApplyModifiedProperties();
99
100 GUILayout.BeginHorizontal();
101 GUILayout.Space(20);
102 if (GUILayout.Button("Refresh RPCs"))
103 {
104 PhotonEditor.UpdateRpcList();
105 Repaint();
106 }
107 if (GUILayout.Button("Clear RPCs"))
108 {
109 PhotonEditor.ClearRpcList();
110 }
111 if (GUILayout.Button("Log HashCode"))
112 {
113 Debug.Log("RPC-List HashCode: " + RpcListHashCode() + ". Make sure clients that send each other RPCs have the same RPC-List.");
114 }
115 GUILayout.Space(20);
116 GUILayout.EndHorizontal();
117
118 //SerializedProperty sp = serializedObject.FindProperty("RpcList");
119 //EditorGUILayout.PropertyField(sp, true);
120
121 if (GUI.changed)
122 {
123 EditorUtility.SetDirty(target);
124 }
125 }
File name: SpriterEntityInspector.cs
Copy
13 public override void OnInspectorGUI()
14 {
15 var myTarget = (SpriterEntity)target;
16
17 myTarget.SpriteMaterial = (Material)EditorGUILayout.ObjectField("Sprite Material", myTarget.SpriteMaterial, typeof(Material), false);
18
19 if(GUILayout.Button("Assign Material"))
20 {
21 myTarget.ApplyMaterial();
22 }
23
24 EditorUtility.SetDirty(target);
25 }
File name: AnimationTestScriptInspector.cs
Copy
9 public override void OnInspectorGUI()
10 {
11 AnimationTestScript myTarget = (AnimationTestScript)target;
12
13 EditorGUILayout.LabelField("Set a trigger:");
14
15 foreach (AnimationTestScript.TriggerType trigger in Enum.GetValues(typeof(AnimationTestScript.TriggerType)))
16 {
17 if (GUILayout.Button(trigger.ToString()))
18 {
19 myTarget.SetTrigger(trigger);
20 }
21 }
22
23 EditorGUILayout.Space();
24 myTarget.Speed = EditorGUILayout.Slider("Movement Speed", myTarget.Speed, 0, 10);
25 }
File name: SortingLayerExposedEditor.cs
Copy
15 public override void OnInspectorGUI()
16 {
17 // Get the renderer from the target object
18 var renderer = (target as SortingLayerExposed).gameObject.GetComponent
19
20 // If there is no renderer, we can't do anything
21 if (!renderer)
22 {
23 return;
24 }
25
26 // Expose the sorting layer name
27 //string newSortingLayerName = EditorGUILayout.TextField("Sorting Layer", renderer.sortingLayerName);
28 //if (newSortingLayerName != renderer.sortingLayerName)
29 //{
30 // Undo.RecordObject(renderer, "Edit Sorting Layer Name");
31 // renderer.sortingLayerName = newSortingLayerName;
32 // EditorUtility.SetDirty(renderer);
33 //}
34
35 // Expose the sorting layer ID
36 //int newSortingLayerId = EditorGUILayout.IntField("Sorting Layer ID", renderer.sortingLayerID);
37 //if (newSortingLayerId != renderer.sortingLayerID)
38 //{
39 // Undo.RecordObject(renderer, "Edit Sorting Layer ID");
40 // renderer.sortingLayerID = newSortingLayerId;
41 // EditorUtility.SetDirty(renderer);
42 //}
43
44 // Seanba: Use a popup that is populated with the acceptable sorting layers for the renderer
45 // Also allow the player to bring up the Tag/Layers inspector if they choose so
46 string[] sortLayerNames = GetSortingLayerNames();
47 //int[] sortLayerIds = GetSortingLayerUniqueIDs();
48 //{
49 // StringBuilder builder = new StringBuilder("Sorting Layers = ");
50 // for (int i = 0; i < sortLayerNames.Length; ++i)
51 // {
52 // builder.AppendFormat("({0} = {1},{2}) ", i, sortLayerIds[i], sortLayerNames[i]);
53 // }
54 // Debug.Log(builder.ToString());
55 //}
56
57 int sortLayerSelection = GetSortingLayerIndex(renderer, sortLayerNames);
58
59 GUIContent[] sortingLayerContexts = GetSortingLayerContexts();
60 int newSortingLayerIndex = EditorGUILayout.Popup(new GUIContent("Sorting Layer"), sortLayerSelection, sortingLayerContexts);
61 if (newSortingLayerIndex == sortingLayerContexts.Length - 1)
62 {
63 EditorApplication.ExecuteMenuItem("Edit/Project Settings/Tags and Layers");
64 }
65 else if (newSortingLayerIndex != sortLayerSelection)
66 {
67 //int newSortingLayerId = sortLayerIds[newSortingLayerIndex];
68 string newSortingLayerName = sortLayerNames[newSortingLayerIndex];
69
70 Undo.RecordObject(renderer, "Edit Sorting Layer ID");
71 renderer.sortingLayerName = newSortingLayerName;
72 //renderer.sortingLayerID = newSortingLayerId;
73
74 EditorUtility.SetDirty(renderer);
75 }
76
77 // Expose the manual sorting order within a sort layer
78 int newSortingLayerOrder = EditorGUILayout.IntField("Order in Layer", renderer.sortingOrder);
79 if (newSortingLayerOrder != renderer.sortingOrder)
80 {
81 Undo.RecordObject(renderer, "Edit Sorting Order");
82 renderer.sortingOrder = newSortingLayerOrder;
83 EditorUtility.SetDirty(renderer);
84 }
85 }
File name: ReadmeEditor.cs
Copy
79 public override void OnInspectorGUI()
80 {
81 var readme = (Readme)target;
82 Init();
83
84 foreach (var section in readme.sections)
85 {
86 if (!string.IsNullOrEmpty(section.heading))
87 {
88 GUILayout.Label(section.heading, HeadingStyle);
89 }
90 if (!string.IsNullOrEmpty(section.text))
91 {
92 GUILayout.Label(section.text, BodyStyle);
93 }
94 if (!string.IsNullOrEmpty(section.linkText))
95 {
96 if (LinkLabel(new GUIContent(section.linkText)))
97 {
98 Application.OpenURL(section.url);
99 }
100 }
101 GUILayout.Space(kSpace);
102 }
103 }
OnInspectorGUI 130 lượt xem
Gõ tìm kiếm nhanh...