Skip to content

Commit 2d9918c

Browse files
author
Unity Technologies
committed
Unity 2023.3.0b1 C# reference source code
1 parent 6230ef8 commit 2d9918c

File tree

179 files changed

+3877
-4627
lines changed

Some content is hidden

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

179 files changed

+3877
-4627
lines changed

Editor/Mono/Animation/AnimationWindow/CurveEditor.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3833,6 +3833,10 @@ WrapMode WrapModeIconPopup(Keyframe key, WrapMode oldWrap, float hOffset)
38333833
case EventType.MouseDown:
38343834
if (evt.button == 0 && r.Contains(evt.mousePosition))
38353835
{
3836+
if (Application.platform == RuntimePlatform.OSXEditor)
3837+
{
3838+
r.y = r.y - selectedPopupIndex * 16 - 19;
3839+
}
38363840
EditorGUI.PopupCallbackInfo.instance = new EditorGUI.PopupCallbackInfo(controlID);
38373841
EditorUtility.DisplayCustomMenu(r, popupStrings, selectedPopupIndex, EditorGUI.PopupCallbackInfo.instance.SetEnumValueDelegate, null);
38383842
GUIUtility.keyboardControl = controlID;
@@ -3842,6 +3846,10 @@ WrapMode WrapModeIconPopup(Keyframe key, WrapMode oldWrap, float hOffset)
38423846
case EventType.KeyDown:
38433847
if (evt.MainActionKeyForControl(controlID))
38443848
{
3849+
if (Application.platform == RuntimePlatform.OSXEditor)
3850+
{
3851+
r.y = r.y - selectedPopupIndex * 16 - 19;
3852+
}
38453853
EditorGUI.PopupCallbackInfo.instance = new EditorGUI.PopupCallbackInfo(controlID);
38463854
EditorUtility.DisplayCustomMenu(r, popupStrings, selectedPopupIndex, EditorGUI.PopupCallbackInfo.instance.SetEnumValueDelegate, null);
38473855
evt.Use();

Editor/Mono/BuildPipeline.bindings.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,10 @@ public enum BuildAssetBundleOptions
186186
AssetBundleStripUnityVersion = 32768, // 1 << 15
187187

188188
// Calculate bundle hash on the bundle content
189-
UseContentHash = 65536 // 1 << 16
189+
UseContentHash = 65536, // 1 << 16
190+
191+
// Use when AssetBundle dependencies need to be calculated recursively, such as when you have a dependency chain of matching typed Scriptable Objects
192+
RecurseDependencies = 131072 // 1 << 17
190193
}
191194

192195
// Keep in sync with CanAppendBuild in EditorUtility.h

Editor/Mono/BuildProfile/BuildProfile.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,28 @@ public EditorBuildSettingsScene[] scenes
7979
}
8080
}
8181

82+
/// <summary>
83+
/// Returns true if the given <see cref="BuildProfile"/> is the active profile or a classic
84+
/// profile for the EditorUserBuildSettings active build target.
85+
/// </summary>
86+
[VisibleToOtherModules]
87+
internal bool IsActiveBuildProfileOrPlatform()
88+
{
89+
if (BuildProfileContext.instance.activeProfile == this)
90+
return true;
91+
92+
if (BuildProfileContext.instance.activeProfile is not null
93+
|| !BuildProfileContext.IsClassicPlatformProfile(this))
94+
return false;
95+
96+
if (!BuildProfileModuleUtil.IsStandalonePlatform(buildTarget))
97+
return buildTarget == EditorUserBuildSettings.activeBuildTarget;
98+
99+
var profileModuleName = BuildProfileModuleUtil.GetModuleName(buildTarget);
100+
var activeModuleName = BuildProfileModuleUtil.GetModuleName(EditorUserBuildSettings.activeBuildTarget);
101+
return profileModuleName == activeModuleName && subtarget == EditorUserBuildSettings.standaloneBuildSubtarget;
102+
}
103+
82104
void OnEnable()
83105
{
84106
// Check if the platform support module has been installed,

Editor/Mono/BuildProfile/BuildProfileContext.cs

Lines changed: 27 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -172,51 +172,16 @@ internal static BuildProfile GetActiveOrClassicBuildProfile(
172172
return IsSharedProfile(target) ? instance.sharedProfile : instance.GetForClassicPlatform(target, subTarget);
173173
}
174174

175-
[RequiredByNativeCode]
176-
internal static BuildProfile GetClassicProfileAndResetActive(
177-
BuildTarget target, StandaloneBuildSubtarget subTarget = StandaloneBuildSubtarget.Default, string sharedSetting = null)
178-
{
179-
if (ShouldReturnActiveProfile(target, subTarget, sharedSetting))
180-
{
181-
// When invoking a legacy setter, we unset the active profile to prevent
182-
// inconsistencies with legacy APIs. That is, all legacy APIs need to write to
183-
// the classic platform build profile directly. When doing this, the next getter
184-
// MUST return the classic platform build profile containing the newly set value.
185-
// The active build profile should be updated directly.
186-
ResetActiveProfile();
187-
}
188-
189-
return IsSharedProfile(target) ? instance.sharedProfile : instance.GetForClassicPlatform(target, subTarget);
190-
}
191-
192-
[RequiredByNativeCode, UsedImplicitly]
193-
internal static void ResetActiveProfile()
194-
{
195-
if (instance.activeProfile is null)
196-
return;
197-
198-
Debug.LogWarning($"[BuildProfile] Active build profile ({AssetDatabase.GetAssetPath(instance.activeProfile)}) is set when calling a global platform API.");
199-
instance.activeProfile = null;
200-
}
201-
202175
internal static bool TryGetActiveOrClassicPlatformSettingsBase<T>(
203176
BuildTarget target, StandaloneBuildSubtarget subTarget, out T result) where T : BuildProfilePlatformSettingsBase
204177
{
205-
BuildProfile buildProfile = GetActiveOrClassicBuildProfile(target, subTarget);
206-
if (buildProfile != null && buildProfile.platformBuildProfile is T platformProfile)
178+
if (!EditorUserBuildSettings.IsBuildProfileScriptingAvailable())
207179
{
208-
result = platformProfile;
209-
return true;
180+
result = null;
181+
return false;
210182
}
211183

212-
result = null;
213-
return false;
214-
}
215-
216-
internal static bool TryGetClassicPlatformSettingsBaseAndResetActive<T>(
217-
BuildTarget target, StandaloneBuildSubtarget subTarget, out T result) where T : BuildProfilePlatformSettingsBase
218-
{
219-
BuildProfile buildProfile = GetClassicProfileAndResetActive(target, subTarget);
184+
BuildProfile buildProfile = GetActiveOrClassicBuildProfile(target, subTarget);
220185
if (buildProfile != null && buildProfile.platformBuildProfile is T platformProfile)
221186
{
222187
result = platformProfile;
@@ -301,17 +266,11 @@ void OnEnable()
301266
if (!Directory.Exists(k_BuildProfilePath))
302267
return;
303268

304-
// No need to load classic profiles if build profile is disabled.
305-
if (!EditorUserBuildSettings.IsBuildProfileWorkflowEnabled())
306-
{
307-
return;
308-
}
309-
310-
foreach (var platform in BuildPlatforms.instance.GetValidPlatforms())
269+
var viewablePlatformKeys = BuildProfileModuleUtil.FindAllViewablePlatforms();
270+
for (var index = 0; index < viewablePlatformKeys.Count; index++)
311271
{
312-
string path = (platform is BuildPlatformWithSubtarget platformWithSubtarget) ?
313-
GetFilePathForBuildProfile(GetKey(platform.defaultTarget, (StandaloneBuildSubtarget)platformWithSubtarget.subtarget)) :
314-
GetFilePathForBuildProfile(GetKey(platform.defaultTarget, StandaloneBuildSubtarget.Default));
272+
var key = viewablePlatformKeys[index];
273+
string path = GetFilePathForBuildProfile(key);
315274

316275
if (!File.Exists(path))
317276
continue;
@@ -346,31 +305,26 @@ void OnEnable()
346305
/// </summary>
347306
void CheckInstalledBuildPlatforms()
348307
{
349-
foreach (var platform in BuildPlatforms.instance.GetValidPlatforms())
308+
var viewablePlatformKeys = BuildProfileModuleUtil.FindAllViewablePlatforms();
309+
for (var index = 0; index < viewablePlatformKeys.Count; index++)
350310
{
351-
string targetString = ModuleManager.GetTargetStringFromBuildTarget(platform.defaultTarget);
352-
if (!ModuleManager.IsPlatformSupportLoaded(targetString))
353-
{
311+
var key = viewablePlatformKeys[index];
312+
var moduleName = key.Item1;
313+
var subtarget = key.Item2;
314+
315+
if (!BuildProfileModuleUtil.IsModuleInstalled(moduleName, subtarget))
354316
continue;
355-
}
356317

357-
if (ModuleManager.GetBuildProfileExtension(targetString) == null)
318+
if (ModuleManager.GetBuildProfileExtension(moduleName) == null)
358319
{
359320
// Require platform support and implemented build profile
360321
// extension for the target platform.
361-
Debug.LogWarning("Platform does not support build profiles targetString=" + targetString);
322+
Debug.LogWarning("Platform does not support build profiles targetString=" + moduleName);
362323
continue;
363324
}
364325

365-
if (platform is BuildPlatformWithSubtarget platformWithSubtarget)
366-
{
367-
GetOrCreateClassicPlatformBuildProfile(platform.defaultTarget,
368-
(StandaloneBuildSubtarget)platformWithSubtarget.subtarget);
369-
}
370-
else
371-
{
372-
GetOrCreateClassicPlatformBuildProfile(platform.defaultTarget, StandaloneBuildSubtarget.Default);
373-
}
326+
var buildTarget = BuildProfileModuleUtil.GetBuildTarget(moduleName);
327+
GetOrCreateClassicPlatformBuildProfile(buildTarget, subtarget);
374328
}
375329

376330
GetOrCreateSharedBuildProfile();
@@ -462,7 +416,7 @@ static void SaveBuildProfileInProject(BuildProfile profile)
462416
static void CreateOrLoad()
463417
{
464418
var buildProfileContext = InternalEditorUtility.LoadSerializedFileAndForget(k_BuildProfileProviderAssetPath);
465-
if (buildProfileContext != null && buildProfileContext.Length > 0)
419+
if (buildProfileContext != null && buildProfileContext.Length > 0 && buildProfileContext[0] != null)
466420
{
467421
s_Instance = buildProfileContext[0] as BuildProfileContext;
468422
if (s_Instance == null)
@@ -476,39 +430,22 @@ static void CreateOrLoad()
476430
}
477431

478432
System.Diagnostics.Debug.Assert(s_Instance != null);
479-
480-
// Only check installed build platforms to create classic profiles
481-
// when the build profile flag is enabled. We need to check here
482-
// because this method can be called from the static constructor.
483-
// So we should only set the instance but not create profiles
484-
if (EditorUserBuildSettings.IsBuildProfileWorkflowEnabled())
485-
{
486-
s_Instance.CheckInstalledBuildPlatforms();
487-
}
433+
s_Instance.CheckInstalledBuildPlatforms();
488434
}
489435

490436
[RequiredByNativeCode, UsedImplicitly]
491-
static void SetClassicProfileRawPlatformSetting(string settingName, string settingValue, BuildTarget target, StandaloneBuildSubtarget subtarget)
437+
static void SetActiveOrClassicProfileRawPlatformSetting(string settingName, string settingValue, BuildTarget target, StandaloneBuildSubtarget subtarget)
492438
{
493-
// If it is a shared setting, we will reset active to its classic counterpart if the specified shared
494-
// setting is enabled in the active profile, and set the value in the shared profile.
439+
// If it is a shared setting, we will set the value in the active profile if the specified shared setting
440+
// is enabled in the active profile; Otherwise, we will set the value in the shared profile.
495441
if (IsSharedProfile(target))
496442
{
497-
var profile = GetClassicProfileAndResetActive(target, subtarget, settingName);
443+
var profile = GetActiveOrClassicBuildProfile(target, subtarget, settingName);
498444
profile?.platformBuildProfile.SetRawPlatformSetting(settingName, settingValue);
499445
return;
500446
}
501447

502-
// If the setting doesn't exist in classic platform, return
503-
BuildProfile classicProfile = instance.GetForClassicPlatform(target, subtarget);
504-
if (classicProfile == null || classicProfile.platformBuildProfile == null)
505-
return;
506-
507-
if (classicProfile.platformBuildProfile.GetRawPlatformSetting(settingName) == null)
508-
return;
509-
510-
// Setting exists, so we should set new value and reset active if needed
511-
if (TryGetClassicPlatformSettingsBaseAndResetActive(target, subtarget, out BuildProfilePlatformSettingsBase platformProfile))
448+
if (TryGetActiveOrClassicPlatformSettingsBase(target, subtarget, out BuildProfilePlatformSettingsBase platformProfile))
512449
{
513450
platformProfile.SetRawPlatformSetting(settingName, settingValue);
514451
}
@@ -533,7 +470,7 @@ static string GetActiveOrClassicProfileRawPlatformSetting(string settingName, Bu
533470

534471
if (TryGetActiveOrClassicPlatformSettingsBase(target, subtarget, out BuildProfilePlatformSettingsBase platformProfile))
535472
{
536-
string value = platformProfile.GetRawPlatformSetting(settingName);
473+
string value = platformProfile?.GetRawPlatformSetting(settingName);
537474
return value != null ? value : string.Empty;
538475
}
539476

Editor/Mono/BuildProfile/BuildProfileModuleUtil.cs

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using UnityEditor.Modules;
77
using UnityEngine;
88
using UnityEngine.Bindings;
9+
using UnityEngine.Rendering;
910
using UnityEngine.UIElements;
1011
using TargetAttributes = UnityEditor.BuildTargetDiscovery.TargetAttributes;
1112

@@ -25,6 +26,13 @@ internal class BuildProfileModuleUtil
2526
static readonly GUIContent k_OpenDownloadPage = EditorGUIUtility.TrTextContent("Open Download Page");
2627
static readonly GUIContent k_InstallModuleWithHub = EditorGUIUtility.TrTextContent("Install with Unity Hub");
2728
static Dictionary<string, BuildTargetDiscovery.DiscoveredTargetInfo> s_DiscoveredTargetInfos = InitializeDiscoveredTargetDict();
29+
static HashSet<string> s_BuildProfileIconModules = new()
30+
{
31+
"Switch",
32+
"QNX",
33+
"PS4",
34+
"PS5"
35+
};
2836

2937
/// <summary>
3038
/// Classic platform display name for a given build profile. Matching
@@ -48,22 +56,22 @@ public static string GetClassicPlatformDisplayName(string moduleName, Standalone
4856
/// </summary>
4957
public static Texture2D GetPlatformIcon(string moduleName, StandaloneBuildSubtarget subtarget)
5058
{
51-
return GetBuildProfileIcon();
52-
// TODO: Finalize Icon Design https://jira.unity3d.com/browse/PLAT-7379
53-
// return EditorGUIUtility.LoadIcon(GetPlatformIconId(moduleName, subtarget));
59+
if (LoadBuildProfileIcon(moduleName, out Texture2D icon))
60+
return icon;
61+
62+
return EditorGUIUtility.LoadIcon(GetPlatformIconId(moduleName, subtarget));
5463
}
5564

5665
/// <summary>
5766
/// Fetch small (16x16) editor platform icon texture.
5867
/// </summary>
5968
public static Texture2D GetPlatformIconSmall(string moduleName, StandaloneBuildSubtarget subtarget)
6069
{
61-
return GetBuildProfileIcon();
62-
// TODO: Finalize Icon Design https://jira.unity3d.com/browse/PLAT-7379
63-
// return EditorGUIUtility.LoadIcon(GetPlatformIconId(moduleName, subtarget) + ".Small");
64-
}
70+
if (LoadBuildProfileIcon(moduleName, out Texture2D icon))
71+
return icon;
6572

66-
public static Texture2D GetBuildProfileIcon() => EditorGUIUtility.FindTexture(typeof(UnityEditor.Build.Profile.BuildProfile));
73+
return EditorGUIUtility.LoadIcon(GetPlatformIconId(moduleName, subtarget) + ".Small");
74+
}
6775

6876
/// <summary>
6977
/// Load internal warning icon
@@ -256,6 +264,30 @@ public static IBuildProfileExtension GetBuildProfileExtension(BuildTarget buildT
256264
}
257265

258266
/// <summary>
267+
/// Check if the user is able to build his VT-enabled Player for a target platform
268+
/// </summary>
269+
public static bool IsVirtualTexturingSettingsValid(BuildTarget buildTarget)
270+
{
271+
if (!PlayerSettings.GetVirtualTexturingSupportEnabled())
272+
{
273+
return true;
274+
}
275+
276+
if (!UnityEngine.Rendering.VirtualTexturingEditor.Building.IsPlatformSupportedForPlayer(buildTarget))
277+
{
278+
return false;
279+
}
280+
281+
GraphicsDeviceType[] gfxTypes = PlayerSettings.GetGraphicsAPIs(buildTarget);
282+
bool supportedAPI = true;
283+
foreach (GraphicsDeviceType api in gfxTypes)
284+
{
285+
supportedAPI &= UnityEngine.Rendering.VirtualTexturingEditor.Building.IsRenderAPISupported(api, buildTarget, false);
286+
}
287+
288+
return supportedAPI;
289+
}
290+
259291
/// Retrieve string of filename invalid characters
260292
/// </summary>
261293
/// <returns></returns>
@@ -280,6 +312,18 @@ internal static BuildTarget GetBuildTarget(string moduleName)
280312
return result;
281313
}
282314

315+
static bool LoadBuildProfileIcon(string moduleName, out Texture2D icon)
316+
{
317+
if (s_BuildProfileIconModules.Contains(moduleName))
318+
{
319+
icon = EditorGUIUtility.FindTexture(typeof(BuildProfile));
320+
return true;
321+
}
322+
323+
icon = null;
324+
return false;
325+
}
326+
283327
static string GetPlatformIconId(string moduleName, StandaloneBuildSubtarget subtarget)
284328
{
285329
if (subtarget == StandaloneBuildSubtarget.Server)

0 commit comments

Comments
 (0)