i_jemin

Archive

← 아카이브로

유니티 패키지 일괄 업데이트 스크립트.

현재 유니티 프로젝트에 설치된 패키지들을 모두 최신 버전으로 일괄 업데이트하는 스크립트.
이 스크립트를 프로젝트에 추가하면 유니티 상단 메뉴에서 Utils/Update All Packages 버튼이 생긴다.

UnityPackageBatchUpdate.cs

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;
using Unity.EditorCoroutines.Editor;

namespace Unity.Editor.Example
{
    static class UnityPackageBatchUpdate
    {
        [MenuItem("Utils/Update All Packages")]
        static void UpdateAllPackages()
        {
            EditorCoroutineUtility.StartCoroutineOwnerless(UpdateRoutine());
        }

        private static IEnumerator UpdateRoutine()
        {
            var listToUpdate = new List<string>();
            var listRequest = Client.List();

            while(!listRequest.IsCompleted)
            {
                yield return new WaitForSeconds(0.1f);
            }

            var packageCollection = listRequest.Result;

            foreach(var package in packageCollection)
            {
                if(!package.isDirectDependency)
                {
                    continue;
                }

                var targetVersion = string.Empty;
                
                for(var i = package.versions.compatible.Length - 1; i >= 0; i--)
                {
                    var version = package.versions.compatible[i];
                    
                    if(version.Contains("pre") || version.Contains("exp"))
                    {
                        continue;
                    }

                    targetVersion = version;
                    break;   
                }
                listToUpdate.Add($"{package.name}@{targetVersion}");
            }

            Client.AddAndRemove(listToUpdate.ToArray(), Array.Empty<string>());
        }
    }
}

https://gist.github.com/IJEMIN/21cbd8f9e1086727df08e53562d16484