Skip to content

Commit 52a0dae

Browse files
author
Unity Technologies
committed
Unity 2017.1.1p3 C# reference source code
1 parent 59e35c8 commit 52a0dae

File tree

8 files changed

+119
-74
lines changed

8 files changed

+119
-74
lines changed

Editor/Mono/EditorGUI.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,8 @@ internal partial class RecycledTextEditor : TextEditor
326326
internal static bool s_ActuallyEditing = false; // internal so we can save this state.
327327
internal static bool s_AllowContextCutOrPaste = true; // e.g. selectable labels only allow for copying
328328

329+
IMECompositionMode m_IMECompositionModeBackup;
330+
329331
// *undocumented*
330332
internal bool IsEditingControl(int id)
331333
{
@@ -354,6 +356,9 @@ public virtual void BeginEditing(int id, string newText, Rect position, GUIStyle
354356
s_ActuallyEditing = true;
355357
scrollOffset = Vector2.zero;
356358
UnityEditor.Undo.IncrementCurrentGroup();
359+
360+
m_IMECompositionModeBackup = Input.imeCompositionMode;
361+
Input.imeCompositionMode = IMECompositionMode.On;
357362
}
358363

359364
// *undocumented*
@@ -368,6 +373,8 @@ public virtual void EndEditing()
368373
s_ActuallyEditing = false;
369374
s_AllowContextCutOrPaste = true;
370375
UnityEditor.Undo.IncrementCurrentGroup();
376+
377+
Input.imeCompositionMode = m_IMECompositionModeBackup;
371378
}
372379
}
373380

@@ -664,7 +671,7 @@ internal static string DoTextField(RecycledTextEditor editor, int id, Rect posit
664671
// Inform editor that someone removed focus from us.
665672
if (editor.controlID == id && GUIUtility.keyboardControl != id)
666673
{
667-
editor.controlID = 0;
674+
editor.EndEditing();
668675
}
669676

670677
bool mayHaveChanged = false;

Editor/Mono/Inspector/GameObjectInspector.cs

Lines changed: 88 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
44

55
using System;
6-
using System.Linq;
7-
using UnityEngine;
86
using System.Collections.Generic;
9-
using UnityEditorInternal;
10-
using UnityEditor.VersionControl;
7+
using System.Linq;
118
using UnityEditor.SceneManagement;
12-
using Object = UnityEngine.Object;
9+
using UnityEditor.VersionControl;
10+
using UnityEditorInternal;
11+
using UnityEngine;
12+
13+
using UnityObject = UnityEngine.Object;
1314

1415
namespace UnityEditor
1516
{
@@ -71,8 +72,39 @@ public Styles()
7172
const float kIconSize = 24;
7273
Vector2 previewDir;
7374

74-
PreviewRenderUtility m_PreviewUtility;
75-
List<GameObject> m_PreviewInstances;
75+
class PreviewData : IDisposable
76+
{
77+
bool m_Disposed;
78+
GameObject m_GameObject;
79+
80+
public readonly PreviewRenderUtility renderUtility;
81+
public GameObject gameObject { get { return m_GameObject; } }
82+
83+
public PreviewData(UnityObject targetObject)
84+
{
85+
renderUtility = new PreviewRenderUtility();
86+
renderUtility.camera.fieldOfView = 30.0f;
87+
UpdateGameObject(targetObject);
88+
}
89+
90+
public void UpdateGameObject(UnityObject targetObject)
91+
{
92+
UnityObject.DestroyImmediate(gameObject);
93+
m_GameObject = EditorUtility.InstantiateForAnimatorPreview(targetObject);
94+
renderUtility.AddManagedGO(gameObject);
95+
}
96+
97+
public void Dispose()
98+
{
99+
if (m_Disposed)
100+
return;
101+
renderUtility.Cleanup();
102+
UnityObject.DestroyImmediate(gameObject);
103+
m_Disposed = true;
104+
}
105+
}
106+
107+
Dictionary<int, PreviewData> m_PreviewInstances = new Dictionary<int, PreviewData>();
76108

77109
bool m_HasInstance = false;
78110
bool m_AllOfSamePrefabType = true;
@@ -281,7 +313,7 @@ private void DoPrefabButtons(PrefabType prefabType, GameObject go)
281313
{
282314
if (GUILayout.Button("Revert", "MiniButtonMid"))
283315
{
284-
List<Object> hierarchy = new List<Object>();
316+
List<UnityObject> hierarchy = new List<UnityObject>();
285317
GetObjectListFromHierarchy(hierarchy, go);
286318

287319
Undo.RegisterFullObjectHierarchyUndo(go, "Revert to prefab");
@@ -290,7 +322,7 @@ private void DoPrefabButtons(PrefabType prefabType, GameObject go)
290322
PrefabUtility.RevertPrefabInstance(go);
291323
CalculatePrefabStatus();
292324

293-
List<Object> newHierarchy = new List<Object>();
325+
List<UnityObject> newHierarchy = new List<UnityObject>();
294326
GetObjectListFromHierarchy(newHierarchy, go);
295327
RegisterNewComponents(newHierarchy, hierarchy);
296328
}
@@ -316,7 +348,7 @@ private void DoPrefabButtons(PrefabType prefabType, GameObject go)
316348

317349
if (GUILayout.Button("Apply", "MiniButtonRight"))
318350
{
319-
Object prefabParent = PrefabUtility.GetPrefabParent(rootUploadGameObject);
351+
UnityObject prefabParent = PrefabUtility.GetPrefabParent(rootUploadGameObject);
320352
string prefabAssetPath = AssetDatabase.GetAssetPath(prefabParent);
321353

322354
bool editablePrefab = Provider.PromptAndCheckoutIfNeeded(
@@ -362,22 +394,22 @@ private void DoPrefabButtons(PrefabType prefabType, GameObject go)
362394
public void RevertAndCheckForNewComponents(GameObject gameObject)
363395
{
364396
// Take a snapshot of the GO hierarchy before the revert
365-
var hierarchy = new List<Object>();
397+
var hierarchy = new List<UnityObject>();
366398
GetObjectListFromHierarchy(hierarchy, gameObject);
367399

368400
Undo.RegisterFullObjectHierarchyUndo(gameObject, "Revert Prefab Instance");
369401
PrefabUtility.RevertPrefabInstance(gameObject);
370402
CalculatePrefabStatus();
371403

372404
// Take a snapshot of the GO hierarchy after the revert
373-
var newHierarchy = new List<Object>();
405+
var newHierarchy = new List<UnityObject>();
374406
GetObjectListFromHierarchy(newHierarchy, gameObject);
375407

376408
// Add RegisterCreatedObjectUndo for any new components added during the revert so that they are removed if undo is triggered
377409
RegisterNewComponents(newHierarchy, hierarchy);
378410
}
379411

380-
private void GetObjectListFromHierarchy(List<Object> hierarchy, GameObject gameObject)
412+
private void GetObjectListFromHierarchy(List<UnityObject> hierarchy, GameObject gameObject)
381413
{
382414
Transform transform = null;
383415
List<Component> components = new List<Component>();
@@ -404,7 +436,7 @@ private void GetObjectListFromHierarchy(List<Object> hierarchy, GameObject gameO
404436
}
405437
}
406438

407-
private void RegisterNewComponents(List<Object> newHierarchy, List<Object> hierarchy)
439+
private void RegisterNewComponents(List<UnityObject> newHierarchy, List<UnityObject> hierarchy)
408440
{
409441
var danglingComponents = new List<Component>();
410442

@@ -507,7 +539,7 @@ private void DoTagsField(GameObject go)
507539
{
508540
m_Tag.stringValue = tag;
509541
Undo.RecordObjects(targets, "Change Tag of " + targetTitle);
510-
foreach (Object obj in targets)
542+
foreach (UnityObject obj in targets)
511543
(obj as GameObject).tag = tag;
512544
}
513545
EditorGUI.EndProperty();
@@ -558,55 +590,49 @@ private void DoStaticToggleField(GameObject go)
558590
EditorGUI.EndProperty();
559591
}
560592

561-
Object[] GetObjects(bool includeChildren)
593+
UnityObject[] GetObjects(bool includeChildren)
562594
{
563595
return SceneModeUtility.GetObjects(targets, includeChildren);
564596
}
565597

566598
void SetLayer(int layer, bool includeChildren)
567599
{
568-
Object[] objects = GetObjects(includeChildren);
600+
UnityObject[] objects = GetObjects(includeChildren);
569601
Undo.RecordObjects(objects, "Change Layer of " + targetTitle);
570602
foreach (GameObject go in objects)
571603
go.layer = layer;
572604
}
573605

574606
public override void ReloadPreviewInstances()
575607
{
576-
CreatePreviewInstances();
577-
}
578-
579-
void CreatePreviewInstances()
580-
{
581-
if (m_PreviewInstances == null)
582-
m_PreviewInstances = new List<GameObject>(targets.Length);
583-
584-
for (int i = 0; i < targets.Length; ++i)
608+
foreach (var pair in m_PreviewInstances)
585609
{
586-
GameObject instance = EditorUtility.InstantiateForAnimatorPreview(targets[i]);
587-
m_PreviewInstances.Add(instance);
588-
m_PreviewUtility.AddSingleGO(instance);
610+
var index = pair.Key;
611+
if (index > targets.Length)
612+
continue;
613+
614+
var previewData = pair.Value;
615+
previewData.UpdateGameObject(targets[index]);
589616
}
590617
}
591618

592-
void InitPreview()
619+
PreviewData GetPreviewData()
593620
{
594-
if (m_PreviewUtility == null)
621+
PreviewData previewData;
622+
if (!m_PreviewInstances.TryGetValue(referenceTargetIndex, out previewData))
595623
{
596-
m_PreviewUtility = new PreviewRenderUtility();
597-
m_PreviewUtility.camera.fieldOfView = 30.0f;
598-
CreatePreviewInstances();
624+
previewData = new PreviewData(target);
625+
m_PreviewInstances.Add(referenceTargetIndex, previewData);
599626
}
627+
628+
return previewData;
600629
}
601630

602631
public void OnDestroy()
603632
{
604-
if (m_PreviewUtility != null)
605-
{
606-
m_PreviewUtility.Cleanup();
607-
m_PreviewUtility = null;
608-
m_PreviewInstances.Clear();
609-
}
633+
foreach (var previewData in m_PreviewInstances.Values)
634+
previewData.Dispose();
635+
m_PreviewInstances.Clear();
610636
}
611637

612638
public static bool HasRenderableParts(GameObject go)
@@ -789,52 +815,50 @@ public override void OnPreviewSettings()
789815
if (!ShaderUtil.hardwareSupportsRectRenderTexture)
790816
return;
791817
GUI.enabled = true;
792-
InitPreview();
793818
}
794819

795820
private void DoRenderPreview()
796821
{
797-
GameObject go = m_PreviewInstances[referenceTargetIndex];
822+
var previewData = GetPreviewData();
798823

799-
Bounds bounds = new Bounds(go.transform.position, Vector3.zero);
800-
GetRenderableBoundsRecurse(ref bounds, go);
824+
Bounds bounds = new Bounds(previewData.gameObject.transform.position, Vector3.zero);
825+
GetRenderableBoundsRecurse(ref bounds, previewData.gameObject);
801826
float halfSize = Mathf.Max(bounds.extents.magnitude, 0.0001f);
802827
float distance = halfSize * 3.8f;
803828

804829
Quaternion rot = Quaternion.Euler(-previewDir.y, -previewDir.x, 0);
805830
Vector3 pos = bounds.center - rot * (Vector3.forward * distance);
806831

807-
m_PreviewUtility.camera.transform.position = pos;
808-
m_PreviewUtility.camera.transform.rotation = rot;
809-
m_PreviewUtility.camera.nearClipPlane = distance - halfSize * 1.1f;
810-
m_PreviewUtility.camera.farClipPlane = distance + halfSize * 1.1f;
832+
previewData.renderUtility.camera.transform.position = pos;
833+
previewData.renderUtility.camera.transform.rotation = rot;
834+
previewData.renderUtility.camera.nearClipPlane = distance - halfSize * 1.1f;
835+
previewData.renderUtility.camera.farClipPlane = distance + halfSize * 1.1f;
811836

812-
m_PreviewUtility.lights[0].intensity = .7f;
813-
m_PreviewUtility.lights[0].transform.rotation = rot * Quaternion.Euler(40f, 40f, 0);
814-
m_PreviewUtility.lights[1].intensity = .7f;
815-
m_PreviewUtility.lights[1].transform.rotation = rot * Quaternion.Euler(340, 218, 177);
837+
previewData.renderUtility.lights[0].intensity = .7f;
838+
previewData.renderUtility.lights[0].transform.rotation = rot * Quaternion.Euler(40f, 40f, 0);
839+
previewData.renderUtility.lights[1].intensity = .7f;
840+
previewData.renderUtility.lights[1].transform.rotation = rot * Quaternion.Euler(340, 218, 177);
816841

817-
m_PreviewUtility.ambientColor = new Color(.1f, .1f, .1f, 0);
842+
previewData.renderUtility.ambientColor = new Color(.1f, .1f, .1f, 0);
818843

819-
var prefabType = PrefabUtility.GetPrefabType(go);
844+
var prefabType = PrefabUtility.GetPrefabType(previewData.gameObject);
820845
var allowSRP = !(prefabType == PrefabType.DisconnectedModelPrefabInstance || prefabType == PrefabType.ModelPrefab);
821-
m_PreviewUtility.Render(allowSRP);
846+
previewData.renderUtility.Render(allowSRP);
822847
}
823848

824-
public override Texture2D RenderStaticPreview(string assetPath, Object[] subAssets, int width, int height)
849+
public override Texture2D RenderStaticPreview(string assetPath, UnityObject[] subAssets, int width, int height)
825850
{
826851
if (!HasStaticPreview() || !ShaderUtil.hardwareSupportsRectRenderTexture)
827852
{
828853
return null;
829854
}
830855

831-
InitPreview();
832-
833-
m_PreviewUtility.BeginStaticPreview(new Rect(0, 0, width, height));
856+
var previewUtility = GetPreviewData().renderUtility;
857+
previewUtility.BeginStaticPreview(new Rect(0, 0, width, height));
834858

835859
DoRenderPreview();
836860

837-
return m_PreviewUtility.EndStaticPreview();
861+
return previewUtility.EndStaticPreview();
838862
}
839863

840864
public override void OnPreviewGUI(Rect r, GUIStyle background)
@@ -845,18 +869,18 @@ public override void OnPreviewGUI(Rect r, GUIStyle background)
845869
EditorGUI.DropShadowLabel(new Rect(r.x, r.y, r.width, 40), "Preview requires\nrender texture support");
846870
return;
847871
}
848-
InitPreview();
849872

850873
previewDir = PreviewGUI.Drag2D(previewDir, r);
851874

852875
if (Event.current.type != EventType.Repaint)
853876
return;
854877

855-
m_PreviewUtility.BeginPreview(r, background);
878+
var previewUtility = GetPreviewData().renderUtility;
879+
previewUtility.BeginPreview(r, background);
856880

857881
DoRenderPreview();
858882

859-
m_PreviewUtility.EndAndDrawPreview(r);
883+
previewUtility.EndAndDrawPreview(r);
860884
}
861885

862886
// Handle dragging in scene view
@@ -926,7 +950,7 @@ public void OnSceneDrag(SceneView sceneView)
926950
case EventType.DragExited:
927951
if (dragObject)
928952
{
929-
Object.DestroyImmediate(dragObject, false);
953+
UnityObject.DestroyImmediate(dragObject, false);
930954
HandleUtility.ignoreRaySnapObjects = null;
931955
dragObject = null;
932956
evt.Use();

Editor/Mono/Inspector/PlayerSettingsEditor/PlayerSettingsEditor.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,11 +1469,12 @@ private void OtherSectionRenderingGUI(BuildPlatform platform, BuildTargetGroup t
14691469
targetGroup == BuildTargetGroup.PS4 ||
14701470
targetGroup == BuildTargetGroup.PSM ||
14711471
targetGroup == BuildTargetGroup.XboxOne ||
1472-
targetGroup == BuildTargetGroup.WSA)
1472+
targetGroup == BuildTargetGroup.WSA ||
1473+
targetGroup == BuildTargetGroup.Switch)
14731474
{
14741475
EditorGUI.BeginChangeCheck();
14751476
EditorGUILayout.PropertyField(m_SkinOnGPU,
1476-
targetGroup != BuildTargetGroup.PS4 ? Styles.skinOnGPU : Styles.skinOnGPUPS4);
1477+
targetGroup != BuildTargetGroup.PS4 && targetGroup != BuildTargetGroup.Switch ? Styles.skinOnGPU : Styles.skinOnGPUPS4);
14771478
if (EditorGUI.EndChangeCheck())
14781479
{
14791480
ShaderUtil.RecreateSkinnedMeshResources();

Editor/Mono/Inspector/PreviewRenderUtility.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public void AddGameObject(GameObject go)
6161
m_GameObjects.Add(go);
6262
}
6363

64+
public void AddManagedGO(GameObject go)
65+
{
66+
SceneManager.MoveGameObjectToScene(go, m_Scene);
67+
}
68+
6469
public void Dispose()
6570
{
6671
EditorSceneManager.ClosePreviewScene(m_Scene);
@@ -343,6 +348,11 @@ private Material GetInvisibleMaterial()
343348
return m_InvisibleMaterial;
344349
}
345350

351+
internal void AddManagedGO(GameObject go)
352+
{
353+
m_PreviewScene.AddManagedGO(go);
354+
}
355+
346356
public void DrawMesh(Mesh mesh, Matrix4x4 matrix, Material mat, int subMeshIndex)
347357
{
348358
DrawMesh(mesh, matrix, mat, subMeshIndex, null, null, false);

0 commit comments

Comments
 (0)