Skip to content

Commit d873951

Browse files
author
Unity Technologies
committed
Unity 2021.2.0a11 C# reference source code
1 parent 833aca6 commit d873951

File tree

163 files changed

+2849
-910
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+2849
-910
lines changed
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
// Unity C# reference source
2+
// Copyright (c) Unity Technologies. For terms of use, see
3+
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Linq;
8+
using NiceIO;
9+
using UnityEditor.Build.Reporting;
10+
using UnityEditor.SceneManagement;
11+
using UnityEngine;
12+
using UnityEngine.Scripting;
13+
14+
namespace UnityEditor.Mono.BuildPipeline
15+
{
16+
internal class DataBuildDirtyTracker
17+
{
18+
[Serializable]
19+
class BuildDataInputFile
20+
{
21+
public string path;
22+
public string contentHash;
23+
24+
public BuildDataInputFile(NPath npath)
25+
{
26+
path = npath.ToString();
27+
if (npath.HasExtension("cs"))
28+
{
29+
var monoScript = AssetDatabase.LoadAssetAtPath<MonoScript>(path);
30+
if (monoScript != null)
31+
contentHash = monoScript.GetPropertiesHashString();
32+
}
33+
else
34+
{
35+
contentHash = AssetDatabase.GetAssetDependencyHash(npath.ToString()).ToString();
36+
}
37+
}
38+
}
39+
40+
[Serializable]
41+
class BuildData
42+
{
43+
public BuildDataInputFile[] scenes;
44+
public BuildDataInputFile[] inputFiles;
45+
}
46+
47+
private BuildData buildData;
48+
private string[] scenes;
49+
bool CheckAssetDirty(BuildDataInputFile file)
50+
{
51+
NPath path = file.path;
52+
if (!path.Exists())
53+
{
54+
Console.WriteLine($"Rebuiding Data files because {path} is dirty (deleted)");
55+
return true;
56+
}
57+
58+
string hash = "";
59+
if (path.Extension == "cs")
60+
{
61+
var monoScript = AssetDatabase.LoadAssetAtPath<MonoScript>(path.ToString());
62+
if (monoScript != null)
63+
hash = monoScript.GetPropertiesHashString();
64+
}
65+
else
66+
{
67+
hash = AssetDatabase.GetAssetDependencyHash(path.ToString()).ToString();
68+
}
69+
70+
if (hash != file.contentHash)
71+
{
72+
Console.WriteLine($"Rebuiding Data files because {path} is dirty (hash)");
73+
return true;
74+
}
75+
76+
return false;
77+
}
78+
79+
bool DoCheckDirty()
80+
{
81+
if (!scenes.SequenceEqual(buildData.scenes.Select(f => f.path)))
82+
{
83+
Console.WriteLine($"Rebuiding Data files because the scene list is dirty");
84+
return true;
85+
}
86+
87+
if (buildData.inputFiles.Any(CheckAssetDirty))
88+
return true;
89+
90+
Console.WriteLine($"Not rebuiding Data files -- no changes");
91+
return false;
92+
}
93+
94+
[RequiredByNativeCode]
95+
static public void WriteBuildData(string buildDataPath, BuildReport report, string[] scenes, string[] prefabs)
96+
{
97+
var inputScenes = new List<BuildDataInputFile>();
98+
foreach (var scene in scenes)
99+
inputScenes.Add(new BuildDataInputFile(scene));
100+
101+
var inputFiles = new List<BuildDataInputFile>();
102+
foreach (var scene in scenes)
103+
inputFiles.Add(new BuildDataInputFile(scene));
104+
foreach (var prefab in prefabs)
105+
inputFiles.Add(new BuildDataInputFile(prefab));
106+
foreach (var assetInfo in report.packedAssets.SelectMany(a => a.contents))
107+
{
108+
if (assetInfo.sourceAssetPath.ToNPath().FileExists() && !assetInfo.sourceAssetPath.StartsWith("."))
109+
inputFiles.Add(new BuildDataInputFile(assetInfo.sourceAssetPath));
110+
}
111+
foreach (var projectSetting in new NPath("ProjectSettings").Files("*.asset"))
112+
inputFiles.Add(new BuildDataInputFile(projectSetting));
113+
114+
var buildData = new BuildData()
115+
{
116+
scenes = inputScenes.ToArray(),
117+
inputFiles = inputFiles.ToArray(),
118+
};
119+
buildDataPath.ToNPath().WriteAllText(JsonUtility.ToJson(buildData));
120+
}
121+
122+
[RequiredByNativeCode]
123+
static public bool CheckDirty(string buildDataPath, string[] scenes)
124+
{
125+
NPath buildReportPath = buildDataPath;
126+
if (!buildReportPath.FileExists())
127+
return true;
128+
129+
DataBuildDirtyTracker tracker = new DataBuildDirtyTracker()
130+
{
131+
buildData = JsonUtility.FromJson<BuildData>(buildReportPath.ReadAllText()),
132+
scenes = scenes
133+
};
134+
return tracker.DoCheckDirty();
135+
}
136+
}
137+
}

Editor/Mono/BuildPlayerWindow.cs

Lines changed: 111 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,44 @@ public GUIContent GetDownloadErrorForTarget(BuildTarget target)
7676
public GUIContent learnAboutUnityCloudBuild = EditorGUIUtility.TrTextContent("Learn about Unity Cloud Build");
7777
public GUIContent compressionMethod = EditorGUIUtility.TrTextContent("Compression Method", "Compression applied to Player data (scenes and resources).\nDefault - none or default platform compression.\nLZ4 - fast compression suitable for Development Builds.\nLZ4HC - higher compression rate variance of LZ4, causes longer build times. Works best for Release Builds.");
7878

79+
public readonly GUIContent assetImportOverrides = EditorGUIUtility.TrTextContent("Asset Import Overrides", "Asset import overrides for local development. Reducing maximum texture size or compression settings can speed up asset imports and platform switches.");
80+
public readonly GUIContent maxTextureSize = EditorGUIUtility.TrTextContent("Max Texture Size", "Maximum texture import size for local development. Reducing maximum texture size can speed up asset imports and platform switches.");
81+
public readonly GUIContent[] maxTextureSizeLabels =
82+
{
83+
EditorGUIUtility.TrTextContent("No Override", "Use maximum texture size as specified in per-texture import settings."),
84+
EditorGUIUtility.TrTextContent("Max 2048", "Make imported textures never exceed 2048 pixels in width or height."),
85+
EditorGUIUtility.TrTextContent("Max 1024", "Make imported textures never exceed 1024 pixels in width or height."),
86+
EditorGUIUtility.TrTextContent("Max 512", "Make imported textures never exceed 512 pixels in width or height."),
87+
EditorGUIUtility.TrTextContent("Max 256", "Make imported textures never exceed 256 pixels in width or height."),
88+
EditorGUIUtility.TrTextContent("Max 128", "Make imported textures never exceed 128 pixels in width or height."),
89+
EditorGUIUtility.TrTextContent("Max 64", "Make imported textures never exceed 64 pixels in width or height."),
90+
};
91+
public readonly int[] maxTextureSizeValues =
92+
{
93+
0,
94+
2048,
95+
1024,
96+
512,
97+
256,
98+
128,
99+
64,
100+
};
101+
public readonly GUIContent[] textureCompressionLabels =
102+
{
103+
EditorGUIUtility.TrTextContent("No Override", "Do not modify texture import compression settings."),
104+
EditorGUIUtility.TrTextContent("Force Fast Compressor", "Use a faster but lower quality texture compression mode for all compressed textures. Turn off Crunch compression."),
105+
EditorGUIUtility.TrTextContent("Force Uncompressed", "Do not compress textures."),
106+
};
107+
public readonly int[] textureCompressionValues =
108+
{
109+
(int)OverrideTextureCompression.NoOverride,
110+
(int)OverrideTextureCompression.ForceFastCompressor,
111+
(int)OverrideTextureCompression.ForceUncompressed,
112+
};
113+
114+
public readonly GUIContent textureCompression = EditorGUIUtility.TrTextContent("Texture Compression", "Texture compression override for local development. Fast or Uncompressed can speed up asset imports and platform switches.");
115+
public readonly GUIContent applyOverrides = EditorGUIUtility.TrTextContent("Apply Overrides", "Apply asset import override settings");
116+
79117
public Compression[] compressionTypes =
80118
{
81119
Compression.None,
@@ -139,6 +177,7 @@ static void BuildPlayerAndRun(bool askForBuildLocation)
139177

140178
public BuildPlayerWindow()
141179
{
180+
s_CurrOverrideMaxTextureSize = -1;
142181
minSize = new Vector2(640, 580);
143182
position = new Rect(50, 50, minSize.x, minSize.y);
144183
titleContent = EditorGUIUtility.TrTextContent("Build Settings");
@@ -214,6 +253,59 @@ bool IsBuildTargetCompatibleWithOS(BuildTarget target)
214253
return true;
215254
}
216255

256+
static int s_CurrOverrideMaxTextureSize = -1;
257+
static OverrideTextureCompression s_CurrOverrideTextureCompression;
258+
259+
static bool hasAssetImportOverrideChanges =>
260+
s_CurrOverrideMaxTextureSize != EditorUserBuildSettings.overrideMaxTextureSize ||
261+
s_CurrOverrideTextureCompression != EditorUserBuildSettings.overrideTextureCompression;
262+
263+
static void ApplyAssetImportOverridesToSettingsAsset()
264+
{
265+
EditorUserBuildSettings.overrideMaxTextureSize = s_CurrOverrideMaxTextureSize;
266+
EditorUserBuildSettings.overrideTextureCompression = s_CurrOverrideTextureCompression;
267+
}
268+
269+
static void DrawOverrideLine()
270+
{
271+
var rect = EditorGUILayout.s_LastRect;
272+
var prevMargin = EditorGUIUtility.leftMarginCoord;
273+
EditorGUIUtility.leftMarginCoord = 2;
274+
EditorGUI.DrawOverrideBackground(rect);
275+
EditorGUIUtility.leftMarginCoord = prevMargin;
276+
}
277+
278+
void AssetImportOverridesGui()
279+
{
280+
if (s_CurrOverrideMaxTextureSize < 0)
281+
{
282+
// fetch initial values
283+
s_CurrOverrideMaxTextureSize = EditorUserBuildSettings.overrideMaxTextureSize;
284+
s_CurrOverrideTextureCompression = EditorUserBuildSettings.overrideTextureCompression;
285+
}
286+
287+
GUILayout.Space(5);
288+
GUILayout.Label(styles.assetImportOverrides, styles.title);
289+
var oldLabelWidth = EditorGUIUtility.labelWidth;
290+
EditorGUIUtility.labelWidth = 125;
291+
s_CurrOverrideMaxTextureSize = EditorGUILayout.IntPopup(
292+
styles.maxTextureSize,
293+
s_CurrOverrideMaxTextureSize,
294+
styles.maxTextureSizeLabels,
295+
styles.maxTextureSizeValues);
296+
if (s_CurrOverrideMaxTextureSize != 0)
297+
DrawOverrideLine();
298+
299+
s_CurrOverrideTextureCompression = (OverrideTextureCompression)EditorGUILayout.IntPopup(
300+
styles.textureCompression,
301+
(int)s_CurrOverrideTextureCompression,
302+
styles.textureCompressionLabels,
303+
styles.textureCompressionValues);
304+
if (s_CurrOverrideTextureCompression != OverrideTextureCompression.NoOverride)
305+
DrawOverrideLine();
306+
EditorGUIUtility.labelWidth = oldLabelWidth;
307+
}
308+
217309
void ActiveBuildTargetsGUI()
218310
{
219311
GUILayout.BeginVertical();
@@ -248,25 +340,35 @@ void ActiveBuildTargetsGUI()
248340
}
249341

250342
GUILayout.EndScrollView();
343+
344+
AssetImportOverridesGui();
251345
GUILayout.EndVertical();
252346
GUILayout.Space(10);
253347

254-
// Switching build target in the editor
255-
BuildTarget selectedTarget = EditorUserBuildSettingsUtils.CalculateSelectedBuildTarget();
256-
BuildTargetGroup selectedTargetGroup = EditorUserBuildSettingsUtils.CalculateSelectedBuildTargetGroup();
257-
258348
GUILayout.BeginHorizontal();
259349

350+
// Switch build target
351+
BuildTarget selectedTarget = EditorUserBuildSettingsUtils.CalculateSelectedBuildTarget();
352+
BuildTargetGroup selectedTargetGroup = EditorUserBuildSettingsUtils.CalculateSelectedBuildTargetGroup();
260353
GUI.enabled = BuildPipeline.IsBuildTargetSupported(selectedTargetGroup, selectedTarget);
261354
if (GUILayout.Button(EditorGUIUtility.TrTextContent("Player Settings..."), GUILayout.Width(Styles.kButtonWidth)))
262355
{
263356
SettingsService.OpenProjectSettings("Project/Player");
264357
GUIUtility.ExitGUI();
265358
}
359+
GUI.enabled = true;
266360

267-
GUILayout.EndHorizontal();
361+
// Apply import overrides
362+
if (hasAssetImportOverrideChanges)
363+
{
364+
if (GUILayout.Button(styles.applyOverrides, GUILayout.Width(Styles.kButtonWidth)))
365+
{
366+
ApplyAssetImportOverridesToSettingsAsset();
367+
AssetDatabase.Refresh();
368+
}
369+
}
268370

269-
GUI.enabled = true;
371+
GUILayout.EndHorizontal();
270372

271373
GUILayout.EndVertical();
272374
}
@@ -728,7 +830,7 @@ void ShowBuildTargetSettings()
728830
bool shouldDrawArrayBoundsChecksToggle = buildWindowExtension != null ? buildWindowExtension.ShouldDrawExplicitArrayBoundsCheckbox() : false;
729831
bool shouldDrawDevelopmentPlayerToggle = buildWindowExtension != null ? buildWindowExtension.ShouldDrawDevelopmentPlayerCheckbox() : true;
730832

731-
bool enableBuildScriptsOnly = (postprocessor != null ? postprocessor.SupportsScriptsOnlyBuild() : false);
833+
bool enableBuildScriptsOnly = postprocessor != null ? postprocessor.SupportsScriptsOnlyBuild() && !postprocessor.UsesBeeBuild() : false;
732834
bool canInstallInBuildFolder = false;
733835

734836
if (BuildPipeline.IsBuildTargetSupported(buildTargetGroup, buildTarget))
@@ -1006,6 +1108,7 @@ private static void GUIBuildButtons(IBuildWindowExtension buildWindowExtension,
10061108
}
10071109
else if (GUILayout.Button(buildButton, GUILayout.Width(Styles.kButtonWidth)))
10081110
{
1111+
ApplyAssetImportOverridesToSettingsAsset();
10091112
CallBuildMethods(askForBuildLocation, BuildOptions.ShowBuiltPlayer);
10101113
GUIUtility.ExitGUI();
10111114
}
@@ -1015,6 +1118,7 @@ private static void GUIBuildButtons(IBuildWindowExtension buildWindowExtension,
10151118
GUI.enabled = BuildPipeline.IsBuildTargetSupported(selectedTargetGroup, selectedTarget) && EditorUserBuildSettings.activeBuildTargetGroup != selectedTargetGroup;
10161119
if (GUILayout.Button(styles.switchPlatform, GUILayout.Width(Styles.kButtonWidth)))
10171120
{
1121+
ApplyAssetImportOverridesToSettingsAsset();
10181122
EditorUserBuildSettings.SwitchActiveBuildTargetAsync(selectedTargetGroup, selectedTarget);
10191123
GUIUtility.ExitGUI();
10201124
}

Editor/Mono/Commands/GOCreationCommands.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ internal static void Place(GameObject go, GameObject parent, bool ignoreSceneVie
7373
GameObjectUtility.EnsureUniqueNameForSibling(go);
7474
Undo.SetCurrentGroupName("Create " + go.name);
7575

76-
EditorWindow.FocusWindowIfItsOpen<SceneHierarchyWindow>();
76+
var sh = SceneHierarchyWindow.GetSceneHierarchyWindowToFocusForNewGameObjects();
77+
if (sh != null)
78+
sh.Focus();
79+
7780
Selection.activeGameObject = go;
7881
}
7982

Editor/Mono/ConsoleWindow.cs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,6 @@ public ConsoleWindow()
302302
m_ListView = new ListViewState(0, 0);
303303
m_CopyString = new StringBuilder();
304304
m_SearchText = string.Empty;
305-
EditorGUI.hyperLinkClicked += EditorGUI_HyperLinkClicked;
306305
}
307306

308307
internal void OnEnable()
@@ -853,23 +852,6 @@ internal static string StacktraceWithHyperlinks(string stacktraceText)
853852
return textWithHyperlinks.ToString();
854853
}
855854

856-
private void EditorGUI_HyperLinkClicked(object sender, EventArgs e)
857-
{
858-
EditorGUILayout.HyperLinkClickedEventArgs args = (EditorGUILayout.HyperLinkClickedEventArgs)e;
859-
860-
string filePath;
861-
string lineString;
862-
if (!args.hyperlinkInfos.TryGetValue("href", out filePath) ||
863-
!args.hyperlinkInfos.TryGetValue("line", out lineString))
864-
return;
865-
866-
int line = Int32.Parse(lineString);
867-
var projectFilePath = filePath.Replace('\\', '/');
868-
869-
if (!String.IsNullOrEmpty(projectFilePath))
870-
LogEntries.OpenFileOnSpecificLineAndColumn(filePath, line, -1);
871-
}
872-
873855
[UsedImplicitly]
874856
public static bool GetConsoleErrorPause()
875857
{

0 commit comments

Comments
 (0)