From 6419c8742b5fa6df0f12a11e1a1554cb34168538 Mon Sep 17 00:00:00 2001 From: Ely Ronnen Date: Tue, 24 Oct 2023 17:52:12 +0300 Subject: [PATCH 1/4] fix android sdkmanager invocation (#582) Fix "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema" error caused by invoking the wrongf sdkmanager script --- dist/platforms/ubuntu/steps/build.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dist/platforms/ubuntu/steps/build.sh b/dist/platforms/ubuntu/steps/build.sh index a066e4ed..7a202bab 100755 --- a/dist/platforms/ubuntu/steps/build.sh +++ b/dist/platforms/ubuntu/steps/build.sh @@ -69,7 +69,15 @@ fi if [[ "$BUILD_TARGET" == "Android" && -n "$ANDROID_SDK_MANAGER_PARAMETERS" ]]; then echo "Updating Android SDK with parameters: $ANDROID_SDK_MANAGER_PARAMETERS" export JAVA_HOME="$(awk -F'=' '/JAVA_HOME=/{print $2}' /usr/bin/unity-editor.d/*)" - "$(awk -F'=' '/ANDROID_HOME=/{print $2}' /usr/bin/unity-editor.d/*)/tools/bin/sdkmanager" "$ANDROID_SDK_MANAGER_PARAMETERS" + ANDROID_HOME_DIRECTORY="$(awk -F'=' '/ANDROID_HOME=/{print $2}' /usr/bin/unity-editor.d/*)" + SDKMANAGER=$(find $ANDROID_HOME_DIRECTORY/cmdline-tools -name sdkmanager) + if [ -z "${SDKMANAGER}" ] + then + echo "No sdkmanager found" + exit 1 + fi + + $SDKMANAGER "$ANDROID_SDK_MANAGER_PARAMETERS" echo "Updated Android SDK." else echo "Not updating Android SDK." From 4c4611c0210278e7f182a06c92786b307158806b Mon Sep 17 00:00:00 2001 From: Andrew Kahr <22359829+AndrewKahr@users.noreply.github.com> Date: Sat, 28 Oct 2023 12:21:10 -0700 Subject: [PATCH 2/4] Feature/windows upgrades (#588) - Allow updating container memory and cpu limits for Windows. Previously, they defaulted to 1cpu and 1gb ram which was far too low and it seems docker wouldn't allocate all available resources. Now it will use all available cores and 80% of system memory. - Allow setting docker isolation mode for windows. Defaults to default to ensure behavior doesn't change from prior versions but now you can do stuff like force process mode on non-server versions which grants a performance uplift during runs - Added logic to allow building Android on Windows. Android doesn't support burst when built on Linux, only on Windows and macOS. Thus we need to allow building Android on WIndows due to the major performance benefits of Burst. - Support Windows 2022 and VS2022 by mounting the x64 Visual Studio path in addition to the x86 path to maintain compatibility with VS2019 and older - Attempted fixes for windows builds hanging by killing the regsvr32 process after registering VS dll and using a different method to launch Unity. Unsure if this is a definite fix so I am leaving in several debug calls to print out running processes so we have more data to work with on chasing down this bug. I suspect there's a process that's hanging around that isn't cleaning itself up or is getting into some kind of deadlock situation and needs to be killed. But the changes I've made have seen no hangs on building during docker test workflows when previously there would be at least 3-5 hanging builds. --- .vscode/launch.json | 7 ++ action.yml | 18 ++++ dist/index.js | Bin 22170784 -> 22172464 bytes dist/index.js.map | Bin 14627568 -> 14641999 bytes dist/platforms/windows/build.ps1 | 117 +++++++++++++++++--------- dist/platforms/windows/entrypoint.ps1 | 10 ++- src/index.ts | 7 +- src/model/build-parameters.ts | 12 ++- src/model/docker.ts | 19 ++++- src/model/input.ts | 30 +++++++ 10 files changed, 174 insertions(+), 46 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 9c7be0a5..ade9bd7b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,5 +1,12 @@ { "configurations": [ + { + "name": "PowerShell Launch Current File", + "type": "PowerShell", + "request": "launch", + "script": "${file}", + "cwd": "${cwd}" + }, { "type": "node", "request": "launch", diff --git a/action.yml b/action.yml index ef48e8c2..2ada25e6 100644 --- a/action.yml +++ b/action.yml @@ -106,6 +106,24 @@ inputs: default: '' description: 'User and optionally group (user or user:group or uid:gid) to give ownership of the resulting build artifacts' + dockerCpuLimit: + required: false + default: '' + description: 'Number of CPU cores to assign the docker container. Defaults to all available cores on all platforms.' + dockerMemoryLimit: + required: false + default: '' + description: + 'Amount of memory to assign the docker container. Defaults to 95% of total system memory rounded down to the + nearest megabyte on Linux and 80% on Windows. On unrecognized platforms, defaults to 75% of total system memory. + To manually specify a value, use the format , where unit is either m or g. ie: 512m = 512 megabytes' + dockerIsolationMode: + required: false + default: 'default' + description: + 'Isolation mode to use for the docker container. Can be one of process, hyperv, or default. Default will pick the + default mode as described by Microsoft where server versions use process and desktop versions use hyperv. Only + applicable on Windows' allowDirtyBuild: required: false default: '' diff --git a/dist/index.js b/dist/index.js index 9c38ab9a4a1f029e5c7d868a1ef046fee08cbb15..b6f1c1bddce593d5fd09fdd2d6b3f44f48c29437 100644 GIT binary patch delta 2616 zcmb`{d05kR9Ki8s><7xc@E8N}*c4^sm~0-1cp-|S;*phE7EGBs9SmWVreN1`LcT@(EtUqPnNtI8`@8&$<|z1Glfw@)bXc=Oa&hb5{kcZH@Z)+~=z z5t|JyRmFgiuDekp5!X=`t8BT6Ak8C zKh?*w-TA(vng4lttyAjUA*Jf^S;aoDOJG*O z5R#gB@o_clSo43a(`#M|nnq%PF?9%0V`H=gwJ=7@Qj21=s6b(ic1Ab%e;8x^`FLuU z`qGqw22|^Uz__-WWnNeTTax2bx^!K9Xi9Pqhf}#$>C@CmS6G9L`CwRUpX=JoclEWKkZ zResK-rDPRkyC=IQ%=Ej>eawzzXE$?v)vvTm`{#B0&DFb?%^TTM==HdZ($xB}eMVi5 zI((t6No9;_)LivHx-V2EG|{3=bx-ET$@bLl$}wzjf@+i=7G?a$GnB=$ptDN0t}{iO z>pigQ9w}A#u&8CH_ZU`gFg2W;B_A^TWVgTS59`H6s`X~6UZ>pHS=lcC6#FEv&sSu% z)?YTi&+qawD67rf#Vl)4e0f=HEJ)q)+UDfv+R_YVgLW7rs@L}N=C9nM#aZgU$lg~E zCGO()L0RRoRw{P7-mG#H^;&6WK!hR;4bTwbFrX0{qY0X#86waeEzlCJU_>NLh(a`4 zBL;2I7VXd;W?0Yx9TAI8=!`g6VM9C;kccGM(FMtHz=^KthVJNr6!b(YdLa$H(Fc9e z5B-sj0m#5W3_>ObV+gV^6vHqa*%*P57=_We0%LF`uENzAi)%0r*Wx;i$Mv`YImm?z z6EG2ZaAOiCV+uT&ifQm79|iEC5YthFV)#*l8*vk6U?y(HEX>9n+=98d6}Mp?=HqrO zz#S;XLM+0aSd6=HH+8wTzR_+ef z`AS_UcjH;?!CvgcepKK&JdYRfB3{DFcm=QG0A9oEcmoIVCf>p!9LC!?f_LyP-osHG z!}~an5AY#A!U=qgPf&@I_!OVvb9{j>aSC7IYkY%maT;fE7U%FCzQ+$Zk00?9e#S5O z6~EyEe#am96MrpsozyLbBt)W@Xp&G#n52QEp(I>lkTjAsmNbzxl{Aw?NSaGpNLor- zNsN+6iAfSAiI%jM#7Npm+Dh6<+Dpt5i=>03qa;?+Nzz#oC$UOwl6XmiBvFziu}iv0 zk|hp_Q_@w^P10S`Ly{utDM^*|lB7v`OZrIqO8QCqOVT9+BpH%{l0lM8$zaJ4NtR@& ZWSC^QBwI21x8HSgw65ROzX6+PQd|H4 delta 1555 zcmWm6cU+VO0Eh9<9WQVk2%@6r!3p93#f2v)4%~a5BU>&|oLGX=bfp!pax`AGEFwj% z6wL9uaH2-8a+aE9<)9R`o%{Ly@qPY$iVMq}`OC|k#g{|OQEs~@A|rQv)@XlvPWq(G zshK%b%DOO=M3b6)ju@0Z%b9{mI*nlDwV-xQlzZj|X^&M++R~wnb3vN`PW0fl81PtT>bq#i@iUVM-+>T!~OBE0IbSrK(a* ziBhU7H58XpQ*kTNN{r%BYALZwoKjnfSL!Hrm3m5jB|%A48Ym5wB&CtkSZSg(RhlWu zN^`}lv`|tMpVCrERaz;nl{QLSB~59kv{yPP9hFW>XQhkMRq3X5S9&Ntm0n73rH|5A S>8JEp{I)%g@&UHQ36B9DwZOpu diff --git a/dist/index.js.map b/dist/index.js.map index ca610bdb162f2b702291484db2d531f58f910ae6..6379d2f22a59c0503b253c2e8efb473fe0f39e51 100644 GIT binary patch delta 59637 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 delta 54691 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 z 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 diff --git a/dist/platforms/windows/build.ps1 b/dist/platforms/windows/build.ps1 index 50ae2795..bbae3d21 100644 --- a/dist/platforms/windows/build.ps1 +++ b/dist/platforms/windows/build.ps1 @@ -66,6 +66,26 @@ else Get-ChildItem -Path $Env:UNITY_PROJECT_PATH\Assets\Editor -Recurse } +if ( "$Env:BUILD_TARGET" -eq "Android" -and -not ([string]::IsNullOrEmpty("$Env:ANDROID_KEYSTORE_BASE64")) ) +{ + Write-Output "Creating Android keystore." + + # Write to consistent location as Windows Unity seems to have issues with pwd and can't find the keystore + $keystorePath = "C:/android.keystore" + [System.IO.File]::WriteAllBytes($keystorePath, [System.Convert]::FromBase64String($Env:ANDROID_KEYSTORE_BASE64)) + + # Ensure the project settings are pointed at the correct path + $unitySettingsPath = "$Env:UNITY_PROJECT_PATH\ProjectSettings\ProjectSettings.asset" + $fileContent = Get-Content -Path "$unitySettingsPath" + $fileContent = $fileContent -replace "AndroidKeystoreName:\s+.*", "AndroidKeystoreName: $keystorePath" + $fileContent | Set-Content -Path "$unitySettingsPath" + + Write-Output "Created Android keystore." +} +else { + Write-Output "Not creating Android keystore." +} + # # Pre-build debug information # @@ -112,48 +132,63 @@ Write-Output "" # If $Env:CUSTOM_PARAMETERS contains spaces and is passed directly on the command line to Unity, powershell will wrap it # in double quotes. To avoid this, parse $Env:CUSTOM_PARAMETERS into an array, while respecting any quotations within the string. $_, $customParametersArray = Invoke-Expression('Write-Output -- "" ' + $Env:CUSTOM_PARAMETERS) +$unityArgs = @( + "-quit", + "-batchmode", + "-nographics", + "-silent-crashes", + "-projectPath", $Env:UNITY_PROJECT_PATH, + "-executeMethod", $Env:BUILD_METHOD, + "-buildTarget", $Env:BUILD_TARGET, + "-customBuildTarget", $Env:BUILD_TARGET, + "-customBuildPath", $Env:CUSTOM_BUILD_PATH, + "-buildVersion", $Env:VERSION, + "-androidVersionCode", $Env:ANDROID_VERSION_CODE, + "-androidKeystorePass", $Env:ANDROID_KEYSTORE_PASS, + "-androidKeyaliasName", $Env:ANDROID_KEYALIAS_NAME, + "-androidKeyaliasPass", $Env:ANDROID_KEYALIAS_PASS, + "-androidTargetSdkVersion", $Env:ANDROID_TARGET_SDK_VERSION, + "-androidExportType", $Env:ANDROID_EXPORT_TYPE, + "-androidSymbolType", $Env:ANDROID_SYMBOL_TYPE, + "-logfile", "-" +) + $customParametersArray -& "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -quit -batchmode -nographics ` - -projectPath $Env:UNITY_PROJECT_PATH ` - -executeMethod $Env:BUILD_METHOD ` - -buildTarget $Env:BUILD_TARGET ` - -customBuildTarget $Env:BUILD_TARGET ` - -customBuildPath $Env:CUSTOM_BUILD_PATH ` - -buildVersion $Env:VERSION ` - -androidVersionCode $Env:ANDROID_VERSION_CODE ` - -androidKeystoreName $Env:ANDROID_KEYSTORE_NAME ` - -androidKeystorePass $Env:ANDROID_KEYSTORE_PASS ` - -androidKeyaliasName $Env:ANDROID_KEYALIAS_NAME ` - -androidKeyaliasPass $Env:ANDROID_KEYALIAS_PASS ` - -androidTargetSdkVersion $Env:ANDROID_TARGET_SDK_VERSION ` - -androidExportType $Env:ANDROID_EXPORT_TYPE ` - -androidSymbolType $Env:ANDROID_SYMBOL_TYPE ` - $customParametersArray ` - -logfile | Out-Host +# Remove null items as that will fail the Start-Process call +$unityArgs = $unityArgs | Where-Object { $_ -ne $null } -# Catch exit code -$Env:BUILD_EXIT_CODE=$LastExitCode +$process = Start-Process -FilePath "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" ` + -ArgumentList $unityArgs ` + -PassThru ` + -NoNewWindow -# Display results -if ($Env:BUILD_EXIT_CODE -eq 0) -{ - Write-Output "Build Succeeded!" -} else -{ - Write-Output "$('Build failed, with exit code ')$($Env:BUILD_EXIT_CODE)$('"')" +while (!$process.HasExited) { + if ($process.HasExited) { + Get-Process + + Start-Sleep -Seconds 10 + + Get-Process + + # Display results + if ($process.ExitCode -eq 0) + { + Write-Output "Build Succeeded!!" + } else + { + Write-Output "$('Build failed, with exit code ')$($process.ExitCode)$('"')" + } + + Write-Output "" + Write-Output "###########################" + Write-Output "# Build output #" + Write-Output "###########################" + Write-Output "" + + Get-ChildItem $Env:BUILD_PATH_FULL + Write-Output "" + + exit $process.ExitCode + } + + Start-Sleep -Seconds 5 } - -# TODO: Determine if we need to set permissions on any files - -# -# Results -# - -Write-Output "" -Write-Output "###########################" -Write-Output "# Build output #" -Write-Output "###########################" -Write-Output "" - -Get-ChildItem $Env:BUILD_PATH_FULL -Write-Output "" diff --git a/dist/platforms/windows/entrypoint.ps1 b/dist/platforms/windows/entrypoint.ps1 index f0a6b555..fb3ccc10 100644 --- a/dist/platforms/windows/entrypoint.ps1 +++ b/dist/platforms/windows/entrypoint.ps1 @@ -1,10 +1,15 @@ +Get-Process + # Import any necessary registry keys, ie: location of windows 10 sdk # No guarantee that there will be any necessary registry keys, ie: tvOS -Get-ChildItem -Path c:\regkeys -File | Foreach {reg import $_.fullname} +Get-ChildItem -Path c:\regkeys -File | ForEach-Object {reg import $_.fullname} # Register the Visual Studio installation so Unity can find it regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.Setup.Configuration.Native.dll +# Kill the regsvr process +Get-Process -Name regsvr32 | ForEach-Object { Stop-Process -Id $_.Id -Force } + # Setup Git Credentials & "c:\steps\set_gitcredential.ps1" @@ -16,3 +21,6 @@ regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio. # Free the seat for the activated license & "c:\steps\return_license.ps1" + +Start-Sleep 3 +Get-Process diff --git a/src/index.ts b/src/index.ts index 3f621d8e..2457eb1d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,7 +25,11 @@ async function runMain() { if (process.platform === 'darwin') { MacBuilder.run(actionFolder); } else { - await Docker.run(baseImage.toString(), { workspace, actionFolder, ...buildParameters }); + await Docker.run(baseImage.toString(), { + workspace, + actionFolder, + ...buildParameters, + }); } } else { await CloudRunner.run(buildParameters, baseImage.toString()); @@ -38,4 +42,5 @@ async function runMain() { core.setFailed((error as Error).message); } } + runMain(); diff --git a/src/model/build-parameters.ts b/src/model/build-parameters.ts index bd5f9103..8c322124 100644 --- a/src/model/build-parameters.ts +++ b/src/model/build-parameters.ts @@ -40,6 +40,9 @@ class BuildParameters { public androidSdkManagerParameters!: string; public androidExportType!: string; public androidSymbolType!: string; + public dockerCpuLimit!: string; + public dockerMemoryLimit!: string; + public dockerIsolationMode!: string; public customParameters!: string; public sshAgent!: string; @@ -116,10 +119,12 @@ class BuildParameters { if (!Input.unitySerial && GitHub.githubInputEnabled) { // No serial was present, so it is a personal license that we need to convert if (!Input.unityLicense) { - throw new Error(`Missing Unity License File and no Serial was found. If this + throw new Error( + `Missing Unity License File and no Serial was found. If this is a personal license, make sure to follow the activation steps and set the UNITY_LICENSE GitHub secret or enter a Unity - serial number inside the UNITY_SERIAL GitHub secret.`); + serial number inside the UNITY_SERIAL GitHub secret.`, + ); } unitySerial = this.getSerialFromLicenseFile(Input.unityLicense); } else { @@ -156,6 +161,9 @@ class BuildParameters { sshPublicKeysDirectoryPath: Input.sshPublicKeysDirectoryPath, gitPrivateToken: Input.gitPrivateToken || (await GithubCliReader.GetGitHubAuthToken()), chownFilesTo: Input.chownFilesTo, + dockerCpuLimit: Input.dockerCpuLimit, + dockerMemoryLimit: Input.dockerMemoryLimit, + dockerIsolationMode: Input.dockerIsolationMode, providerStrategy: CloudRunnerOptions.providerStrategy, buildPlatform: CloudRunnerOptions.buildPlatform, kubeConfig: CloudRunnerOptions.kubeConfig, diff --git a/src/model/docker.ts b/src/model/docker.ts index 24b93ab5..aec955bc 100644 --- a/src/model/docker.ts +++ b/src/model/docker.ts @@ -48,6 +48,8 @@ class Docker { sshPublicKeysDirectoryPath, gitPrivateToken, dockerWorkspacePath, + dockerCpuLimit, + dockerMemoryLimit, } = parameters; const githubHome = path.join(runnerTempPath, '_github_home'); @@ -72,6 +74,8 @@ class Docker { --volume "${actionFolder}/platforms/ubuntu/steps:/steps:z" \ --volume "${actionFolder}/platforms/ubuntu/entrypoint.sh:/entrypoint.sh:z" \ --volume "${actionFolder}/unity-config:/usr/share/unity3d/config/:z" \ + --cpus=${dockerCpuLimit} \ + --memory=${dockerMemoryLimit} \ ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ ${ sshAgent && !sshPublicKeysDirectoryPath @@ -86,7 +90,16 @@ class Docker { } static getWindowsCommand(image: string, parameters: DockerParameters): string { - const { workspace, actionFolder, unitySerial, gitPrivateToken, dockerWorkspacePath } = parameters; + const { + workspace, + actionFolder, + unitySerial, + gitPrivateToken, + dockerWorkspacePath, + dockerCpuLimit, + dockerMemoryLimit, + dockerIsolationMode, + } = parameters; return `docker run \ --workdir c:${dockerWorkspacePath} \ @@ -97,12 +110,16 @@ class Docker { ${gitPrivateToken ? `--env GIT_PRIVATE_TOKEN="${gitPrivateToken}"` : ''} \ --volume "${workspace}":"c:${dockerWorkspacePath}" \ --volume "c:/regkeys":"c:/regkeys" \ + --volume "C:/Program Files/Microsoft Visual Studio":"C:/Program Files/Microsoft Visual Studio" \ --volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \ --volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \ --volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio" \ --volume "${actionFolder}/default-build-script":"c:/UnityBuilderAction" \ --volume "${actionFolder}/platforms/windows":"c:/steps" \ --volume "${actionFolder}/BlankProject":"c:/BlankProject" \ + --cpus=${dockerCpuLimit} \ + --memory=${dockerMemoryLimit} \ + --isolation=${dockerIsolationMode} \ ${image} \ powershell c:/steps/entrypoint.ps1`; } diff --git a/src/model/input.ts b/src/model/input.ts index f50b0633..94a0f2b4 100644 --- a/src/model/input.ts +++ b/src/model/input.ts @@ -4,6 +4,7 @@ import { Cli } from './cli/cli'; import CloudRunnerQueryOverride from './cloud-runner/options/cloud-runner-query-override'; import Platform from './platform'; import GitHub from './github'; +import os from 'node:os'; import * as core from '@actions/core'; @@ -226,6 +227,35 @@ class Input { return Input.getInput('dockerWorkspacePath') || '/github/workspace'; } + static get dockerCpuLimit(): string { + return Input.getInput('dockerCpuLimit') || os.cpus().length.toString(); + } + + static get dockerMemoryLimit(): string { + const bytesInMegabyte = 1024 * 1024; + + let memoryMultiplier; + switch (os.platform()) { + case 'linux': + memoryMultiplier = 0.95; + break; + case 'win32': + memoryMultiplier = 0.8; + break; + default: + memoryMultiplier = 0.75; + break; + } + + return ( + Input.getInput('dockerMemoryLimit') || `${Math.floor((os.totalmem() / bytesInMegabyte) * memoryMultiplier)}m` + ); + } + + static get dockerIsolationMode(): string { + return Input.getInput('dockerIsolationMode') || 'default'; + } + public static ToEnvVarFormat(input: string) { if (input.toUpperCase() === input) { return input; From 7afabe74da5227a9ecd537f5260b398258c3eb3b Mon Sep 17 00:00:00 2001 From: Andrew Kahr <22359829+AndrewKahr@users.noreply.github.com> Date: Mon, 30 Oct 2023 23:55:39 -0700 Subject: [PATCH 3/4] Additional Windows Image Updates (#589) * Update workflows, bump image version for docker * Fix Unity pathing and cleanup scripts * Fix Unity pathing * Fix activation scripts --- .github/pull_request_template.md | 12 +++++-- .github/workflows/activation.yml | 2 +- .github/workflows/build-tests-mac.yml | 12 +++---- .github/workflows/build-tests-ubuntu.yml | 16 +++------ .github/workflows/build-tests-windows.yml | 13 ++++--- .github/workflows/cleanup.yml | 4 +-- .../workflows/cloud-runner-ci-pipeline.yml | 6 ++-- .github/workflows/integrity-check.yml | 4 +-- dist/index.js | Bin 22172464 -> 22172464 bytes dist/index.js.map | Bin 14641999 -> 14642005 bytes dist/platforms/windows/activate.ps1 | 19 ++++++---- dist/platforms/windows/build.ps1 | 4 +-- dist/platforms/windows/entrypoint.ps1 | 3 +- dist/platforms/windows/return_license.ps1 | 19 ++++++---- src/model/image-tag.test.ts | 33 ++++++++++++------ src/model/image-tag.ts | 8 +++-- 16 files changed, 91 insertions(+), 64 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d7aa5408..9eb8d367 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,13 +2,21 @@ - ... +#### Related Issues + +- ... + +#### Related PRs + +- ... + #### Checklist - [x] Read the contribution [guide](https://github.com/game-ci/unity-builder/blob/main/CONTRIBUTING.md) and accept the [code](https://github.com/game-ci/unity-builder/blob/main/CODE_OF_CONDUCT.md) of conduct -- [ ] Docs (If new inputs or outputs have been added or changes to behavior that should be documented. Please make - a PR in the [documentation repo](https://github.com/game-ci/documentation)) +- [ ] Docs (If new inputs or outputs have been added or changes to behavior that should be documented. Please make a PR + in the [documentation repo](https://github.com/game-ci/documentation)) - [ ] Readme (updated or not needed) - [ ] Tests (added, updated or not needed) diff --git a/.github/workflows/activation.yml b/.github/workflows/activation.yml index 7299db23..2ceef255 100644 --- a/.github/workflows/activation.yml +++ b/.github/workflows/activation.yml @@ -13,7 +13,7 @@ jobs: id: requestActivationFile uses: game-ci/unity-request-activation-file@v2.0-alpha-1 - name: Upload activation file - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ steps.requestActivationFile.outputs.filePath }} path: ${{ steps.requestActivationFile.outputs.filePath }} diff --git a/.github/workflows/build-tests-mac.yml b/.github/workflows/build-tests-mac.yml index b3e1cf4d..860fb1ea 100644 --- a/.github/workflows/build-tests-mac.yml +++ b/.github/workflows/build-tests-mac.yml @@ -11,7 +11,7 @@ concurrency: cancel-in-progress: true jobs: - buildForAllPlatformsWindows: + buildForAllPlatformsMacOS: name: ${{ matrix.targetPlatform }} on ${{ matrix.unityVersion }} runs-on: macos-latest strategy: @@ -20,11 +20,9 @@ jobs: projectPath: - test-project unityVersion: - - 2021.3.29f1 - - 2022.1.24f1 - - 2022.2.21f1 - - 2022.3.7f1 - - 2023.1.8f1 + - 2021.3.31f1 + - 2022.3.11f1 + - 2023.1.17f1 targetPlatform: - StandaloneOSX # Build a MacOS executable @@ -32,7 +30,7 @@ jobs: ########################### # Checkout # ########################### - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true diff --git a/.github/workflows/build-tests-ubuntu.yml b/.github/workflows/build-tests-ubuntu.yml index 265126cf..60ddfdcf 100644 --- a/.github/workflows/build-tests-ubuntu.yml +++ b/.github/workflows/build-tests-ubuntu.yml @@ -52,11 +52,9 @@ jobs: projectPath: - test-project unityVersion: - - 2021.3.29f1 - - 2022.1.24f1 - - 2022.2.21f1 - - 2022.3.7f1 - - 2023.1.8f1 + - 2021.3.31f1 + - 2022.3.11f1 + - 2023.1.17f1 targetPlatform: - StandaloneOSX # Build a macOS standalone (Intel 64-bit) with mono backend. - StandaloneWindows64 # Build a Windows 64-bit standalone with mono backend. @@ -64,17 +62,11 @@ jobs: - iOS # Build an iOS player. - Android # Build an Android .apk. - WebGL # WebGL. - # - StandaloneWindows # Build a Windows standalone. - # - WSAPlayer # Build an Windows Store Apps player. - # - PS4 # Build a PS4 Standalone. - # - XboxOne # Build a Xbox One Standalone. - # - tvOS # Build to Apple's tvOS platform. - # - Switch # Build a Nintendo Switch player steps: ########################### # Checkout # ########################### - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true diff --git a/.github/workflows/build-tests-windows.yml b/.github/workflows/build-tests-windows.yml index 02dae84b..8c0e6e3c 100644 --- a/.github/workflows/build-tests-windows.yml +++ b/.github/workflows/build-tests-windows.yml @@ -13,19 +13,18 @@ concurrency: jobs: buildForAllPlatformsWindows: name: ${{ matrix.targetPlatform }} on ${{ matrix.unityVersion }} - runs-on: windows-2019 + runs-on: windows-2022 strategy: fail-fast: false matrix: projectPath: - test-project unityVersion: - - 2021.3.29f1 - - 2022.1.24f1 - - 2022.2.21f1 - - 2022.3.7f1 - - 2023.1.8f1 + - 2021.3.31f1 + - 2022.3.11f1 + - 2023.1.17f1 targetPlatform: + - Android # Build an Android apk. - StandaloneWindows64 # Build a Windows 64-bit standalone. - StandaloneWindows # Build a Windows 32-bit standalone. - WSAPlayer # Build a UWP App @@ -35,7 +34,7 @@ jobs: ########################### # Checkout # ########################### - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index 48f82d53..c62c2aee 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -15,11 +15,11 @@ jobs: cleanupCloudRunner: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 if: github.event.event_type != 'pull_request_target' with: lfs: true - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: '18' - run: yarn diff --git a/.github/workflows/cloud-runner-ci-pipeline.yml b/.github/workflows/cloud-runner-ci-pipeline.yml index 4704defa..efe186b7 100644 --- a/.github/workflows/cloud-runner-ci-pipeline.yml +++ b/.github/workflows/cloud-runner-ci-pipeline.yml @@ -56,7 +56,7 @@ jobs: #- k8s steps: - name: Checkout (default) - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: lfs: false - name: Configure AWS Credentials @@ -116,7 +116,7 @@ jobs: #- 'cloud-runner-locking-get-locked' steps: - name: Checkout (default) - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: lfs: false - name: Configure AWS Credentials @@ -167,7 +167,7 @@ jobs: - Android # Build an Android .apk. steps: - name: Checkout (default) - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: lfs: false - run: yarn diff --git a/.github/workflows/integrity-check.yml b/.github/workflows/integrity-check.yml index 64e01b29..3c43650b 100644 --- a/.github/workflows/integrity-check.yml +++ b/.github/workflows/integrity-check.yml @@ -16,8 +16,8 @@ jobs: name: Tests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: '18' - run: yarn diff --git a/dist/index.js b/dist/index.js index b6f1c1bddce593d5fd09fdd2d6b3f44f48c29437..6003d75d1b23f3d720d0cbc13e0e12260182ce34 100644 GIT binary patch delta 1440 zcmWmEMN}0407TLAr9lJ?3>p+MKoKRS%K*gg7Q4GeMNv_)ySv5iPVDaP!fru*v$$_P ztI1lGZJCACG(%dxG^6dtxhV#}^t=>fn7|ZfFoy*!VTJs#MgiEs7Ir9zLMV(Put!l8 zLvfUV103N5XSl!>Zg7VON}?1zQ5s$-gR&@x^6-WaDxe~KQ3={#8CBqq00bfk!3aTB zgdz;#h(IKw5RDkbA`bDWhU%z+nn*w*l28lDsEsv=@tA-NOvEHiMkc0UDyCsNW?&{}VK(MqF6LoA7GNP3VKJ6qDVAY5R$wJo zVKvrZE!JT@Hee$*VKcI@1zWKV+pz;Xu?xGg2Yay(`*8pVaR`TT1V?cU$8iEDaSErA zjWallb2yI+xQI)*j4QZ`Yq*XZxQSc1jXSuDd$^AWc!)=Mj3;=CXLybmc!^hdjW>9U zcgVqee85M1!e@NJSA4^F{J>BA!f*URF7ogf|1$DY44F{!DMpI1VxpKTW{SCDp;#(b zN`A#!DWKRWwu+rnP${GoR*ES0N>QblQd}vaI4F*alj5wnD6Wc|;;wioC6!W&r&3z+ zQpzZ0m2ygX#ar=FDkv2dU!{`br&Ly|DE>--5~u_z!AgiyRS8wXlyD_NiBzJLXeCC8 fRpOL*rJ7P*siD+V5|l(GNvWkI8xHX&2EUyDNKY4j delta 1440 zcmWmEMN}0407TLAr9lJ?3>p+MKoKRS%K*gg7Q4GeMNv_)ySv5iPVDaP!fru*v$$_P ztI1lGZJCACG(%dxG^6dtxhaN9>3J!}Fo7w|U=9md!V39ejRLTNE$mPbg-{qpV2`3G zhT3tv=@tA-NOvEHiMkc0UDyCsNW?&{}VK(MqF6LoA7GNP3VKJ6qDVAY5R$wJo zVKvrZE!JT@Hee$*VKcI@1zWKV+pz;Xu?xGg2Yay(`*8pVaR`TT1V?cU$8iEDaSErA zjWallb2yI+xQI)*j4QZ`Yq*XZxQSc1jXSuDd$^AWc!)=Mj3;=CXLybmc!^hdjW>9U zcgVqee85M1!e@NJSA4^F{J>BA!f*URF7ogf|1$DY44F{!DMpI1VxpKTW{SCDp;#(b zN`A#!DWKRWwu+rnP${GoR*ES0N>QblQd}vaI4F*alj5wnD6Wc|;;wioC6!W&r&3z+ zQpzZ0m2ygX#ar=FDkv2dU!{`br&Ly|DE>--5~u_z!AgiyRS8wXlyD_NiBzJLXeCC8 fRpOL*rJ7P*siD+V5|l(GNvWkI8xHX&2EUyDLcY5^~>fmmhDz8Tg%paAE4ekr`yB*0{7L&ziB=Y z7otLnkTRqSsY9BOHbjSXA$`aYGKNecbI201hHN2w$PsdeTp@SJ6Y_?9A%7?k3Wh?V z@TJJ_q^RnNf0802qvI1c6pAFyc@UWt9W^EX*NaGO)Rg5h$q|ZBlwuU81SKg&Y06NR za+Ie66{$pJs!)|`RHp_p)T9=*sY6}rQJ)4hq!Ep2LQ|U2oEEgC6|HGQTiVf{SUS*= zPIRUVUFk-5deD|iIm z*v%gHvXA{7Ac2D%;xI=z$}x^}f|H!$G-o)=InHx|i(KL|S4iY4*SJm+H@L|yZgYpb x+~YnEc*r9j^Mt27<2f%#<|VIq%^TkGj`w`vBcJ%p7rye1@BB!NN&cCC??2JYtCIi# delta 872 zcmWm8Q+F3|007XFw`|ux+s3kO+qS*xm(69{Sgl&NmaUJ_OQ+sCr`yAQzwbZ%P5qMC zkSrt*DMHGSDx?l+LR5$jX+ye@K4b_PL#B{9WC>YAwvavK2suNpkUQiFc|*RCKNJWB z<0HQllT}IhlNcEh6?gAfjT~{AS5%Hpn0G%iAu8_Y^GMreF-Z{$QJ5kWr5MF2K}kwc znlhB79ObD%MJiF5DpaK!)u};EYEhdy)Fp;`)TaRrX+&e1(3EC0rv)u(MQhsd|J{!E zbf6=h=u8*7(v9x)peMcPO&|KwkNyl`AcGjp5QZ|0;f!D;qZrK?#xjoaOkg6Dn9LNW zGL7lXU?#Je%^c=3kNGShmW3>0F@Ys4Wf{v^!Ae%Knl-Ft9qZY^MmDjTEo>!@ZER-; zJK4o<_OO?I?B@UnImBU(aFk;l=L9D?#c9rPmUEov0vCzr5|>Hf3Rk&CBGS|U yJKW_S_j$lW9`TqbJmneBN#X@BdBtnq@RoPH=K~-4#Am+nm2Z4ch)Md9XU{)FjIr(j diff --git a/dist/platforms/windows/activate.ps1 b/dist/platforms/windows/activate.ps1 index 0022dee3..bfaef5c0 100644 --- a/dist/platforms/windows/activate.ps1 +++ b/dist/platforms/windows/activate.ps1 @@ -1,7 +1,14 @@ # Activates Unity -& "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -batchmode -quit -nographics ` - -username $Env:UNITY_EMAIL ` - -password $Env:UNITY_PASSWORD ` - -serial $Env:UNITY_SERIAL ` - -projectPath "c:/BlankProject" ` - -logfile | Out-Host + +Write-Output "" +Write-Output "###########################" +Write-Output "# Activating #" +Write-Output "###########################" +Write-Output "" + +& "$Env:UNITY_PATH/Editor/Unity.exe" -batchmode -quit -nographics ` + -username $Env:UNITY_EMAIL ` + -password $Env:UNITY_PASSWORD ` + -serial $Env:UNITY_SERIAL ` + -projectPath "c:/BlankProject" ` + -logfile - | Out-Host diff --git a/dist/platforms/windows/build.ps1 b/dist/platforms/windows/build.ps1 index bbae3d21..e8727618 100644 --- a/dist/platforms/windows/build.ps1 +++ b/dist/platforms/windows/build.ps1 @@ -156,17 +156,17 @@ $unityArgs = @( # Remove null items as that will fail the Start-Process call $unityArgs = $unityArgs | Where-Object { $_ -ne $null } -$process = Start-Process -FilePath "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" ` +$process = Start-Process -FilePath "$Env:UNITY_PATH\Editor\Unity.exe" ` -ArgumentList $unityArgs ` -PassThru ` -NoNewWindow while (!$process.HasExited) { if ($process.HasExited) { + Start-Sleep -Seconds 5 Get-Process Start-Sleep -Seconds 10 - Get-Process # Display results diff --git a/dist/platforms/windows/entrypoint.ps1 b/dist/platforms/windows/entrypoint.ps1 index fb3ccc10..f156863d 100644 --- a/dist/platforms/windows/entrypoint.ps1 +++ b/dist/platforms/windows/entrypoint.ps1 @@ -1,4 +1,5 @@ Get-Process +Start-Sleep -Seconds 3 # Import any necessary registry keys, ie: location of windows 10 sdk # No guarantee that there will be any necessary registry keys, ie: tvOS @@ -22,5 +23,5 @@ Get-Process -Name regsvr32 | ForEach-Object { Stop-Process -Id $_.Id -Force } # Free the seat for the activated license & "c:\steps\return_license.ps1" -Start-Sleep 3 +Start-Sleep -Seconds 3 Get-Process diff --git a/dist/platforms/windows/return_license.ps1 b/dist/platforms/windows/return_license.ps1 index a60c1a1b..709c3895 100644 --- a/dist/platforms/windows/return_license.ps1 +++ b/dist/platforms/windows/return_license.ps1 @@ -1,7 +1,14 @@ # Return the active Unity license -& "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -batchmode -quit -nographics ` - -username $Env:UNITY_EMAIL ` - -password $Env:UNITY_PASSWORD ` - -returnlicense ` - -projectPath "c:/BlankProject" ` - -logfile | Out-Host + +Write-Output "" +Write-Output "###########################" +Write-Output "# Return License #" +Write-Output "###########################" +Write-Output "" + +& "$Env:UNITY_PATH\Editor\Unity.exe" -batchmode -quit -nographics ` + -username $Env:UNITY_EMAIL ` + -password $Env:UNITY_PASSWORD ` + -returnlicense ` + -projectPath "c:/BlankProject" ` + -logfile - | Out-Host diff --git a/src/model/image-tag.test.ts b/src/model/image-tag.test.ts index a80fe6bb..77934e5d 100644 --- a/src/model/image-tag.test.ts +++ b/src/model/image-tag.test.ts @@ -30,7 +30,11 @@ describe('ImageTag', () => { test.each(['2000.0.0f0', '2011.1.11f1'])('accepts %p version format', (version) => { expect( - () => new ImageTag({ editorVersion: version, targetPlatform: testImageParameters.targetPlatform }), + () => + new ImageTag({ + editorVersion: version, + targetPlatform: testImageParameters.targetPlatform, + }), ).not.toThrow(); }); @@ -46,13 +50,16 @@ describe('ImageTag', () => { describe('toString', () => { it('returns the correct version', () => { - const image = new ImageTag({ editorVersion: '2099.1.1111', targetPlatform: testImageParameters.targetPlatform }); + const image = new ImageTag({ + editorVersion: '2099.1.1111', + targetPlatform: testImageParameters.targetPlatform, + }); switch (process.platform) { case 'win32': - expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2099.1.1111-2`); + expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2099.1.1111-3`); break; case 'linux': - expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2099.1.1111-2`); + expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2099.1.1111-3`); break; } }); @@ -67,27 +74,33 @@ describe('ImageTag', () => { }); it('returns the specific build platform', () => { - const image = new ImageTag({ editorVersion: '2019.2.11f1', targetPlatform: 'WebGL' }); + const image = new ImageTag({ + editorVersion: '2019.2.11f1', + targetPlatform: 'WebGL', + }); switch (process.platform) { case 'win32': - expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-webgl-2`); + expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-webgl-3`); break; case 'linux': - expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-webgl-2`); + expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-webgl-3`); break; } }); it('returns no specific build platform for generic targetPlatforms', () => { - const image = new ImageTag({ editorVersion: '2019.2.11f1', targetPlatform: 'NoTarget' }); + const image = new ImageTag({ + editorVersion: '2019.2.11f1', + targetPlatform: 'NoTarget', + }); switch (process.platform) { case 'win32': - expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-2`); + expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-3`); break; case 'linux': - expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-2`); + expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-3`); break; } }); diff --git a/src/model/image-tag.ts b/src/model/image-tag.ts index 693b84b7..35b4bbeb 100644 --- a/src/model/image-tag.ts +++ b/src/model/image-tag.ts @@ -33,7 +33,7 @@ class ImageTag { this.imagePlatformPrefix = ImageTag.getImagePlatformPrefixes( isCloudRunnerLocal ? process.platform : cloudRunnerBuilderPlatform, ); - this.imageRollingVersion = 2; // Will automatically roll to the latest non-breaking version. + this.imageRollingVersion = 3; // Will automatically roll to the latest non-breaking version. } static get versionPattern(): RegExp { @@ -86,8 +86,10 @@ class ImageTag { if (major >= 2020 || (major === 2019 && minor >= 3)) { return windowsIl2cpp; } else { - throw new Error(`Windows-based builds are only supported on 2019.3.X+ versions of Unity. - If you are trying to build for windows-mono, please use a Linux based OS.`); + throw new Error( + `Windows-based builds are only supported on 2019.3.X+ versions of Unity. + If you are trying to build for windows-mono, please use a Linux based OS.`, + ); } } From caa0a81b47749f53714db4c5d77d6580c33fc3c1 Mon Sep 17 00:00:00 2001 From: Andrew Kahr <22359829+AndrewKahr@users.noreply.github.com> Date: Sun, 12 Nov 2023 05:47:03 -0800 Subject: [PATCH 4/4] License Activation fixes and Github Annotations (#590) * Ensure serial is prioritized * Add compile listener to create github annotations * Update node modules * Don't build ubuntu on PR as secrets are now needed. Update PR template to request an example successful run. Remove 32bit windows build. Build on push to any branch * Update activation to use blank project * Ensure exceptions get annotated as well * More robust console printing * Update test project * Build iOS test on macos to verify burst functionality. Add annotation for license activation error. Fix unity version test. Remove minification from android * Improve license checks * Mask partially redacted serial in addition to full serial * Add retry logic to ubuntu builds * Allow dirty build on retry * Bump unity version --- .github/pull_request_template.md | 4 + .github/workflows/build-tests-mac.yml | 9 +- .github/workflows/build-tests-ubuntu.yml | 60 +- .github/workflows/build-tests-windows.yml | 9 +- .../Reporting/CompileListener.cs | 36 ++ .../Reporting/CompileListener.cs.meta | 11 + dist/index.js | Bin 22172464 -> 22176169 bytes dist/index.js.map | Bin 14642005 -> 14646880 bytes dist/licenses.txt | Bin 302824 -> 301747 bytes dist/platforms/mac/steps/activate.sh | 5 + dist/platforms/ubuntu/steps/activate.sh | 65 +- dist/platforms/ubuntu/steps/return_license.sh | 7 +- dist/platforms/windows/activate.ps1 | 5 + src/model/build-parameters.ts | 6 + src/model/docker.ts | 4 +- src/model/image-environment-factory.ts | 32 +- src/model/unity-versioning.test.ts | 10 +- test-project/.gitignore | 1 + test-project/Assets/LFS_Test_File.jpg.meta | 98 +++ test-project/Assets/Scenes.meta | 2 +- test-project/Assets/Scenes/SampleScene.unity | 300 +-------- .../Assets/Scenes/SampleScene.unity.meta | 2 +- test-project/Packages/manifest.json | 36 +- test-project/Packages/packages-lock.json | 301 ++++++++++ .../ProjectSettings/AudioManager.asset | 2 + .../ProjectSettings/DynamicsManager.asset | 6 +- .../ProjectSettings/EditorBuildSettings.asset | 2 +- .../ProjectSettings/EditorSettings.asset | 19 +- .../ProjectSettings/GraphicsSettings.asset | 55 +- .../ProjectSettings/MemorySettings.asset | 35 ++ .../ProjectSettings/NetworkManager.asset | 8 - .../PackageManagerSettings.asset | 35 ++ .../Settings.json | 7 + .../ProjectSettings/PresetManager.asset | 3 +- .../ProjectSettings/ProjectSettings.asset | 465 +++++++++++--- .../ProjectSettingsIl2cpp.asset | 568 ++++++++++++------ .../ProjectSettings/ProjectVersion.txt | 4 +- .../ProjectSettings/QualitySettings.asset | 87 ++- .../SceneTemplateSettings.json | 167 +++++ .../ProjectSettings/TimeManager.asset | 2 +- .../UnityConnectSettings.asset | 1 + test-project/ProjectSettings/VFXManager.asset | 5 + .../VersionControlSettings.asset | 8 + test-project/ProjectSettings/boot.config | 0 yarn.lock | 115 +++- 45 files changed, 1872 insertions(+), 725 deletions(-) create mode 100644 dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs create mode 100644 dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs.meta create mode 100644 test-project/Assets/LFS_Test_File.jpg.meta create mode 100644 test-project/Packages/packages-lock.json create mode 100644 test-project/ProjectSettings/MemorySettings.asset delete mode 100644 test-project/ProjectSettings/NetworkManager.asset create mode 100644 test-project/ProjectSettings/PackageManagerSettings.asset create mode 100644 test-project/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json create mode 100644 test-project/ProjectSettings/SceneTemplateSettings.json create mode 100644 test-project/ProjectSettings/VersionControlSettings.asset create mode 100644 test-project/ProjectSettings/boot.config diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9eb8d367..9396d6cb 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,6 +10,10 @@ - ... +#### Successful Workflow Run Link + +- ... + #### Checklist diff --git a/.github/workflows/build-tests-mac.yml b/.github/workflows/build-tests-mac.yml index 860fb1ea..d4c4bf5d 100644 --- a/.github/workflows/build-tests-mac.yml +++ b/.github/workflows/build-tests-mac.yml @@ -3,8 +3,6 @@ name: Builds - MacOS on: workflow_dispatch: push: - branches: - - main concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -20,11 +18,12 @@ jobs: projectPath: - test-project unityVersion: - - 2021.3.31f1 - - 2022.3.11f1 - - 2023.1.17f1 + - 2021.3.32f1 + - 2022.3.13f1 + - 2023.1.19f1 targetPlatform: - StandaloneOSX # Build a MacOS executable + - iOS # Build an iOS executable steps: ########################### diff --git a/.github/workflows/build-tests-ubuntu.yml b/.github/workflows/build-tests-ubuntu.yml index 60ddfdcf..1fbb12e9 100644 --- a/.github/workflows/build-tests-ubuntu.yml +++ b/.github/workflows/build-tests-ubuntu.yml @@ -3,11 +3,6 @@ name: Builds - Ubuntu on: workflow_dispatch: push: - branches: - - main - pull_request: - paths-ignore: - - '.github/**' concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -52,9 +47,9 @@ jobs: projectPath: - test-project unityVersion: - - 2021.3.31f1 - - 2022.3.11f1 - - 2023.1.17f1 + - 2021.3.32f1 + - 2022.3.13f1 + - 2023.1.19f1 targetPlatform: - StandaloneOSX # Build a macOS standalone (Intel 64-bit) with mono backend. - StandaloneWindows64 # Build a Windows 64-bit standalone with mono backend. @@ -84,7 +79,13 @@ jobs: ########################### # Build # ########################### - - uses: ./ + - name: Build + uses: ./ + id: build-1 + continue-on-error: true + env: + UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} + UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} with: projectPath: ${{ matrix.projectPath }} unityVersion: ${{ matrix.unityVersion }} @@ -92,6 +93,47 @@ jobs: customParameters: -profile SomeProfile -someBoolean -someValue exampleValue providerStrategy: ${{ matrix.providerStrategy }} + - name: Sleep for Retry + if: ${{ steps.build-1.outcome == 'failure' }} + run: | + sleep 60 + + - name: Build (Retry 1) + uses: ./ + id: build-2 + if: ${{ steps.build-1.outcome == 'failure' }} + continue-on-error: true + env: + UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} + UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} + with: + projectPath: ${{ matrix.projectPath }} + unityVersion: ${{ matrix.unityVersion }} + targetPlatform: ${{ matrix.targetPlatform }} + customParameters: -profile SomeProfile -someBoolean -someValue exampleValue + providerStrategy: ${{ matrix.providerStrategy }} + allowDirtyBuild: true + + - name: Sleep for Retry + if: ${{ steps.build-2.outcome == 'failure' }} + run: | + sleep 240 + + - name: Build (Retry 2) + uses: ./ + id: build-3 + if: ${{ steps.build-2.outcome == 'failure' }} + env: + UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} + UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} + with: + projectPath: ${{ matrix.projectPath }} + unityVersion: ${{ matrix.unityVersion }} + targetPlatform: ${{ matrix.targetPlatform }} + customParameters: -profile SomeProfile -someBoolean -someValue exampleValue + providerStrategy: ${{ matrix.providerStrategy }} + allowDirtyBuild: true + ########################### # Upload # ########################### diff --git a/.github/workflows/build-tests-windows.yml b/.github/workflows/build-tests-windows.yml index 8c0e6e3c..173b8e9e 100644 --- a/.github/workflows/build-tests-windows.yml +++ b/.github/workflows/build-tests-windows.yml @@ -3,8 +3,6 @@ name: Builds - Windows on: workflow_dispatch: push: - branches: - - main concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -20,13 +18,12 @@ jobs: projectPath: - test-project unityVersion: - - 2021.3.31f1 - - 2022.3.11f1 - - 2023.1.17f1 + - 2021.3.32f1 + - 2022.3.13f1 + - 2023.1.19f1 targetPlatform: - Android # Build an Android apk. - StandaloneWindows64 # Build a Windows 64-bit standalone. - - StandaloneWindows # Build a Windows 32-bit standalone. - WSAPlayer # Build a UWP App - tvOS # Build an Apple TV XCode project diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs new file mode 100644 index 00000000..4dc14570 --- /dev/null +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; +using UnityEditor; + +namespace UnityBuilderAction.Reporting +{ + [InitializeOnLoad] + static class CompileListener + { + static CompileListener() + { + if (Application.isBatchMode) + { + Application.logMessageReceived += Application_logMessageReceived; + } + } + + private static void Application_logMessageReceived(string condition, string stackTrace, LogType type) + { + string prefix = ""; + switch (type) + { + case LogType.Error: + prefix = "error"; + break; + case LogType.Warning: + prefix = "warning"; + break; + case LogType.Exception: + prefix = "error"; + break; + } + Console.WriteLine($"{Environment.NewLine}::{prefix} ::{condition}{Environment.NewLine}{stackTrace}"); + } + } +} diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs.meta b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs.meta new file mode 100644 index 00000000..66e30d15 --- /dev/null +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Reporting/CompileListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fad44373fb7b61a4bb584e2675795aca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/dist/index.js b/dist/index.js index 6003d75d1b23f3d720d0cbc13e0e12260182ce34..2bdb48110f7821d8198adbf28e6cc2fde896f6d4 100644 GIT binary patch delta 46544 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 delta 43955 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 diff --git a/dist/index.js.map b/dist/index.js.map index 560e37b10d6f371a30a8652b38349fdcc6803601..a47bee96390487d203ced5cde8db5fbb83978c6e 100644 GIT binary patch delta 47750 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 WNt(*)z!LBt_yByAr?SgWUj6|{W>IYb delta 44294 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

hfMLH> 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 diff --git a/dist/licenses.txt b/dist/licenses.txt index e143bef9e54743b1e60a7e6081c2b6f62b1d1577..d21d19f2f842071a48d48fd448287213f8b8d00f 100644 GIT binary patch delta 53 zcmaE{S7`HAp$&gMIMNb}OES|c^|$xbGFq@S|MA%V$AfXAN&C@8Mj&R|ezcJ}Yuff) I8J6lM0GBrxw*UYD delta 58 zcmdnIRp`ZDp$&gMn(chI+xaq1FxkxJY0lDqwviEtnYN#8WX_((nVOheoSImaoUxhP N(}-oesRT=169D4>7bXAz diff --git a/dist/platforms/mac/steps/activate.sh b/dist/platforms/mac/steps/activate.sh index c9511eb5..2d3339ef 100755 --- a/dist/platforms/mac/steps/activate.sh +++ b/dist/platforms/mac/steps/activate.sh @@ -20,6 +20,10 @@ echo "Requesting activation" # Store the exit code from the verify command UNITY_EXIT_CODE=$? +if [ ! -f "/Library/Application Support/Unity/Unity_lic.ulf" ]; then + echo "::error ::There was an error while trying to activate the Unity license." +fi + # # Display information about the result # @@ -30,6 +34,7 @@ else # Activation failed so exit with the code from the license verification step echo "Unclassified error occured while trying to activate license." echo "Exit code was: $UNITY_EXIT_CODE" + echo "::error ::There was an error while trying to activate the Unity license." exit $UNITY_EXIT_CODE fi diff --git a/dist/platforms/ubuntu/steps/activate.sh b/dist/platforms/ubuntu/steps/activate.sh index 81eb2ffc..4af50212 100755 --- a/dist/platforms/ubuntu/steps/activate.sh +++ b/dist/platforms/ubuntu/steps/activate.sh @@ -4,64 +4,13 @@ echo "Changing to \"$ACTIVATE_LICENSE_PATH\" directory." pushd "$ACTIVATE_LICENSE_PATH" -if [[ -n "$UNITY_LICENSE" ]] || [[ -n "$UNITY_LICENSE_FILE" ]]; then +if [[ -n "$UNITY_SERIAL" && -n "$UNITY_EMAIL" && -n "$UNITY_PASSWORD" ]]; then # - # PERSONAL LICENSE MODE - # - # This will activate Unity, using a license file - # - # Note that this is the ONLY WAY for PERSONAL LICENSES in 2020. - # * See for more details: https://gitlab.com/gableroux/unity3d-gitlab-ci-example/issues/5#note_72815478 - # - # The license file can be acquired using `webbertakken/request-manual-activation-file` action. - echo "Requesting activation (personal license)" - - # Set the license file path - FILE_PATH=UnityLicenseFile.ulf - - if [[ -n "$UNITY_LICENSE" ]]; then - # Copy license file from Github variables - echo "$UNITY_LICENSE" | tr -d '\r' > $FILE_PATH - elif [[ -n "$UNITY_LICENSE_FILE" ]]; then - # Copy license file from file system - cat "$UNITY_LICENSE_FILE" | tr -d '\r' > $FILE_PATH - fi - - # Activate license - ACTIVATION_OUTPUT=$(unity-editor \ - -logFile /dev/stdout \ - -quit \ - -manualLicenseFile $FILE_PATH) - - # Store the exit code from the verify command - UNITY_EXIT_CODE=$? - - # The exit code for personal activation is always 1; - # Determine whether activation was successful. - # - # Successful output should include the following: - # - # "LICENSE SYSTEM [2020120 18:51:20] Next license update check is after 2019-11-25T18:23:38" - # - ACTIVATION_SUCCESSFUL=$(echo $ACTIVATION_OUTPUT | grep 'Next license update check is after' | wc -l) - - # Set exit code to 0 if activation was successful - if [[ $ACTIVATION_SUCCESSFUL -eq 1 ]]; then - UNITY_EXIT_CODE=0 - fi; - - # Remove license file - rm -f $FILE_PATH - -elif [[ -n "$UNITY_SERIAL" && -n "$UNITY_EMAIL" && -n "$UNITY_PASSWORD" ]]; then - # - # PROFESSIONAL (SERIAL) LICENSE MODE + # SERIAL LICENSE MODE # # This will activate unity, using the activating process. # - # Note: This is the preferred way for PROFESSIONAL LICENSES. - # - echo "Requesting activation (professional license)" + echo "Requesting activation" # Activate license unity-editor \ @@ -69,11 +18,16 @@ elif [[ -n "$UNITY_SERIAL" && -n "$UNITY_EMAIL" && -n "$UNITY_PASSWORD" ]]; then -quit \ -serial "$UNITY_SERIAL" \ -username "$UNITY_EMAIL" \ - -password "$UNITY_PASSWORD" + -password "$UNITY_PASSWORD" \ + -projectPath "/BlankProject" # Store the exit code from the verify command UNITY_EXIT_CODE=$? + if [ ! -f "~/.local/share/unity3d/Unity/Unity_lic.ulf" ]; then + echo "::error ::There was an error while trying to activate the Unity license." + fi + elif [[ -n "$UNITY_LICENSING_SERVER" ]]; then # # Custom Unity License Server @@ -100,6 +54,7 @@ else echo "Visit https://game.ci/docs/github/getting-started for more" echo "details on how to set up one of the possible activation strategies." + echo "::error ::No valid license activation strategy could be determined." # Immediately exit as no UNITY_EXIT_CODE can be derrived. exit 1; diff --git a/dist/platforms/ubuntu/steps/return_license.sh b/dist/platforms/ubuntu/steps/return_license.sh index f0f68b58..2984f701 100755 --- a/dist/platforms/ubuntu/steps/return_license.sh +++ b/dist/platforms/ubuntu/steps/return_license.sh @@ -13,14 +13,17 @@ if [[ -n "$UNITY_LICENSING_SERVER" ]]; then # /opt/unity/Editor/Data/Resources/Licensing/Client/Unity.Licensing.Client --return-floating "$FLOATING_LICENSE" elif [[ -n "$UNITY_SERIAL" ]]; then # - # PROFESSIONAL (SERIAL) LICENSE MODE + # SERIAL LICENSE MODE # # This will return the license that is currently in use. # unity-editor \ -logFile /dev/stdout \ -quit \ - -returnlicense + -returnlicense \ + -username "$UNITY_EMAIL" \ + -password "$UNITY_PASSWORD" \ + -projectPath "/BlankProject" fi # Return to previous working directory diff --git a/dist/platforms/windows/activate.ps1 b/dist/platforms/windows/activate.ps1 index bfaef5c0..5e505b46 100644 --- a/dist/platforms/windows/activate.ps1 +++ b/dist/platforms/windows/activate.ps1 @@ -12,3 +12,8 @@ Write-Output "" -serial $Env:UNITY_SERIAL ` -projectPath "c:/BlankProject" ` -logfile - | Out-Host + +if(-not(Test-path "C:/ProgramData/Unity/Unity_lic.ulf" -PathType leaf)) +{ + Write-Output "::error ::There was an error while trying to activate the Unity license." +} diff --git a/src/model/build-parameters.ts b/src/model/build-parameters.ts index 8c322124..4cd8a523 100644 --- a/src/model/build-parameters.ts +++ b/src/model/build-parameters.ts @@ -12,6 +12,7 @@ import { Cli } from './cli/cli'; import GitHub from './github'; import CloudRunnerOptions from './cloud-runner/options/cloud-runner-options'; import CloudRunner from './cloud-runner/cloud-runner'; +import * as core from '@actions/core'; class BuildParameters { // eslint-disable-next-line no-undef @@ -132,6 +133,11 @@ class BuildParameters { } } + if (unitySerial !== undefined && unitySerial.length === 27) { + core.setSecret(unitySerial); + core.setSecret(`${unitySerial.slice(0, -4)}XXXX`); + } + return { editorVersion, customImage: Input.customImage, diff --git a/src/model/docker.ts b/src/model/docker.ts index aec955bc..77645666 100644 --- a/src/model/docker.ts +++ b/src/model/docker.ts @@ -62,7 +62,6 @@ class Docker { --workdir ${dockerWorkspacePath} \ --rm \ ${ImageEnvironmentFactory.getEnvVarString(parameters, additionalVariables)} \ - --env UNITY_SERIAL \ --env GITHUB_WORKSPACE=${dockerWorkspacePath} \ --env GIT_CONFIG_EXTENSIONS \ ${gitPrivateToken ? `--env GIT_PRIVATE_TOKEN="${gitPrivateToken}"` : ''} \ @@ -74,6 +73,7 @@ class Docker { --volume "${actionFolder}/platforms/ubuntu/steps:/steps:z" \ --volume "${actionFolder}/platforms/ubuntu/entrypoint.sh:/entrypoint.sh:z" \ --volume "${actionFolder}/unity-config:/usr/share/unity3d/config/:z" \ + --volume "${actionFolder}/BlankProject":"/BlankProject:z" \ --cpus=${dockerCpuLimit} \ --memory=${dockerMemoryLimit} \ ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ @@ -93,7 +93,6 @@ class Docker { const { workspace, actionFolder, - unitySerial, gitPrivateToken, dockerWorkspacePath, dockerCpuLimit, @@ -105,7 +104,6 @@ class Docker { --workdir c:${dockerWorkspacePath} \ --rm \ ${ImageEnvironmentFactory.getEnvVarString(parameters)} \ - --env UNITY_SERIAL="${unitySerial}" \ --env GITHUB_WORKSPACE=c:${dockerWorkspacePath} \ ${gitPrivateToken ? `--env GIT_PRIVATE_TOKEN="${gitPrivateToken}"` : ''} \ --volume "${workspace}":"c:${dockerWorkspacePath}" \ diff --git a/src/model/image-environment-factory.ts b/src/model/image-environment-factory.ts index c66697b4..6162b50b 100644 --- a/src/model/image-environment-factory.ts +++ b/src/model/image-environment-factory.ts @@ -1,4 +1,3 @@ -import { ReadLicense } from './input-readers/test-license-reader'; import { DockerParameters, StringKeyValuePair } from './shared-types'; class ImageEnvironmentFactory { @@ -23,14 +22,18 @@ class ImageEnvironmentFactory { public static getEnvironmentVariables(parameters: DockerParameters, additionalVariables: StringKeyValuePair[] = []) { let environmentVariables: StringKeyValuePair[] = [ - { name: 'UNITY_LICENSE', value: process.env.UNITY_LICENSE || ReadLicense() }, - { name: 'UNITY_LICENSE_FILE', value: process.env.UNITY_LICENSE_FILE }, { name: 'UNITY_EMAIL', value: process.env.UNITY_EMAIL }, { name: 'UNITY_PASSWORD', value: process.env.UNITY_PASSWORD }, { name: 'UNITY_SERIAL', value: parameters.unitySerial }, - { name: 'UNITY_LICENSING_SERVER', value: parameters.unityLicensingServer }, + { + name: 'UNITY_LICENSING_SERVER', + value: parameters.unityLicensingServer, + }, { name: 'UNITY_VERSION', value: parameters.editorVersion }, - { name: 'USYM_UPLOAD_AUTH_TOKEN', value: process.env.USYM_UPLOAD_AUTH_TOKEN }, + { + name: 'USYM_UPLOAD_AUTH_TOKEN', + value: process.env.USYM_UPLOAD_AUTH_TOKEN, + }, { name: 'PROJECT_PATH', value: parameters.projectPath }, { name: 'BUILD_TARGET', value: parameters.targetPlatform }, { name: 'BUILD_NAME', value: parameters.buildName }, @@ -41,12 +44,21 @@ class ImageEnvironmentFactory { { name: 'VERSION', value: parameters.buildVersion }, { name: 'ANDROID_VERSION_CODE', value: parameters.androidVersionCode }, { name: 'ANDROID_KEYSTORE_NAME', value: parameters.androidKeystoreName }, - { name: 'ANDROID_KEYSTORE_BASE64', value: parameters.androidKeystoreBase64 }, + { + name: 'ANDROID_KEYSTORE_BASE64', + value: parameters.androidKeystoreBase64, + }, { name: 'ANDROID_KEYSTORE_PASS', value: parameters.androidKeystorePass }, { name: 'ANDROID_KEYALIAS_NAME', value: parameters.androidKeyaliasName }, { name: 'ANDROID_KEYALIAS_PASS', value: parameters.androidKeyaliasPass }, - { name: 'ANDROID_TARGET_SDK_VERSION', value: parameters.androidTargetSdkVersion }, - { name: 'ANDROID_SDK_MANAGER_PARAMETERS', value: parameters.androidSdkManagerParameters }, + { + name: 'ANDROID_TARGET_SDK_VERSION', + value: parameters.androidTargetSdkVersion, + }, + { + name: 'ANDROID_SDK_MANAGER_PARAMETERS', + value: parameters.androidSdkManagerParameters, + }, { name: 'ANDROID_EXPORT_TYPE', value: parameters.androidExportType }, { name: 'ANDROID_SYMBOL_TYPE', value: parameters.androidSymbolType }, { name: 'CUSTOM_PARAMETERS', value: parameters.customParameters }, @@ -86,7 +98,9 @@ class ImageEnvironmentFactory { } } } - if (parameters.sshAgent) environmentVariables.push({ name: 'SSH_AUTH_SOCK', value: '/ssh-agent' }); + if (parameters.sshAgent) { + environmentVariables.push({ name: 'SSH_AUTH_SOCK', value: '/ssh-agent' }); + } return environmentVariables; } diff --git a/src/model/unity-versioning.test.ts b/src/model/unity-versioning.test.ts index 94aa3c6a..5db2af14 100644 --- a/src/model/unity-versioning.test.ts +++ b/src/model/unity-versioning.test.ts @@ -7,9 +7,9 @@ describe('Unity Versioning', () => { }); it('parses from ProjectVersion.txt', () => { - const projectVersionContents = `m_EditorVersion: 2019.2.11f1 - m_EditorVersionWithRevision: 2019.2.11f1 (5f859a4cfee5)`; - expect(UnityVersioning.parse(projectVersionContents)).toBe('2019.2.11f1'); + const projectVersionContents = `m_EditorVersion: 2021.3.4f1 + m_EditorVersionWithRevision: 2021.3.4f1 (cb45f9cae8b7)`; + expect(UnityVersioning.parse(projectVersionContents)).toBe('2021.3.4f1'); }); }); @@ -19,13 +19,13 @@ describe('Unity Versioning', () => { }); it('reads from test-project', () => { - expect(UnityVersioning.read('./test-project')).toBe('2019.2.11f1'); + expect(UnityVersioning.read('./test-project')).toBe('2021.3.4f1'); }); }); describe('determineUnityVersion', () => { it('defaults to parsed version', () => { - expect(UnityVersioning.determineUnityVersion('./test-project', 'auto')).toBe('2019.2.11f1'); + expect(UnityVersioning.determineUnityVersion('./test-project', 'auto')).toBe('2021.3.4f1'); }); it('use specified unityVersion', () => { diff --git a/test-project/.gitignore b/test-project/.gitignore index 963804f6..cb76c509 100644 --- a/test-project/.gitignore +++ b/test-project/.gitignore @@ -4,6 +4,7 @@ [Bb]uild/ [Bb]uilds/ [Ll]ogs/ +UserSettings/ # Uncomment this line if you wish to ignore the asset store tools plugin # [Aa]ssets/AssetStoreTools* diff --git a/test-project/Assets/LFS_Test_File.jpg.meta b/test-project/Assets/LFS_Test_File.jpg.meta new file mode 100644 index 00000000..5bdb3dbf --- /dev/null +++ b/test-project/Assets/LFS_Test_File.jpg.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 4464d385be8a6314599ca304b15f6033 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/test-project/Assets/Scenes.meta b/test-project/Assets/Scenes.meta index db718afc..83c741b2 100644 --- a/test-project/Assets/Scenes.meta +++ b/test-project/Assets/Scenes.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7318f4af514280d49b66c315d1f80caf +guid: 6ea315d0fd7389c41b19996891e99ae3 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/test-project/Assets/Scenes/SampleScene.unity b/test-project/Assets/Scenes/SampleScene.unity index 7cd6b0c8..6c41248d 100644 --- a/test-project/Assets/Scenes/SampleScene.unity +++ b/test-project/Assets/Scenes/SampleScene.unity @@ -24,9 +24,9 @@ RenderSettings: m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} m_AmbientIntensity: 1 - m_AmbientMode: 3 + m_AmbientMode: 0 m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} m_HaloStrength: 0.5 m_FlareStrength: 1 m_FlareFadeSpeed: 3 @@ -38,12 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 11 + serializedVersion: 12 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -51,7 +51,7 @@ LightmapSettings: m_IndirectOutputScale: 1 m_AlbedoBoost: 1 m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 0 + m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: serializedVersion: 12 @@ -72,7 +72,7 @@ LightmapSettings: m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 - m_BakeBackend: 0 + m_BakeBackend: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 m_PVRSampleCount: 500 @@ -96,8 +96,9 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaAO: 1 m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000000, guid: 6d45b161158b72540a6627333b5c362d, type: 2} + m_LightingSettings: {fileID: 0} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -117,10 +118,12 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &415492281 +--- !u!1 &963194225 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -128,86 +131,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 415492282} - - component: {fileID: 415492284} - - component: {fileID: 415492283} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &415492282 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 415492281} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1861892729} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &415492283 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 415492281} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0.63506866, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Bulider test ---- !u!222 &415492284 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 415492281} - m_CullTransparentMesh: 0 ---- !u!1 &519420028 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 519420032} - - component: {fileID: 519420031} - - component: {fileID: 519420029} + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -215,24 +141,24 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &519420029 +--- !u!81 &963194226 AudioListener: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} + m_GameObject: {fileID: 963194225} m_Enabled: 1 ---- !u!20 &519420031 +--- !u!20 &963194227 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} + m_GameObject: {fileID: 963194225} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 2 + m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -244,13 +170,13 @@ Camera: serializedVersion: 2 x: 0 y: 0 - width: 10 - height: 10 + width: 1 + height: 1 near clip plane: 0.3 far clip plane: 1000 field of view: 60 - orthographic: 1 - orthographic size: 100 + orthographic: 0 + orthographic size: 5 m_Depth: -1 m_CullingMask: serializedVersion: 2 @@ -258,190 +184,26 @@ Camera: m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 - m_TargetEye: 0 + m_TargetEye: 3 m_HDR: 1 - m_AllowMSAA: 0 + m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 - m_OcclusionCulling: 0 + m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!4 &519420032 +--- !u!4 &963194228 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519420028} + m_GameObject: {fileID: 963194225} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalPosition: {x: 0, y: 1, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1861892725 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1861892729} - - component: {fileID: 1861892728} - - component: {fileID: 1861892727} - - component: {fileID: 1861892726} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1861892726 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1861892725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1861892727 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1861892725} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &1861892728 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1861892725} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &1861892729 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1861892725} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 415492282} - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1969526254 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1969526257} - - component: {fileID: 1969526256} - - component: {fileID: 1969526255} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1969526255 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1969526254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &1969526256 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1969526254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1969526257 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1969526254} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/test-project/Assets/Scenes/SampleScene.unity.meta b/test-project/Assets/Scenes/SampleScene.unity.meta index c1e3c88e..952bd1e9 100644 --- a/test-project/Assets/Scenes/SampleScene.unity.meta +++ b/test-project/Assets/Scenes/SampleScene.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2cda990e2423bbf4892e6590ba056729 +guid: 9fc0d4010bbf28b4594072e72b8655ab DefaultImporter: externalObjects: {} userData: diff --git a/test-project/Packages/manifest.json b/test-project/Packages/manifest.json index 18a1e415..b9f3e7ac 100644 --- a/test-project/Packages/manifest.json +++ b/test-project/Packages/manifest.json @@ -1,3 +1,37 @@ { - "dependencies": {} + "dependencies": { + "com.unity.burst": "1.6.6", + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } } diff --git a/test-project/Packages/packages-lock.json b/test-project/Packages/packages-lock.json new file mode 100644 index 00000000..032b909c --- /dev/null +++ b/test-project/Packages/packages-lock.json @@ -0,0 +1,301 @@ +{ + "dependencies": { + "com.unity.burst": { + "version": "1.6.6", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.22", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, + "com.unity.mathematics": { + "version": "1.2.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.31", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.uielementsnative": "1.0.0" + } + }, + "com.unity.modules.uielementsnative": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/test-project/ProjectSettings/AudioManager.asset b/test-project/ProjectSettings/AudioManager.asset index 4f31e744..07ebfb05 100644 --- a/test-project/ProjectSettings/AudioManager.asset +++ b/test-project/ProjectSettings/AudioManager.asset @@ -3,6 +3,7 @@ --- !u!11 &1 AudioManager: m_ObjectHideFlags: 0 + serializedVersion: 2 m_Volume: 1 Rolloff Scale: 1 Doppler Factor: 1 @@ -15,3 +16,4 @@ AudioManager: m_AmbisonicDecoderPlugin: m_DisableAudio: 0 m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 1024 diff --git a/test-project/ProjectSettings/DynamicsManager.asset b/test-project/ProjectSettings/DynamicsManager.asset index 4144c06a..cdc1f3ea 100644 --- a/test-project/ProjectSettings/DynamicsManager.asset +++ b/test-project/ProjectSettings/DynamicsManager.asset @@ -3,7 +3,7 @@ --- !u!55 &1 PhysicsManager: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 11 m_Gravity: {x: 0, y: -9.81, z: 0} m_DefaultMaterial: {fileID: 0} m_BounceThreshold: 2 @@ -28,3 +28,7 @@ PhysicsManager: m_Center: {x: 0, y: 0, z: 0} m_Extent: {x: 250, y: 250, z: 250} m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/test-project/ProjectSettings/EditorBuildSettings.asset b/test-project/ProjectSettings/EditorBuildSettings.asset index 82ab0f59..40917b05 100644 --- a/test-project/ProjectSettings/EditorBuildSettings.asset +++ b/test-project/ProjectSettings/EditorBuildSettings.asset @@ -7,5 +7,5 @@ EditorBuildSettings: m_Scenes: - enabled: 1 path: Assets/Scenes/SampleScene.unity - guid: 2cda990e2423bbf4892e6590ba056729 + guid: 9fc0d4010bbf28b4594072e72b8655ab m_configObjects: {} diff --git a/test-project/ProjectSettings/EditorSettings.asset b/test-project/ProjectSettings/EditorSettings.asset index fee7e362..1e44a0a1 100644 --- a/test-project/ProjectSettings/EditorSettings.asset +++ b/test-project/ProjectSettings/EditorSettings.asset @@ -3,19 +3,28 @@ --- !u!159 &1 EditorSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 11 m_ExternalVersionControlSupport: Visible Meta Files m_SerializationMode: 2 m_LineEndingsForNewScripts: 0 - m_DefaultBehaviorMode: 1 - m_SpritePackerMode: 4 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 m_SpritePackerPaddingPower: 1 m_EtcTextureCompressorBehavior: 1 m_EtcTextureFastCompressor: 1 m_EtcTextureNormalCompressor: 2 m_EtcTextureBestCompressor: 4 - m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref m_ProjectGenerationRootNamespace: - m_UserGeneratedProjectSuffix: m_CollabEditorSettings: inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 diff --git a/test-project/ProjectSettings/GraphicsSettings.asset b/test-project/ProjectSettings/GraphicsSettings.asset index b26c5ba9..43369e3c 100644 --- a/test-project/ProjectSettings/GraphicsSettings.asset +++ b/test-project/ProjectSettings/GraphicsSettings.asset @@ -3,32 +3,38 @@ --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 m_Deferred: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} m_DeferredReflections: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} m_ScreenSpaceShadows: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} m_LegacyDeferred: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} m_DepthNormals: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} m_MotionVectors: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} m_LightHalo: - m_Mode: 0 - m_Shader: {fileID: 0} + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} m_LensFlare: - m_Mode: 0 - m_Shader: {fileID: 0} - m_AlwaysIncludedShaders: [] + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} m_PreloadedShaders: [] m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} @@ -41,12 +47,12 @@ GraphicsSettings: m_LightmapStripping: 0 m_FogStripping: 0 m_InstancingStripping: 0 - m_LightmapKeepPlain: 0 - m_LightmapKeepDirCombined: 0 - m_LightmapKeepDynamicPlain: 0 - m_LightmapKeepDynamicDirCombined: 0 - m_LightmapKeepShadowMask: 0 - m_LightmapKeepSubtractive: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 m_FogKeepLinear: 1 m_FogKeepExp: 1 m_FogKeepExp2: 1 @@ -54,3 +60,4 @@ GraphicsSettings: m_LightsUseLinearIntensity: 0 m_LightsUseColorTemperature: 0 m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/test-project/ProjectSettings/MemorySettings.asset b/test-project/ProjectSettings/MemorySettings.asset new file mode 100644 index 00000000..5b5facec --- /dev/null +++ b/test-project/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/test-project/ProjectSettings/NetworkManager.asset b/test-project/ProjectSettings/NetworkManager.asset deleted file mode 100644 index 5dc6a831..00000000 --- a/test-project/ProjectSettings/NetworkManager.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!149 &1 -NetworkManager: - m_ObjectHideFlags: 0 - m_DebugLevel: 0 - m_Sendrate: 15 - m_AssetToPrefab: {} diff --git a/test-project/ProjectSettings/PackageManagerSettings.asset b/test-project/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 00000000..112a053b --- /dev/null +++ b/test-project/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreReleasePackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_Modified: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -830 + m_OriginalInstanceId: -832 + m_LoadAssets: 0 diff --git a/test-project/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/test-project/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 00000000..ad11087f --- /dev/null +++ b/test-project/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,7 @@ +{ + "m_Name": "Settings", + "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", + "m_Dictionary": { + "m_DictionaryValues": [] + } +} \ No newline at end of file diff --git a/test-project/ProjectSettings/PresetManager.asset b/test-project/ProjectSettings/PresetManager.asset index 636a595b..67a94dae 100644 --- a/test-project/ProjectSettings/PresetManager.asset +++ b/test-project/ProjectSettings/PresetManager.asset @@ -3,4 +3,5 @@ --- !u!1386491679 &1 PresetManager: m_ObjectHideFlags: 0 - m_DefaultList: [] + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/test-project/ProjectSettings/ProjectSettings.asset b/test-project/ProjectSettings/ProjectSettings.asset index 7b66fd1f..96a5e37c 100644 --- a/test-project/ProjectSettings/ProjectSettings.asset +++ b/test-project/ProjectSettings/ProjectSettings.asset @@ -3,8 +3,8 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 18 - productGUID: d9e9dde8e7ed4cf4bac4c6f2dffe7ef4 + serializedVersion: 23 + productGUID: f3f6a917a3bba0046bb55998f8678f8c AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 AndroidEnableSustainedPerformanceMode: 0 @@ -12,8 +12,8 @@ PlayerSettings: targetDevice: 2 useOnDemandResources: 0 accelerometerFrequency: 60 - companyName: DefaultCompany - productName: simpletestproject + companyName: GameCI + productName: TestProject defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} @@ -42,17 +42,18 @@ PlayerSettings: m_SplashScreenLogos: [] m_VirtualRealitySplashScreen: {fileID: 0} m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1024 - defaultScreenHeight: 768 + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 m_ActiveColorSpace: 0 m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 - displayResolutionDialog: 0 iosUseCustomAppBackgroundBehavior: 0 iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 @@ -65,8 +66,14 @@ PlayerSettings: disableDepthAndStencilBuffers: 0 androidStartInFullscreen: 1 androidRenderOutsideSafeArea: 1 - androidUseSwappy: 0 + androidUseSwappy: 1 androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 runInBackground: 1 @@ -84,8 +91,7 @@ PlayerSettings: resizableWindow: 0 useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games - gpuSkinning: 0 - graphicsJobs: 0 + gpuSkinning: 1 xboxPIXTextureCapture: 0 xboxEnableAvatar: 0 xboxEnableKinect: 0 @@ -93,7 +99,6 @@ PlayerSettings: xboxEnableFitness: 0 visibleInBackground: 1 allowFullscreenSwitch: 1 - graphicsJobMode: 0 fullscreenMode: 1 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 @@ -106,6 +111,7 @@ PlayerSettings: xboxOneMonoLoggingLevel: 0 xboxOneLoggingLevel: 1 xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 switchQueueControlMemory: 16384 @@ -113,7 +119,15 @@ PlayerSettings: switchNVNShaderPoolsGranularity: 33554432 switchNVNDefaultPoolsGranularity: 16777216 switchNVNOtherPoolsGranularity: 16777216 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 m_SupportedAspectRatios: 4:3: 1 5:4: 1 @@ -128,48 +142,30 @@ PlayerSettings: xboxOneDisableKinectGpuReservation: 1 xboxOneEnable7thCore: 1 vrSettings: - cardboard: - depthFormat: 0 - enableTransitionView: 0 - daydream: - depthFormat: 0 - useSustainedPerformanceMode: 0 - enableVideoLayer: 0 - useProtectedVideoMemory: 0 - minimumSupportedHeadTracking: 0 - maximumSupportedHeadTracking: 1 - hololens: - depthFormat: 1 - depthBufferSharingEnabled: 1 - lumin: - depthFormat: 0 - frameTiming: 2 - enableGLCache: 0 - glCacheMaxBlobSize: 524288 - glCacheMaxFileSize: 8388608 - oculus: - sharedDepthBuffer: 1 - dashSupport: 1 - lowOverheadMode: 0 - protectedContext: 0 - v2Signing: 0 enable360StereoCapture: 0 isWsaHolographicRemotingEnabled: 0 - protectGraphicsMemory: 0 enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 useHDRDisplay: 0 + D3DHDRBitDepth: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 applicationIdentifier: - Standalone: com.Company.ProductName - Android: com.DefaultCompany.simpletestproject - buildNumber: {} + Android: com.GameCI.TestProject + Standalone: com.GameCI.TestProject + iPhone: com.GameCI.TestProject + buildNumber: + Standalone: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 16 - AndroidTargetSdkVersion: 0 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 33 AndroidPreferredInstallLocation: 1 aotOptions: stripEngineCode: 1 @@ -183,32 +179,16 @@ PlayerSettings: StripUnusedMeshComponents: 1 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 9.0 + iOSTargetOSVersionString: 11.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 9.0 + tvOSTargetOSVersionString: 11.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 uIStatusBarHidden: 1 uIExitOnSuspend: 0 uIStatusBarStyle: 0 - iPhoneSplashScreen: {fileID: 0} - iPhoneHighResSplashScreen: {fileID: 0} - iPhoneTallHighResSplashScreen: {fileID: 0} - iPhone47inSplashScreen: {fileID: 0} - iPhone55inPortraitSplashScreen: {fileID: 0} - iPhone55inLandscapeSplashScreen: {fileID: 0} - iPhone58inPortraitSplashScreen: {fileID: 0} - iPhone58inLandscapeSplashScreen: {fileID: 0} - iPadPortraitSplashScreen: {fileID: 0} - iPadHighResPortraitSplashScreen: {fileID: 0} - iPadLandscapeSplashScreen: {fileID: 0} - iPadHighResLandscapeSplashScreen: {fileID: 0} - iPhone65inPortraitSplashScreen: {fileID: 0} - iPhone65inLandscapeSplashScreen: {fileID: 0} - iPhone61inPortraitSplashScreen: {fileID: 0} - iPhone61inLandscapeSplashScreen: {fileID: 0} appleTVSplashScreen: {fileID: 0} appleTVSplashScreen2x: {fileID: 0} tvOSSmallIconLayers: [] @@ -236,15 +216,17 @@ PlayerSettings: iOSLaunchScreeniPadFillPct: 100 iOSLaunchScreeniPadSize: 100 iOSLaunchScreeniPadCustomXibPath: - iOSUseLaunchScreenStoryboard: 0 iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: iOSDeviceRequirements: [] iOSURLSchemes: [] + macOSURLSchemes: [] iOSBackgroundModes: 0 iOSMetalForceHardShadows: 0 metalEditorSupport: 1 metalAPIValidation: 1 iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 appleDeveloperTeamID: iOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID: @@ -254,13 +236,22 @@ PlayerSettings: iOSRequireARKit: 0 iOSAutomaticallyDetectAndAddCapabilities: 1 appleEnableProMotion: 0 - clonedFromGUID: 5f34be1353de5cf4398729fda238591b - templatePackageId: com.unity.template.2d@3.2.3 + shaderPrecisionModel: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@8.1.0 templateDefaultScene: Assets/Scenes/SampleScene.unity - AndroidTargetArchitectures: 1 + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 3 + AndroidTargetDevices: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} - AndroidKeystoreName: '{inproject}: ' + AndroidKeystoreName: AndroidKeyaliasName: AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 @@ -274,28 +265,296 @@ PlayerSettings: height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyWithR8: 0 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 AndroidValidateAppBundleSize: 1 AndroidAppBundleSizeToValidate: 150 - resolutionDialogBanner: {fileID: 0} m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 m_BuildTargetGraphicsAPIs: - m_BuildTarget: AndroidPlayer m_APIs: 150000000b000000 - m_Automatic: 0 - m_BuildTargetVRSettings: [] + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR openGLRequireES31: 0 openGLRequireES31AEP: 0 openGLRequireES32: 0 - vuforiaEnabled: 0 m_TemplateCustomTags: {} mobileMTRendering: Android: 1 iPhone: 1 tvOS: 1 - m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + - m_BuildTarget: iPhone + m_Encoding: 1 + - m_BuildTarget: tvOS + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - m_BuildTarget: Android + m_Format: 3 playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 @@ -305,12 +564,16 @@ PlayerSettings: cameraUsageDescription: locationUsageDescription: microphoneUsageDescription: + bluetoothUsageDescription: + switchNMETAOverride: switchNetLibKey: switchSocketMemoryPoolSize: 6144 switchSocketAllocatorPoolSize: 128 switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 + switchUseGOLDLinker: 0 + switchLTOSetting: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: switchTitleNames_0: @@ -328,6 +591,7 @@ PlayerSettings: switchTitleNames_12: switchTitleNames_13: switchTitleNames_14: + switchTitleNames_15: switchPublisherNames_0: switchPublisherNames_1: switchPublisherNames_2: @@ -343,6 +607,7 @@ PlayerSettings: switchPublisherNames_12: switchPublisherNames_13: switchPublisherNames_14: + switchPublisherNames_15: switchIcons_0: {fileID: 0} switchIcons_1: {fileID: 0} switchIcons_2: {fileID: 0} @@ -358,6 +623,7 @@ PlayerSettings: switchIcons_12: {fileID: 0} switchIcons_13: {fileID: 0} switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} switchSmallIcons_0: {fileID: 0} switchSmallIcons_1: {fileID: 0} switchSmallIcons_2: {fileID: 0} @@ -373,6 +639,7 @@ PlayerSettings: switchSmallIcons_12: {fileID: 0} switchSmallIcons_13: {fileID: 0} switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} switchManualHTML: switchAccessibleURLs: switchLegalInformation: @@ -404,6 +671,7 @@ PlayerSettings: switchRatingsInt_9: 0 switchRatingsInt_10: 0 switchRatingsInt_11: 0 + switchRatingsInt_12: 0 switchLocalCommunicationIds_0: switchLocalCommunicationIds_1: switchLocalCommunicationIds_2: @@ -434,6 +702,11 @@ PlayerSettings: switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 switchPlayerConnectionEnabled: 1 + switchUseNewStyleFilepaths: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 ps4NPAgeRating: 12 ps4NPTitleSecret: ps4NPTrophyPackPath: @@ -460,6 +733,7 @@ PlayerSettings: ps4ShareFilePath: ps4ShareOverlayImagePath: ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 ps4RemotePlayKeyMappingDir: @@ -485,6 +759,7 @@ PlayerSettings: ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 ps4SocialScreenEnabled: 0 ps4ScriptOptimizationLevel: 0 ps4Audio3dVirtualSpeakerCount: 14 @@ -501,8 +776,11 @@ PlayerSettings: ps4disableAutoHideSplash: 0 ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4GPU800MHz: 1 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 monoEnv: splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} @@ -519,31 +797,38 @@ PlayerSettings: webGLAnalyzeBuildSize: 0 webGLUseEmbeddedResources: 0 webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 webGLLinkerTarget: 1 webGLThreadsSupport: 0 - webGLWasmStreaming: 0 + webGLDecompressionFallback: 0 scriptingDefineSymbols: {} + additionalCompilerArguments: {} platformArchitecture: {} - scriptingBackend: {} + scriptingBackend: + Android: 1 il2cppCompilerConfiguration: {} managedStrippingLevel: {} incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 allowUnsafeCode: 0 + useDeterministicCompilation: 1 + enableRoslynAnalyzers: 1 additionalIl2CppArgs: scriptingRuntimeVersion: 1 - gcIncremental: 0 + gcIncremental: 1 + assemblyVersionValidation: 1 gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 m_MobileRenderingPath: 1 - metroPackageName: Template_2D + metroPackageName: Template_3D metroPackageVersion: metroCertificatePath: metroCertificatePassword: metroCertificateSubject: metroCertificateIssuer: metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: Template_2D + metroApplicationDescription: Template_3D wsaImages: {} metroTileShortName: metroTileShowName: 0 @@ -555,14 +840,14 @@ PlayerSettings: metroDefaultTileSize: 1 metroTileForegroundText: 2 metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, - a: 1} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} metroTargetDeviceFamilies: {} metroFTAName: metroFTAFileTypes: [] metroProtocolName: + vcxProjDefaultLanguage: XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: @@ -581,18 +866,16 @@ PlayerSettings: XboxOneCapability: [] XboxOneGameRating: {} XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 XboxOneEnableGPUVariability: 1 XboxOneSockets: {} XboxOneSplashScreen: {fileID: 0} XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 - xboxOneScriptCompiler: 1 XboxOneOverrideIdentityName: - vrEditorSettings: - daydream: - daydreamIconForeground: {fileID: 0} - daydreamIconBackground: {fileID: 0} + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} cloudServicesEnabled: UNet: 1 luminIcon: @@ -606,19 +889,15 @@ PlayerSettings: luminVersion: m_VersionCode: 1 m_VersionName: - facebookSdkVersion: 7.9.4 - facebookAppId: - facebookCookies: 1 - facebookLogging: 1 - facebookStatus: 1 - facebookXfbml: 0 - facebookFrictionlessRequests: 1 apiCompatibilityLevel: 6 + activeInputHandler: 0 cloudProjectId: framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] projectName: organizationId: cloudEnabled: 0 - enableNativePlatformBackendsForNewInputSystem: 0 - disableOldInputManagerSupport: 0 legacyClampBlendShapeWeights: 0 + playerDataPath: + forceSRGBBlit: 1 + virtualTexturingSupportEnabled: 0 diff --git a/test-project/ProjectSettings/ProjectSettingsIl2cpp.asset b/test-project/ProjectSettings/ProjectSettingsIl2cpp.asset index 81fa1255..a5a1b4f9 100644 --- a/test-project/ProjectSettings/ProjectSettingsIl2cpp.asset +++ b/test-project/ProjectSettings/ProjectSettingsIl2cpp.asset @@ -3,8 +3,8 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 22 - productGUID: d9e9dde8e7ed4cf4bac4c6f2dffe7ef4 + serializedVersion: 23 + productGUID: f3f6a917a3bba0046bb55998f8678f8c AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 AndroidEnableSustainedPerformanceMode: 0 @@ -12,8 +12,8 @@ PlayerSettings: targetDevice: 2 useOnDemandResources: 0 accelerometerFrequency: 60 - companyName: DefaultCompany - productName: simpletestproject + companyName: GameCI + productName: TestProject defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} @@ -42,8 +42,8 @@ PlayerSettings: m_SplashScreenLogos: [] m_VirtualRealitySplashScreen: {fileID: 0} m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1024 - defaultScreenHeight: 768 + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 @@ -66,7 +66,7 @@ PlayerSettings: disableDepthAndStencilBuffers: 0 androidStartInFullscreen: 1 androidRenderOutsideSafeArea: 1 - androidUseSwappy: 0 + androidUseSwappy: 1 androidBlitType: 0 androidResizableWindow: 0 androidDefaultWindowWidth: 1920 @@ -91,7 +91,7 @@ PlayerSettings: resizableWindow: 0 useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games - gpuSkinning: 0 + gpuSkinning: 1 xboxPIXTextureCapture: 0 xboxEnableAvatar: 0 xboxEnableKinect: 0 @@ -125,7 +125,7 @@ PlayerSettings: stadiaTargetFramerate: 0 vulkanNumSwapchainBuffers: 3 vulkanEnableSetSRGBWrite: 0 - vulkanEnablePreTransform: 0 + vulkanEnablePreTransform: 1 vulkanEnableLateAcquireNextImage: 0 vulkanEnableCommandBufferRecycling: 1 m_SupportedAspectRatios: @@ -145,26 +145,29 @@ PlayerSettings: enable360StereoCapture: 0 isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 useHDRDisplay: 0 D3DHDRBitDepth: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 applicationIdentifier: - Standalone: com.Company.ProductName - Android: com.DefaultCompany.simpletestproject + Android: com.GameCI.TestProject + Standalone: com.GameCI.TestProject + iPhone: com.GameCI.TestProject buildNumber: Standalone: 0 iPhone: 0 tvOS: 0 overrideDefaultApplicationIdentifier: 0 AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 19 - AndroidTargetSdkVersion: 0 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 33 AndroidPreferredInstallLocation: 1 - aotOptions: + aotOptions: stripEngineCode: 1 iPhoneStrippingLevel: 0 iPhoneScriptCallOptimization: 0 @@ -204,7 +207,7 @@ PlayerSettings: rgba: 0 iOSLaunchScreenFillPct: 100 iOSLaunchScreenSize: 100 - iOSLaunchScreenCustomXibPath: + iOSLaunchScreenCustomXibPath: iOSLaunchScreeniPadType: 0 iOSLaunchScreeniPadImage: {fileID: 0} iOSLaunchScreeniPadBackgroundColor: @@ -212,20 +215,21 @@ PlayerSettings: rgba: 0 iOSLaunchScreeniPadFillPct: 100 iOSLaunchScreeniPadSize: 100 - iOSLaunchScreeniPadCustomXibPath: - iOSLaunchScreenCustomStoryboardPath: - iOSLaunchScreeniPadCustomStoryboardPath: + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: iOSDeviceRequirements: [] iOSURLSchemes: [] + macOSURLSchemes: [] iOSBackgroundModes: 0 iOSMetalForceHardShadows: 0 metalEditorSupport: 1 metalAPIValidation: 1 iOSRenderExtraFrameOnPause: 0 iosCopyPluginsCodeInsteadOfSymlink: 0 - appleDeveloperTeamID: - iOSManualSigningProvisioningProfileID: - tvOSManualSigningProvisioningProfileID: + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: iOSManualSigningProvisioningProfileType: 0 tvOSManualSigningProvisioningProfileType: 0 appleEnableAutomaticSigning: 0 @@ -233,8 +237,8 @@ PlayerSettings: iOSAutomaticallyDetectAndAddCapabilities: 1 appleEnableProMotion: 0 shaderPrecisionModel: 0 - clonedFromGUID: 5f34be1353de5cf4398729fda238591b - templatePackageId: com.unity.template.2d@3.2.3 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@8.1.0 templateDefaultScene: Assets/Scenes/SampleScene.unity useCustomMainManifest: 0 useCustomLauncherManifest: 0 @@ -243,12 +247,12 @@ PlayerSettings: useCustomBaseGradleTemplate: 0 useCustomGradlePropertiesTemplate: 0 useCustomProguardFile: 0 - AndroidTargetArchitectures: 1 + AndroidTargetArchitectures: 3 AndroidTargetDevices: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} - AndroidKeystoreName: '{inproject}: ' - AndroidKeyaliasName: + AndroidKeystoreName: + AndroidKeyaliasName: AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 AndroidIsGame: 1 @@ -268,42 +272,238 @@ PlayerSettings: AndroidValidateAppBundleSize: 1 AndroidAppBundleSizeToValidate: 150 m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 m_BuildTargetGraphicsJobs: - - m_BuildTarget: GameCoreScarlettSupport - m_GraphicsJobs: 0 - - m_BuildTarget: Switch - m_GraphicsJobs: 0 - - m_BuildTarget: iOSSupport - m_GraphicsJobs: 0 - - m_BuildTarget: LuminSupport - m_GraphicsJobs: 0 - m_BuildTarget: MacStandaloneSupport m_GraphicsJobs: 0 - - m_BuildTarget: PS5Player - m_GraphicsJobs: 0 - - m_BuildTarget: WebGLSupport - m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 - m_BuildTarget: AppleTVSupport m_GraphicsJobs: 0 - - m_BuildTarget: GameCoreXboxOneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: CloudRendering + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport m_GraphicsJobs: 0 - m_BuildTarget: WindowsStandaloneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: PS4Player - m_GraphicsJobs: 0 - - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport m_GraphicsJobs: 0 - m_BuildTarget: AndroidPlayer m_GraphicsJobs: 0 - - m_BuildTarget: BJMSupport - m_GraphicsJobs: 0 - - m_BuildTarget: LinuxStandaloneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: XboxOnePlayer + - m_BuildTarget: WebGLSupport m_GraphicsJobs: 0 m_BuildTargetGraphicsJobMode: - m_BuildTarget: PS4Player @@ -313,11 +513,22 @@ PlayerSettings: m_BuildTargetGraphicsAPIs: - m_BuildTarget: AndroidPlayer m_APIs: 150000000b000000 - m_Automatic: 0 + m_Automatic: 1 - m_BuildTarget: iOSSupport m_APIs: 10000000 m_Automatic: 1 - m_BuildTargetVRSettings: [] + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR openGLRequireES31: 0 openGLRequireES31AEP: 0 openGLRequireES32: 0 @@ -326,61 +537,77 @@ PlayerSettings: Android: 1 iPhone: 1 tvOS: 1 - m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 m_BuildTargetGroupLightmapSettings: [] - m_BuildTargetNormalMapEncoding: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + - m_BuildTarget: iPhone + m_Encoding: 1 + - m_BuildTarget: tvOS + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - m_BuildTarget: Android + m_Format: 3 playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 enableInternalProfiler: 0 logObjCUncaughtExceptions: 1 enableCrashReportAPI: 0 - cameraUsageDescription: - locationUsageDescription: - microphoneUsageDescription: - bluetoothUsageDescription: - switchNMETAOverride: - switchNetLibKey: + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + switchNMETAOverride: + switchNetLibKey: switchSocketMemoryPoolSize: 6144 switchSocketAllocatorPoolSize: 128 switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 switchUseGOLDLinker: 0 + switchLTOSetting: 0 switchApplicationID: 0x01004b9000490000 - switchNSODependencies: - switchTitleNames_0: - switchTitleNames_1: - switchTitleNames_2: - switchTitleNames_3: - switchTitleNames_4: - switchTitleNames_5: - switchTitleNames_6: - switchTitleNames_7: - switchTitleNames_8: - switchTitleNames_9: - switchTitleNames_10: - switchTitleNames_11: - switchTitleNames_12: - switchTitleNames_13: - switchTitleNames_14: - switchTitleNames_15: - switchPublisherNames_0: - switchPublisherNames_1: - switchPublisherNames_2: - switchPublisherNames_3: - switchPublisherNames_4: - switchPublisherNames_5: - switchPublisherNames_6: - switchPublisherNames_7: - switchPublisherNames_8: - switchPublisherNames_9: - switchPublisherNames_10: - switchPublisherNames_11: - switchPublisherNames_12: - switchPublisherNames_13: - switchPublisherNames_14: - switchPublisherNames_15: + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: switchIcons_0: {fileID: 0} switchIcons_1: {fileID: 0} switchIcons_2: {fileID: 0} @@ -413,11 +640,11 @@ PlayerSettings: switchSmallIcons_13: {fileID: 0} switchSmallIcons_14: {fileID: 0} switchSmallIcons_15: {fileID: 0} - switchManualHTML: - switchAccessibleURLs: - switchLegalInformation: + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: switchMainThreadStackSize: 1048576 - switchPresenceGroupId: + switchPresenceGroupId: switchLogoHandling: 0 switchReleaseVersion: 0 switchDisplayVersion: 1.0.0 @@ -425,7 +652,7 @@ PlayerSettings: switchTouchScreenUsage: 0 switchSupportedLanguagesMask: 0 switchLogoType: 0 - switchApplicationErrorCodeCategory: + switchApplicationErrorCodeCategory: switchUserAccountSaveDataSize: 0 switchUserAccountSaveDataJournalSize: 0 switchApplicationAttribute: 0 @@ -445,14 +672,14 @@ PlayerSettings: switchRatingsInt_10: 0 switchRatingsInt_11: 0 switchRatingsInt_12: 0 - switchLocalCommunicationIds_0: - switchLocalCommunicationIds_1: - switchLocalCommunicationIds_2: - switchLocalCommunicationIds_3: - switchLocalCommunicationIds_4: - switchLocalCommunicationIds_5: - switchLocalCommunicationIds_6: - switchLocalCommunicationIds_7: + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: switchParentalControl: 0 switchAllowsScreenshot: 1 switchAllowsVideoCapturing: 1 @@ -477,37 +704,39 @@ PlayerSettings: switchPlayerConnectionEnabled: 1 switchUseNewStyleFilepaths: 0 switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 ps4NPAgeRating: 12 - ps4NPTitleSecret: - ps4NPTrophyPackPath: + ps4NPTitleSecret: + ps4NPTrophyPackPath: ps4ParentalLevel: 11 ps4ContentID: ED1633-NPXX51362_00-0000000000000000 ps4Category: 0 ps4MasterVersion: 01.00 ps4AppVersion: 01.00 ps4AppType: 0 - ps4ParamSfxPath: + ps4ParamSfxPath: ps4VideoOutPixelFormat: 0 ps4VideoOutInitialWidth: 1920 ps4VideoOutBaseModeInitialWidth: 1920 ps4VideoOutReprojectionRate: 60 - ps4PronunciationXMLPath: - ps4PronunciationSIGPath: - ps4BackgroundImagePath: - ps4StartupImagePath: - ps4StartupImagesFolder: - ps4IconImagesFolder: - ps4SaveDataImagePath: - ps4SdkOverride: - ps4BGMPath: - ps4ShareFilePath: - ps4ShareOverlayImagePath: - ps4PrivacyGuardImagePath: - ps4ExtraSceSysFile: - ps4NPtitleDatPath: + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 - ps4RemotePlayKeyMappingDir: + ps4RemotePlayKeyMappingDir: ps4PlayTogetherPlayerCount: 0 ps4EnterButtonAssignment: 1 ps4ApplicationParam1: 0 @@ -535,9 +764,9 @@ PlayerSettings: ps4ScriptOptimizationLevel: 0 ps4Audio3dVirtualSpeakerCount: 14 ps4attribCpuUsage: 0 - ps4PatchPkgPath: - ps4PatchLatestPkgPath: - ps4PatchChangeinfoPath: + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: ps4PatchDayOne: 0 ps4attribUserManagement: 0 ps4attribMoveSupport: 0 @@ -548,23 +777,22 @@ PlayerSettings: ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 ps4CompatibilityPS5: 0 - ps4AllowPS5Detection: 0 ps4GPU800MHz: 1 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] ps4attribVROutputEnabled: 0 - monoEnv: + monoEnv: splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} blurSplashScreenBackground: 1 - spritePackerPolicy: + spritePackerPolicy: webGLMemorySize: 16 webGLExceptionSupport: 1 webGLNameFilesAsHashes: 0 webGLDataCaching: 1 webGLDebugSymbols: 0 - webGLEmscriptenArgs: - webGLModulesDirectory: + webGLEmscriptenArgs: + webGLModulesDirectory: webGLTemplate: APPLICATION:Default webGLAnalyzeBuildSize: 0 webGLUseEmbeddedResources: 0 @@ -577,6 +805,7 @@ PlayerSettings: additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: + Android: 1 Standalone: 1 il2cppCompilerConfiguration: {} managedStrippingLevel: {} @@ -584,26 +813,25 @@ PlayerSettings: suppressCommonWarnings: 1 allowUnsafeCode: 0 useDeterministicCompilation: 1 - useReferenceAssemblies: 1 enableRoslynAnalyzers: 1 - additionalIl2CppArgs: + additionalIl2CppArgs: scriptingRuntimeVersion: 1 - gcIncremental: 0 + gcIncremental: 1 assemblyVersionValidation: 1 gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 m_MobileRenderingPath: 1 - metroPackageName: Template2D - metroPackageVersion: 1.0.0.0 - metroCertificatePath: - metroCertificatePassword: - metroCertificateSubject: - metroCertificateIssuer: + metroPackageName: Template_3D + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: Template_2D + metroApplicationDescription: Template_3D wsaImages: {} - metroTileShortName: simple-test-project + metroTileShortName: metroTileShowName: 0 metroMediumTileShowName: 0 metroLargeTileShowName: 0 @@ -613,27 +841,27 @@ PlayerSettings: metroDefaultTileSize: 1 metroTileForegroundText: 2 metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, - a: 1} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} metroTargetDeviceFamilies: {} - metroFTAName: + metroFTAName: metroFTAFileTypes: [] - metroProtocolName: - XboxOneProductId: - XboxOneUpdateKey: - XboxOneSandboxId: - XboxOneContentId: - XboxOneTitleId: - XboxOneSCId: - XboxOneGameOsOverridePath: - XboxOnePackagingOverridePath: - XboxOneAppManifestOverridePath: + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: XboxOneVersion: 1.0.0.0 XboxOnePackageEncryption: 0 XboxOnePackageUpdateGranularity: 2 - XboxOneDescription: + XboxOneDescription: XboxOneLanguage: - enus XboxOneCapability: [] @@ -646,29 +874,31 @@ PlayerSettings: XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 - XboxOneOverrideIdentityName: - XboxOneOverrideIdentityPublisher: + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: vrEditorSettings: {} cloudServicesEnabled: UNet: 1 luminIcon: - m_Name: - m_ModelFolderPath: - m_PortalFolderPath: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: luminCert: - m_CertPath: + m_CertPath: m_SignPackage: 1 luminIsChannelApp: 0 luminVersion: m_VersionCode: 1 - m_VersionName: + m_VersionName: apiCompatibilityLevel: 6 activeInputHandler: 0 - cloudProjectId: + cloudProjectId: framebufferDepthMemorylessMode: 0 qualitySettingsNames: [] - projectName: - organizationId: + projectName: + organizationId: cloudEnabled: 0 legacyClampBlendShapeWeights: 0 + playerDataPath: + forceSRGBBlit: 1 virtualTexturingSupportEnabled: 0 diff --git a/test-project/ProjectSettings/ProjectVersion.txt b/test-project/ProjectSettings/ProjectVersion.txt index 87079c13..501a25e5 100644 --- a/test-project/ProjectSettings/ProjectVersion.txt +++ b/test-project/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.11f1 -m_EditorVersionWithRevision: 2019.2.11f1 (5f859a4cfee5) +m_EditorVersion: 2021.3.4f1 +m_EditorVersionWithRevision: 2021.3.4f1 (cb45f9cae8b7) diff --git a/test-project/ProjectSettings/QualitySettings.asset b/test-project/ProjectSettings/QualitySettings.asset index 4ae8c38e..7b7658d6 100644 --- a/test-project/ProjectSettings/QualitySettings.asset +++ b/test-project/ProjectSettings/QualitySettings.asset @@ -4,7 +4,7 @@ QualitySettings: m_ObjectHideFlags: 0 serializedVersion: 5 - m_CurrentQuality: 3 + m_CurrentQuality: 5 m_QualitySettings: - serializedVersion: 2 name: Very Low @@ -29,9 +29,16 @@ QualitySettings: vSyncCount: 0 lodBias: 0.3 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 4 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 @@ -57,15 +64,22 @@ QualitySettings: vSyncCount: 0 lodBias: 0.4 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 16 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Medium pixelLightCount: 1 - shadows: 0 + shadows: 1 shadowResolution: 0 shadowProjection: 1 shadowCascades: 1 @@ -76,7 +90,7 @@ QualitySettings: shadowmaskMode: 0 blendWeights: 2 textureQuality: 0 - anisotropicTextures: 0 + anisotropicTextures: 1 antiAliasing: 0 softParticles: 0 softVegetation: 0 @@ -85,15 +99,22 @@ QualitySettings: vSyncCount: 1 lodBias: 0.7 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 64 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: High pixelLightCount: 2 - shadows: 0 + shadows: 2 shadowResolution: 1 shadowProjection: 1 shadowCascades: 2 @@ -104,24 +125,31 @@ QualitySettings: shadowmaskMode: 1 blendWeights: 2 textureQuality: 0 - anisotropicTextures: 0 + anisotropicTextures: 1 antiAliasing: 0 softParticles: 0 softVegetation: 1 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 vSyncCount: 1 lodBias: 1 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 256 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Very High pixelLightCount: 3 - shadows: 0 + shadows: 2 shadowResolution: 2 shadowProjection: 1 shadowCascades: 2 @@ -132,25 +160,32 @@ QualitySettings: shadowmaskMode: 1 blendWeights: 4 textureQuality: 0 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 softVegetation: 1 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 vSyncCount: 1 lodBias: 1.5 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 1024 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Ultra pixelLightCount: 4 - shadows: 0 - shadowResolution: 0 + shadows: 2 + shadowResolution: 2 shadowProjection: 1 shadowCascades: 4 shadowDistance: 150 @@ -160,31 +195,37 @@ QualitySettings: shadowmaskMode: 1 blendWeights: 4 textureQuality: 0 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 softVegetation: 1 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 vSyncCount: 1 lodBias: 2 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 4096 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] m_PerPlatformDefaultQuality: Android: 2 + Lumin: 5 Nintendo 3DS: 5 Nintendo Switch: 5 PS4: 5 - PSM: 5 PSP2: 2 + Stadia: 5 Standalone: 5 - Tizen: 2 WebGL: 3 - WiiU: 5 Windows Store Apps: 5 XboxOne: 5 iPhone: 2 diff --git a/test-project/ProjectSettings/SceneTemplateSettings.json b/test-project/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 00000000..0062e5cd --- /dev/null +++ b/test-project/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,167 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": false + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicMaterial", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": false + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "ignore": false, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + "newSceneOverride": 0 +} diff --git a/test-project/ProjectSettings/TimeManager.asset b/test-project/ProjectSettings/TimeManager.asset index 06bcc6d2..558a017e 100644 --- a/test-project/ProjectSettings/TimeManager.asset +++ b/test-project/ProjectSettings/TimeManager.asset @@ -4,6 +4,6 @@ TimeManager: m_ObjectHideFlags: 0 Fixed Timestep: 0.02 - Maximum Allowed Timestep: 0.1 + Maximum Allowed Timestep: 0.33333334 m_TimeScale: 1 Maximum Particle Timestep: 0.03 diff --git a/test-project/ProjectSettings/UnityConnectSettings.asset b/test-project/ProjectSettings/UnityConnectSettings.asset index fa0b1465..6125b308 100644 --- a/test-project/ProjectSettings/UnityConnectSettings.asset +++ b/test-project/ProjectSettings/UnityConnectSettings.asset @@ -9,6 +9,7 @@ UnityConnectSettings: m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events m_EventUrl: https://cdp.cloud.unity3d.com/v1/events m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com m_TestInitMode: 0 CrashReportingSettings: m_EventUrl: https://perf-events.cloud.unity3d.com diff --git a/test-project/ProjectSettings/VFXManager.asset b/test-project/ProjectSettings/VFXManager.asset index 0ce54343..3a95c98b 100644 --- a/test-project/ProjectSettings/VFXManager.asset +++ b/test-project/ProjectSettings/VFXManager.asset @@ -4,4 +4,9 @@ VFXManager: m_ObjectHideFlags: 0 m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/test-project/ProjectSettings/VersionControlSettings.asset b/test-project/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 00000000..dca28814 --- /dev/null +++ b/test-project/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/test-project/ProjectSettings/boot.config b/test-project/ProjectSettings/boot.config new file mode 100644 index 00000000..e69de29b diff --git a/yarn.lock b/yarn.lock index 988766f0..5817d325 100644 --- a/yarn.lock +++ b/yarn.lock @@ -195,6 +195,14 @@ "@babel/highlight" "^7.22.10" chalk "^2.4.2" +"@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" @@ -240,6 +248,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-compilation-targets@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" @@ -251,18 +269,23 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" @@ -313,6 +336,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" @@ -341,11 +369,25 @@ chalk "^2.4.2" js-tokens "^4.0.0" +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -444,6 +486,15 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -454,18 +505,18 @@ "@babel/types" "^7.22.5" "@babel/traverse@^7.22.10", "@babel/traverse@^7.7.2": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" - integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" debug "^4.1.0" globals "^11.1.0" @@ -478,6 +529,15 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15", "@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -540,6 +600,11 @@ resolved "https://registry.yarnpkg.com/@evilmartians/lefthook/-/lefthook-1.4.9.tgz#3166b4cd663874a22d650964dfd512b87da812bd" integrity sha512-ZnROKwxDs8dJ+pmpXX2xHwU+Ui5P1Md5DMCIQsZCZHngtRb2jOwbUf7AaGJeYVoaC6J2Hb7IL2wYvwfwA2Oy3w== +"@fastify/busboy@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" + integrity "sha1-8igkyv865Qaxgge61BJtvGzNtrg= sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==" + "@github/browserslist-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@github/browserslist-config/-/browserslist-config-1.0.0.tgz#952fe6da3e6b8ed6a368f3a1a08a9d2ef84e8d04" @@ -1988,13 +2053,6 @@ bundle-name@^3.0.0: dependencies: run-applescript "^5.0.0" -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -5654,11 +5712,6 @@ stream-buffers@^3.0.2: resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -6112,11 +6165,11 @@ underscore@^1.9.1: integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== undici@^5.14.0: - version "5.23.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.23.0.tgz#e7bdb0ed42cebe7b7aca87ced53e6eaafb8f8ca0" - integrity sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg== + version "5.27.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411" + integrity "sha1-onDFY66ltGzA3yVQUjY4yVxdRBE= sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==" dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" unity-changeset@^2.0.0: version "2.1.0"