|
# UnityHubのパス |
|
$unityhub = "C:\Program Files\Unity Hub\Unity Hub.exe" |
|
|
|
function VRC-Check-UnityVersions { |
|
# VRChatの指定Unityバージョン 2021-08-06 |
|
$VrcUnityVersion = [PSCustomObject]@{ |
|
v2018 = "2018.4.20f1" |
|
v2019 = "2019.4.29f1" |
|
} |
|
$UnityPath = [PSCustomObject]@{ |
|
v2018 = $NULL |
|
v2019 = $NULL |
|
} |
|
|
|
# $result = Start-Process -FilePath ($unityhub) -ArgumentList "-- --headless editors --installed" -PassThru -Wait |
|
& $unityhub -- --headless editors --installed | Set-Variable -Name "result" |
|
|
|
foreach ($textline in $result) { |
|
$r = $textline.split(",") |
|
if ($r.Length -eq 2) { |
|
# VRChatの指定Unityバージョンチェック |
|
if ($r[0].trim() -eq $VrcUnityVersion.v2018) { |
|
$UnityPath.v2018 = $r[1].Replace("installed at ", "").Trim() |
|
} |
|
if ($r[0].trim() -eq $VrcUnityVersion.v2019) { |
|
$UnityPath.v2019 = $r[1].Replace("installed at ", "").Trim() |
|
} |
|
} |
|
} |
|
|
|
if ($NULL -ne $UnityPath.v2018) { |
|
Write-Information ("Unity " + $VrcUnityVersion.v2018 + ", Installed at " + $UnityPath.v2018) |
|
} |
|
else { |
|
Write-Error "Unity $VrcUnityVersion.v2018, not found" |
|
exit |
|
} |
|
|
|
if ($NULL -ne $UnityPath.v2019) { |
|
Write-Information ("Unity " + $VrcUnityVersion.v2019 + ", Installed at " + $UnityPath.v2019) |
|
} |
|
else { |
|
Write-Error "Unity $VrcUnityVersion.v2019, not found" |
|
exit |
|
} |
|
|
|
return $UnityPath |
|
} |
|
|
|
function VRC-Backup-UnityProject($projPath) { |
|
|
|
$ProjectPath = [PSCustomObject]@{ |
|
v2018 = $projPath |
|
v2018zip = $null |
|
v2019 = $null |
|
} |
|
$ProjectPath.v2018zip = ($ProjectPath.v2018 + ".zip") |
|
$ProjectPath.v2019 = $ProjectPath.v2018 + ".unity2019" |
|
|
|
Write-Information ("Information Unity2018: " + $ProjectPath.v2018 ) |
|
Write-Information ("Information Unity2019: " + $ProjectPath.v2019 ) |
|
|
|
# zipファイルの作成 |
|
if ((Test-Path $ProjectPath.v2018zip) -eq $TRUE) { |
|
Write-Error ("Already Unity2019 project zipfile. (`"$ProjectPath.v2018zip`")" ) |
|
exit |
|
} |
|
else { |
|
Write-Host " Unity2018 Folder to Zip" |
|
Compress-Archive -Path ($ProjectPath.v2018) -DestinationPath ($ProjectPath.v2018zip) -CompressionLevel Optimal |
|
} |
|
|
|
# フォルダごとコピー |
|
if ((Test-Path ($ProjectPath.v2019)) -eq $TRUE) { |
|
Write-Error ("Already Unity2019 project folder." + " (`"" + ($ProjectPath.v2019) + "`")") |
|
exit |
|
} |
|
else { |
|
Write-Host " COPY: Unity2018 to New Folder" |
|
Write-Host " from: " ($ProjectPath.v2018) |
|
Write-Host " to: " ($ProjectPath.v2019) |
|
$rbcpFrom = $ProjectPath.v2018 |
|
$rbcpTo = $ProjectPath.v2019 |
|
robocopy.exe "$rbcpFrom" "$rbcpTo" /MIR |
|
} |
|
|
|
return $ProjectPath |
|
} |
|
|
|
function VRC-DownloadSDK($version) { |
|
if ($version -eq "2") { |
|
$SDKURL = "https://vrchat.com/download/sdk2" |
|
} |
|
elseif ($version -eq "3") { |
|
$SDKURL = "https://vrchat.com/download/sdk3-avatars" |
|
} |
|
else { |
|
exit |
|
} |
|
|
|
# SDKバージョンチェック |
|
try { |
|
Write-Host " Check VRCSDK public version." |
|
$curlResult = cmd /C "curl -si $SDKURL" |
|
$temp_name = "" |
|
foreach ($str in $curlResult.Split(" ")) { |
|
if ($str.StartsWith("https") -And $str.EndsWith(".unitypackage")) { |
|
$temp_name = $str.Split('/') |
|
} |
|
} |
|
$sdkPackage = $temp_name[-1] |
|
} |
|
catch { |
|
Write-Host $Error[0] |
|
} |
|
|
|
Write-Host " Newest VRCSDK version is $sdkPackage." |
|
|
|
if (Test-Path ".\$sdkPackage") { |
|
Write-Host " SKIP. VRCSDK download." |
|
} |
|
else { |
|
try { |
|
$requestResult = Invoke-WebRequest $SDKURL -OutFile ".\$sdkPackage" |
|
Write-Host " VRCSDK($sdkPackage) download complete." |
|
} |
|
catch { |
|
Write-Error " ERROR: VRCSDK download." |
|
$error[0] |
|
} |
|
} |
|
|
|
$SDKPath = (Resolve-Path ".\$sdkPackage").Path |
|
return $SDKPath |
|
} |
|
|
|
|
|
Write-Host "START." |
|
|
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
|
|
##### UnityHubのインストールチェック |
|
if ((Test-Path $unityhub) -ne $TRUE) { |
|
Write-Error "UnityHub, not found" |
|
exit |
|
} |
|
|
|
##### UnityEditorのインストールバージョンチェック |
|
$UnityEditorPath = VRC-Check-UnityVersions |
|
|
|
|
|
$InPath = Read-Host "Unity2018 project folder " |
|
if (($PowerShellVersion.Major -eq "5") -and ($PowerShellVersion.Minor -eq "1")) { |
|
if ($InPath.StartsWith("`"")) { |
|
$InPath = $InPath.Substring(1) |
|
} |
|
if ($InPath.EndsWith("`"")) { |
|
$InPath = $InPath.Substring(0, $InPath.Length - 1) |
|
} |
|
Write-Host $InPath |
|
} |
|
else { |
|
Write-Error "PowerShell version 5.1 ONLY" |
|
} |
|
|
|
|
|
##### プロジェクトのバックアップ |
|
Write-Host "----------" |
|
Write-Host "STEP 00: Backup UnityProject." |
|
$ProjectPath = VRC-Backup-UnityProject $InPath |
|
# Write-Host "STEP 00: Backup UnityProject, complete" |
|
Write-Host " for Unity2019: " $ProjectPath.v2019 |
|
Write-Host " Backup Zipfile: " $ProjectPath.v2018zip |
|
|
|
##### Unityの実行 |
|
### step 01: Unity2018で起動テスト |
|
Write-Host "----------" |
|
Write-Host "STEP 01: Check project by Unity2018." |
|
|
|
$logfile = ($ProjectPath.v2018) + ".unity2019.step0001.log" |
|
Write-Host " UnityEditor2018 Logfile: $logfile" |
|
& ($UnityEditorPath.v2018) -batchmode -nographics -projectPath ($ProjectPath.v2019) ` |
|
-quit -logfile ($logfile) | Set-Variable -Name "result" |
|
if ($result) { |
|
Write-Debug $result |
|
} |
|
|
|
### step 02: Unity2018で起動. VRCSDKのバージョンアップ |
|
Write-Host "----------" |
|
Write-Host "STEP 02: Update VRCSDK by Unity2018." |
|
# SDK2 or SDK3-Avatar の判定 |
|
$VrcsdkVersion = $null |
|
Write-Host "VRCSDK Version check." |
|
|
|
if (Test-Path(Join-Path $ProjectPath.v2019 "Assets\VRCSDK\SDK2\")) { |
|
$VrcsdkVersion = "2" |
|
Write-Host " VRCSDK Version is SDK2." |
|
$SdkPath = VRC-DownloadSDK("2") |
|
} |
|
elseif (Test-Path(Join-Path $ProjectPath.v2019 "Assets\VRCSDK\SDK3A\")) { |
|
$VrcsdkVersion = "3" |
|
Write-Host " VRCSDK Version is SDK3-Avatars" |
|
VRC-DownloadSDK("3") |
|
} |
|
|
|
# SDK2, 古いバージョンフォルダの削除 |
|
if ($VrcsdkVersion -eq "2") { |
|
Write-Host " DELETE: Old VRCSDK2." |
|
Remove-Item (join-path $ProjectPath.v2019 "Assets\VRCSDK.meta") |
|
Remove-Item (join-path $ProjectPath.v2019 "Assets\VRCSDK\") -Recurse |
|
} |
|
|
|
# Unity2018の起動 |
|
Write-Host " Import UnityPackage: $SdkPath" |
|
|
|
$logfile = ($ProjectPath.v2018) + ".unity2019.step0002.log" |
|
Write-Host " UnityEditor2018 Logfile: $logfile" |
|
|
|
& ($UnityEditorPath.v2018) -batchmode -nographics -projectPath ($ProjectPath.v2019) ` |
|
-importPackage ($SdkPath) ` |
|
-quit -logfile ($logfile) | Set-Variable -Name "result" |
|
if ($result) { |
|
Write-Debug $result |
|
} |
|
|
|
|
|
### step 03: Unity2019で起動. Unity projectのアップグレード(2018 -> 2019) |
|
Write-Host "----------" |
|
Write-Host "STEP 03: Upgrade Unity project 2018 to 2019." |
|
$logfile = ($ProjectPath.v2018) + ".unity2019.step0003.log" |
|
Write-Host " UnityEditor2019 Logfile: $logfile" |
|
Write-Warning " *** Please operate manually, 'Asset Database Upgrade'. *** " |
|
& ($UnityEditorPath.v2019) -projectPath ($ProjectPath.v2019) -quit -logfile ($logfile) | Set-Variable -Name "result" |
|
if ($result) { |
|
Write-Debug $result |
|
} |
|
|
|
Write-Host "---------- " -BackgroundColor "DarkGreen" -ForegroundColor "White" |
|
Write-Host "STEP 04: COMPLETE ALL !!" -BackgroundColor "DarkGreen" -ForegroundColor "White" |
|
Write-Host "---------- " -BackgroundColor "DarkGreen" -ForegroundColor "White" |
|
|
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "" |
|
Write-Host "FINISH." |
|
|
|
$DebugPreference = $originalDebugPreference |
|
$InformationPreference = $originalInformationPreference |
|
|
|
pause |