Skip to content

Commit 11e25ce

Browse files
author
Unity Technologies
committed
Unity 2020.2.0a21 C# reference source code
1 parent c4e4e5f commit 11e25ce

File tree

178 files changed

+5120
-1205
lines changed

Some content is hidden

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

178 files changed

+5120
-1205
lines changed

Editor/Mono/AssemblyHelper.cs

Lines changed: 17 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@
77
using System.Linq;
88
using System.Reflection;
99
using System.Collections.Generic;
10+
using System.Diagnostics;
1011
using Mono.Cecil;
1112
using UnityEditor.Modules;
1213
using UnityEditorInternal;
1314
using UnityEngine;
1415
using System.Runtime.InteropServices;
16+
using UnityEditor.VisualStudioIntegration;
1517
using UnityEngine.Scripting;
18+
using Debug = UnityEngine.Debug;
1619

1720
namespace UnityEditor
1821
{
1922
internal partial class AssemblyHelper
2023
{
2124
static Dictionary<string, bool> managedToDllType = new Dictionary<string, bool>();
25+
static BuildPlayerDataExtractor m_BuildPlayerDataExtractor = new BuildPlayerDataExtractor();
2226

2327
// Check if assmebly internal name doesn't match file name, and show the warning.
2428
static public void CheckForAssemblyFileNameMismatch(string assemblyPath)
@@ -327,24 +331,17 @@ public static void ExtractAllClassesThatAreUserExtendedScripts(string path, out
327331
originalClassNameSpacesArray = originalNamespaces.ToArray();
328332
}
329333

330-
struct GetAssemblyResolverData
334+
/// Extract information about all types in the specified assembly, searchDirs might be used to resolve dependencies.
335+
[RequiredByNativeCode]
336+
static public AssemblyInfoManaged[] ExtractAssemblyTypeInfo(bool isEditor)
331337
{
332-
public IAssemblyResolver Resolver;
333-
public string[] SearchDirs;
338+
var extractAssemblyTypeInfo = m_BuildPlayerDataExtractor.ExtractAssemblyTypeInfo(isEditor);
339+
return extractAssemblyTypeInfo;
334340
}
335341

336-
/// Extract information about all types in the specified assembly, searchDirs might be used to resolve dependencies.
337-
static public AssemblyTypeInfoGenerator.ClassInfo[] ExtractAssemblyTypeInfo(BuildTarget targetPlatform, bool isEditor, string assemblyPathName, string[] searchDirs)
342+
static public AssemblyInfoManaged[] ExtractAssemblyTypeInfoFromFiles(string[] typeDbJsonPaths)
338343
{
339-
try
340-
{
341-
AssemblyTypeInfoGenerator gen = new AssemblyTypeInfoGenerator(assemblyPathName, searchDirs);
342-
return gen.GatherClassInfo();
343-
}
344-
catch (System.Exception ex)
345-
{
346-
throw new Exception("ExtractAssemblyTypeInfo: Failed to process " + assemblyPathName + ", " + ex);
347-
}
344+
return m_BuildPlayerDataExtractor.ExtractAssemblyTypeInfoFromFiles(typeDbJsonPaths);
348345
}
349346

350347
[StructLayout(LayoutKind.Sequential)]
@@ -354,88 +351,17 @@ public struct RuntimeInitializeOnLoadMethodsData
354351
public int methodsCount;
355352
}
356353

357-
static void FindRuntimeInitializeOnLoadMethodAttributes(TypeDefinition type,
358-
string assemblyName,
359-
ref List<RuntimeInitializeClassInfo> classInfoList,
360-
ref int methodCount)
354+
[RequiredByNativeCode]
355+
public static void ExtractPlayerRuntimeInitializeOnLoadMethods(string jsonPath)
361356
{
362-
if (!type.HasMethods)
363-
return;
364-
365-
foreach (var method in type.Methods)
357+
try
366358
{
367-
// RuntimeInitializeOnLoadMethod only works on static methods.
368-
if (!method.IsStatic)
369-
continue;
370-
371-
foreach (var attribute in method.CustomAttributes)
372-
{
373-
if (attribute.AttributeType.FullName == "UnityEngine.RuntimeInitializeOnLoadMethodAttribute")
374-
{
375-
RuntimeInitializeLoadType loadType = RuntimeInitializeLoadType.AfterSceneLoad;
376-
377-
if (attribute.ConstructorArguments != null && attribute.ConstructorArguments.Count > 0)
378-
loadType = (RuntimeInitializeLoadType)attribute.ConstructorArguments[0].Value;
379-
380-
RuntimeInitializeClassInfo classInfo = new RuntimeInitializeClassInfo();
381-
382-
classInfo.assemblyName = assemblyName;
383-
classInfo.className = type.FullName;
384-
classInfo.methodNames = new[] { method.Name };
385-
classInfo.loadTypes = new[] { loadType };
386-
classInfoList.Add(classInfo);
387-
methodCount++;
388-
}
389-
}
359+
m_BuildPlayerDataExtractor.ExtractPlayerRuntimeInitializeOnLoadMethods(jsonPath);
390360
}
391-
}
392-
393-
[RequiredByNativeCode]
394-
public static RuntimeInitializeOnLoadMethodsData ExtractPlayerRuntimeInitializeOnLoadMethods(BuildTarget targetPlatform, string[] assemblyPaths, string[] searchDirs)
395-
{
396-
var classInfoList = new List<RuntimeInitializeClassInfo>();
397-
int methodCount = 0;
398-
399-
foreach (var assemblyPath in assemblyPaths)
361+
catch (Exception exception)
400362
{
401-
try
402-
{
403-
var assemblyResolverData = new GetAssemblyResolverData { SearchDirs = searchDirs, };
404-
var resolver = new DefaultAssemblyResolver();
405-
foreach (var searchDir in searchDirs)
406-
resolver.AddSearchDirectory(searchDir);
407-
408-
assemblyResolverData.Resolver = resolver;
409-
410-
var assembly = AssemblyDefinition.ReadAssembly(assemblyPath, new ReaderParameters
411-
{
412-
AssemblyResolver = assemblyResolverData.Resolver
413-
});
414-
415-
var assemblyName = assembly.Name.Name;
416-
417-
foreach (var module in assembly.Modules)
418-
{
419-
foreach (var type in module.Types)
420-
{
421-
FindRuntimeInitializeOnLoadMethodAttributes(type,
422-
assemblyName,
423-
ref classInfoList,
424-
ref methodCount);
425-
}
426-
}
427-
}
428-
catch (Exception ex)
429-
{
430-
throw new Exception("ExtractPlayerRuntimeInitializeOnLoadMethods: Failed to process " + assemblyPath + ", " + ex);
431-
}
363+
Debug.LogError($"Failed extracting RuntimeInitializeOnLoadMethods. Player will not be able to execute RuntimeInitializeOnLoadMethods: {exception.Message}{Environment.NewLine}{exception.StackTrace}");
432364
}
433-
434-
var data = new RuntimeInitializeOnLoadMethodsData();
435-
data.classInfos = classInfoList.ToArray();
436-
data.methodsCount = methodCount;
437-
438-
return data;
439365
}
440366

441367
internal static Type[] GetTypesFromAssembly(Assembly assembly)

Editor/Mono/AssetDatabase/AssetDatabaseSearching.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static string[] FindAssets(string filter, string[] searchInFolders)
3232

3333
internal static string[] FindAssets(SearchFilter searchFilter)
3434
{
35-
return FindAllAssets(searchFilter).Select(property => property.guid).ToArray();
35+
return FindAllAssets(searchFilter).Select(property => property.guid).Distinct().ToArray();
3636
}
3737

3838
internal static IEnumerable<HierarchyProperty> FindAllAssets(SearchFilter searchFilter)

Editor/Mono/BuildPipeline.bindings.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,15 @@ private static BuildReport BuildPlayerInternal(string[] levels, string locationP
412412
// Just like BuildPlayer, but does not check for Pro license. Used from build player dialog.
413413
internal static extern BuildReport BuildPlayerInternalNoCheck(string[] levels, string locationPathName, string assetBundleManifestPath, BuildTargetGroup buildTargetGroup, BuildTarget target, BuildOptions options, string[] extraScriptingDefines, bool delayToAfterScriptReload);
414414

415+
416+
[FreeFunction("WriteBootConfig", ThrowsException = true)]
417+
static extern void WriteBootConfig(string outputFile, BuildTargetGroup buildTargetGroup, BuildTarget target, BuildOptions options);
418+
419+
public static void WriteBootConfig(string outputFile, BuildTarget target, BuildOptions options)
420+
{
421+
WriteBootConfig(outputFile, BuildPipeline.GetBuildTargetGroup(target), target, options);
422+
}
423+
415424
[StructLayout(LayoutKind.Sequential)]
416425
private struct BuildPlayerDataResult
417426
{

Editor/Mono/BuildPipeline/AssemblyTypeInfoGenerator.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,54 @@
1111
using System.Runtime.InteropServices;
1212
using Mono.Cecil;
1313
using Unity.SerializationLogic;
14+
using UnityEngine;
15+
using UnityEngine.Bindings;
1416

1517
namespace UnityEditor
1618
{
1719
using GenericInstanceTypeMap = System.Collections.Generic.Dictionary<TypeReference, TypeReference>;
20+
[NativeHeader("Modules/BuildPipeline/Editor/Public/TypeDB.h")]
21+
[Serializable]
22+
[StructLayout(LayoutKind.Sequential)]
23+
internal struct FieldInfoManaged
24+
{
25+
public string name;
26+
public string type;
27+
public int flags;
28+
public int fixedBufferLength;
29+
public string fixedBufferTypename;
30+
}
31+
32+
[NativeHeader("Modules/BuildPipeline/Editor/Public/TypeDB.h")]
33+
[Serializable]
34+
[StructLayout(LayoutKind.Sequential)]
35+
internal struct TypeInformationManaged
36+
{
37+
public string className;
38+
public FieldInfoManaged[] fieldInfos;
39+
}
40+
41+
[NativeHeader("Modules/BuildPipeline/Editor/Public/TypeDB.h")]
42+
[Serializable]
43+
[StructLayout(LayoutKind.Sequential)]
44+
internal struct AssemblyInfoManaged
45+
{
46+
public string name;
47+
public string path;
48+
public TypeInformationManaged[] types;
49+
}
50+
51+
[Serializable]
52+
internal class ExtractRoot<T>
53+
{
54+
public T[] root;
55+
}
56+
57+
[Serializable]
58+
internal struct ExtractRootRuntime
59+
{
60+
public RuntimeInitializeClassInfo[] root;
61+
}
1862

1963
internal class AssemblyTypeInfoGenerator
2064
{

Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,12 +556,18 @@ public void Run()
556556

557557
public void RunCompileAndLink(string il2cppBuildCacheSource)
558558
{
559+
if (string.Equals(Path.GetFullPath(il2cppBuildCacheSource), Path.GetFullPath(m_PlatformProvider.il2cppBuildCacheDirectory), StringComparison.OrdinalIgnoreCase))
560+
throw new ArgumentException("IIl2CppPlatformProvider.il2cppBuildCacheDirectory cannot be the same as il2cppBuildCacheDirectory. You probably forgot to override il2cppBuildCacheDirectory on your IIl2CppPlatformProvider.");
561+
559562
var il2CppNativeCodeBuilder = m_PlatformProvider.CreateIl2CppNativeCodeBuilder();
560563
if (il2CppNativeCodeBuilder != null)
561564
{
562565
Il2CppNativeCodeBuilderUtils.ClearAndPrepareCacheDirectory(il2CppNativeCodeBuilder);
563566

564-
var buildCacheNativeOutputFile = Path.Combine(GetNativeOutputDirectory(m_PlatformProvider.il2cppBuildCacheDirectory), m_PlatformProvider.nativeLibraryFileName);
567+
var buildCacheDirectory = m_PlatformProvider.il2cppBuildCacheDirectory;
568+
Directory.CreateDirectory(buildCacheDirectory);
569+
570+
var buildCacheNativeOutputFile = Path.Combine(GetNativeOutputDirectory(buildCacheDirectory), m_PlatformProvider.nativeLibraryFileName);
565571
var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(m_PlatformProvider.target);
566572
var compilerConfiguration = PlayerSettings.GetIl2CppCompilerConfiguration(buildTargetGroup);
567573
var arguments = Il2CppNativeCodeBuilderUtils.AddBuilderArguments(il2CppNativeCodeBuilder, buildCacheNativeOutputFile, m_PlatformProvider.includePaths, m_PlatformProvider.libraryPaths, compilerConfiguration).ToList();
@@ -750,7 +756,10 @@ void SetupTundraAndStartInfo(ProcessStartInfo startInfo)
750756
// Copy IL2CPP outputs to StagingArea
751757
var nativeOutputDirectoryInBuildCache = GetNativeOutputDirectory(m_PlatformProvider.il2cppBuildCacheDirectory);
752758
if (Directory.Exists(nativeOutputDirectoryInBuildCache))
753-
FileUtil.CopyDirectoryRecursive(nativeOutputDirectoryInBuildCache, GetNativeOutputDirectory(m_StagingAreaData));
759+
{
760+
var outputDirectory = GetNativeOutputDirectory(m_StagingAreaData);
761+
FileUtil.CopyDirectoryRecursive(nativeOutputDirectoryInBuildCache, outputDirectory, true);
762+
}
754763

755764
// Copy Generated C++ files and Data directory to StagingArea.
756765
// This directory will only be present when using "--convert-to-cpp" with IL2CPP.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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.Collections.Generic;
6+
using System.IO;
7+
using UnityEditor.Build.Player;
8+
using UnityEditor.VisualStudioIntegration;
9+
using UnityEngine;
10+
11+
namespace UnityEditor
12+
{
13+
internal class BuildPlayerDataExtractor
14+
{
15+
private readonly IDirectoryIO m_DirectoryIO;
16+
private readonly IFileIO m_FileIO;
17+
18+
public BuildPlayerDataExtractor(IDirectoryIO mDirectoryIo, IFileIO mFileIo)
19+
{
20+
m_DirectoryIO = mDirectoryIo;
21+
m_FileIO = mFileIo;
22+
}
23+
24+
public BuildPlayerDataExtractor()
25+
{
26+
m_DirectoryIO = new DirectoryIOProvider();
27+
m_FileIO = new FileIOProvider();
28+
}
29+
30+
public AssemblyInfoManaged[] ExtractAssemblyTypeInfo(bool isEditor)
31+
{
32+
var buildPlayerDataGeneratorHelper = new BuildPlayerDataGenerator(new BuildPlayerDataGeneratorProcess(), new DirectoryIOProvider());
33+
return ExtractAssemblyTypeInfoFromFiles(buildPlayerDataGeneratorHelper.GetTypeDbFilePaths(isEditor));
34+
}
35+
36+
public AssemblyInfoManaged[] ExtractAssemblyTypeInfoFromFiles(string[] typeDbJsonPaths)
37+
{
38+
List<AssemblyInfoManaged> assemblyInfoResults = new List<AssemblyInfoManaged>(typeDbJsonPaths.Length);
39+
foreach (var typeDbFile in typeDbJsonPaths)
40+
{
41+
var assemblyInfos = JsonUtility.FromJson<ExtractRoot<AssemblyInfoManaged>>(File.ReadAllText(typeDbFile));
42+
assemblyInfoResults.AddRange(assemblyInfos.root);
43+
}
44+
return assemblyInfoResults.ToArray();
45+
}
46+
47+
public void ExtractPlayerRuntimeInitializeOnLoadMethods(string jsonPath)
48+
{
49+
m_DirectoryIO.CreateDirectory(jsonPath);
50+
51+
var path = Path.Combine(BuildPlayerDataGenerator.OutputPath, "Player");
52+
var sourceRuntimeInitializeOnLoads = Path.Combine(path, "RuntimeInitializeOnLoads.json");
53+
if (!m_DirectoryIO.Exists(path) || !m_FileIO.Exists(sourceRuntimeInitializeOnLoads))
54+
{
55+
return;
56+
}
57+
58+
m_FileIO.Copy(sourceRuntimeInitializeOnLoads, Path.Combine(jsonPath, "RuntimeInitializeOnLoads.json"), true);
59+
}
60+
}
61+
}

Editor/Mono/BuildPlayerWindow.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public GUIContent GetDownloadErrorForTarget(BuildTarget target)
6666
public GUIContent autoconnectProfilerDisabled = EditorGUIUtility.TrTextContent("Autoconnect Profiler", "Profiling is only enabled in a Development Player.");
6767
public GUIContent buildWithDeepProfiler = EditorGUIUtility.TrTextContent("Deep Profiling Support", "Build Player with Deep Profiling Support. This might affect Player performance.");
6868
public GUIContent buildWithDeepProfilerDisabled = EditorGUIUtility.TrTextContent("Deep Profiling", "Profiling is only enabled in a Development Player.");
69-
public GUIContent allowDebugging = EditorGUIUtility.TrTextContent("Script Debugging");
69+
public GUIContent allowDebugging = EditorGUIUtility.TrTextContent("Script Debugging", "Enable this setting to allow your script code to be debugged.");
7070
public GUIContent waitForManagedDebugger = EditorGUIUtility.TrTextContent("Wait For Managed Debugger", "Show a dialog where you can attach a managed debugger before any script execution.");
7171
public GUIContent explicitNullChecks = EditorGUIUtility.TrTextContent("Explicit Null Checks");
7272
public GUIContent explicitDivideByZeroChecks = EditorGUIUtility.TrTextContent("Divide By Zero Checks");
@@ -91,7 +91,7 @@ public GUIContent GetDownloadErrorForTarget(BuildTarget target)
9191

9292

9393
Vector2 scrollPosition = new Vector2(0, 0);
94-
94+
Vector2 buildTargetSettingsScrollPosition = new Vector2(0, 0);
9595
private const string kEditorBuildSettingsPath = "ProjectSettings/EditorBuildSettings.asset";
9696

9797
static Styles styles = null;
@@ -155,7 +155,7 @@ void ActiveScenesGUI()
155155
Rect scenesInBuildRect = GUILayoutUtility.GetRect(styles.scenesInBuild, styles.title);
156156
GUI.Label(scenesInBuildRect, styles.scenesInBuild, styles.title);
157157

158-
Rect rect = GUILayoutUtility.GetRect(0, position.width, 0, position.height);
158+
Rect rect = GUILayoutUtility.GetRect(0, position.width, 0, position.height, GUILayout.MinHeight(20));
159159
m_TreeView.OnGUI(rect);
160160
}
161161

@@ -363,7 +363,7 @@ void OnGUI()
363363

364364
GUILayout.Space(10);
365365

366-
GUILayout.BeginHorizontal(GUILayout.Height(351));
366+
GUILayout.BeginHorizontal(GUILayout.Height(400));
367367
ActiveBuildTargetsGUI();
368368
GUILayout.Space(10);
369369
GUILayout.BeginVertical();
@@ -486,7 +486,7 @@ static bool IsVirtualTexturingSettingsValid(BuildPlatform platform)
486486
};
487487
static public string GetPlaybackEngineDownloadURL(string moduleName)
488488
{
489-
if (moduleName == "PS4" || moduleName == "XboxOne")
489+
if (moduleName == "PS4" || moduleName == "XboxOne" || moduleName == "GameCoreXboxOne" || moduleName == "GameCoreScarlett")
490490
return "https://unity3d.com/platform-installation";
491491

492492
string fullVersion = InternalEditorUtility.GetFullUnityVersion();
@@ -709,6 +709,8 @@ void ShowBuildTargetSettings()
709709
return;
710710
}
711711

712+
buildTargetSettingsScrollPosition = GUILayout.BeginScrollView(buildTargetSettingsScrollPosition);
713+
712714
// FIXME: WHY IS THIS ALL IN ONE FUNCTION?!
713715
// Draw the side bar to the right. Different options like specific Standalone player to build, profiling and debugging options, etc.
714716
string module = ModuleManager.GetTargetStringFrom(platform.targetGroup, buildTarget);
@@ -861,6 +863,8 @@ void ShowBuildTargetSettings()
861863
GUILayout.EndHorizontal();
862864
}
863865

866+
GUILayout.EndScrollView();
867+
864868
GUIBuildButtons(buildWindowExtension, enableBuildButton, enableBuildAndRunButton,
865869
canInstallInBuildFolder, platform);
866870
}

0 commit comments

Comments
 (0)