[InitializeOnLoad] public static class AutoImportRequiredPackages { static readonly List requiredPackageList = new List() { "com.unity.visualeffectgraph@10.2.2", "com.unity.render-pipelines.universal@10.2.2", "com.unity.inputsystem@1.0.2" }; static AutoImportRequiredPackages() { Process(); } private static async void Process() { foreach (var requiredPackage in requiredPackageList) { try { var installed = await CheckInstalled(requiredPackage); if (!installed) { var result = await Install(requiredPackage); } } catch (Exception e) { Debug.LogError("Installation failed: " + requiredPackage + "\n====\n" + e.Message); } } } private static async Task CheckInstalled(string packageName) { var listRequest = Client.List(); while (listRequest.Status == StatusCode.InProgress) { await Task.Delay(100); } if (listRequest.Status == StatusCode.Success) { var find = listRequest .Result .ToList() .Any(packageCollection => packageCollection.packageId.StartsWith(packageName)); if(!find) Debug.Log("Not installed: " + packageName + ""); return find; } throw new Exception(listRequest.Error.message); } private static async Task Install(string packageName) { var addRequest = Client.Add(packageName); while (addRequest.Status == StatusCode.InProgress) { await Task.Delay(100); } if (addRequest.Status == StatusCode.Success) { Debug.Log("Install completed: " + addRequest.Result.packageId + ""); return true; } throw new Exception(addRequest.Error.message); } }