From d1e709da0fdeb8bac3af4a41c58fcaa92b898c26 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Tue, 4 Nov 2025 19:05:14 +0200 Subject: [PATCH 01/10] new project: take initial folder to browse, from new project folder input field #201 --- UnityLauncherPro/NewProject.xaml.cs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/UnityLauncherPro/NewProject.xaml.cs b/UnityLauncherPro/NewProject.xaml.cs index 3a11f14..1325d16 100644 --- a/UnityLauncherPro/NewProject.xaml.cs +++ b/UnityLauncherPro/NewProject.xaml.cs @@ -335,7 +335,30 @@ private void chkForceDX11_Checked(object sender, RoutedEventArgs e) private void btnBrowseForProjectFolder_Click(object sender, RoutedEventArgs e) { - var folder = Tools.BrowseForOutputFolder("Select New Project folder"); + string defaultFolder = null; + if (txtNewProjectFolder.Text != null) + { + if (Directory.Exists(txtNewProjectFolder.Text) == true) + { + defaultFolder = txtNewProjectFolder.Text; + } + else + { + // find closest existing parent folder + var dir = new DirectoryInfo(txtNewProjectFolder.Text); + while (dir.Parent != null) + { + dir = dir.Parent; + if (Directory.Exists(dir.FullName) == true) + { + defaultFolder = dir.FullName; + break; + } + } + } + } + + var folder = Tools.BrowseForOutputFolder("Select New Project folder", defaultFolder); if (string.IsNullOrEmpty(folder) == false && Directory.Exists(folder) == true) { txtNewProjectFolder.Text = folder; From f5f31c08be2be1bcb0ea345ef00e6a9611daccaa Mon Sep 17 00:00:00 2001 From: unitycoder Date: Tue, 4 Nov 2025 19:13:51 +0200 Subject: [PATCH 02/10] new project: Add "Create missing folder" button to create folders from your given path input field #201 --- UnityLauncherPro/NewProject.xaml | 4 +++- UnityLauncherPro/NewProject.xaml.cs | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/UnityLauncherPro/NewProject.xaml b/UnityLauncherPro/NewProject.xaml index c1986db..75bccd9 100644 --- a/UnityLauncherPro/NewProject.xaml +++ b/UnityLauncherPro/NewProject.xaml @@ -49,9 +49,11 @@ + diff --git a/UnityLauncherPro/NewProject.xaml.cs b/UnityLauncherPro/NewProject.xaml.cs index 1325d16..ffd1530 100644 --- a/UnityLauncherPro/NewProject.xaml.cs +++ b/UnityLauncherPro/NewProject.xaml.cs @@ -373,12 +373,29 @@ private void txtNewProjectFolder_TextChanged(object sender, TextChangedEventArgs { txtNewProjectFolder.BorderBrush = Brushes.Red; // not visible if focused btnCreateNewProject.IsEnabled = false; + btnCreateMissingFolder.IsEnabled = true; } else { txtNewProjectFolder.BorderBrush = null; btnCreateNewProject.IsEnabled = true; targetFolder = txtNewProjectFolder.Text; + btnCreateMissingFolder.IsEnabled = false; + } + } + + private void btnCreateMissingFolder_Click(object sender, RoutedEventArgs e) + { + try + { + Directory.CreateDirectory(txtNewProjectFolder.Text); + txtNewProjectFolder.BorderBrush = null; + btnCreateNewProject.IsEnabled = true; + targetFolder = txtNewProjectFolder.Text; + } + catch (Exception ex) + { + Tools.SetStatus("Failed to create folder: " + ex.Message); } } } From 65025c8907accafd48844d50adbdde998031a3ed Mon Sep 17 00:00:00 2001 From: unitycoder Date: Wed, 5 Nov 2025 20:14:45 +0200 Subject: [PATCH 03/10] fix array out of index, if removed last recent project item from list, display error message if try to launch from explorer (without any unity editors) #212 --- UnityLauncherPro/Tools.cs | 10 ++++++++++ UnityLauncherPro/UpgradeWindow.xaml.cs | 16 +++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/UnityLauncherPro/Tools.cs b/UnityLauncherPro/Tools.cs index d245847..11fd57b 100644 --- a/UnityLauncherPro/Tools.cs +++ b/UnityLauncherPro/Tools.cs @@ -274,6 +274,13 @@ public static Process LaunchProject(Project proj, DataGrid dataGridRef = null, b var unityExePath = GetUnityExePath(proj.Version); if (unityExePath == null) { + // if no editors installed, show message + if (MainWindow.unityInstallationsSource.Count == 0) + { + MessageBox.Show($"No Unity versions installed. Please run {MainWindow.appName} first to setup root folders.", MainWindow.appName, MessageBoxButton.OK, MessageBoxImage.Warning); + return null; + } + DisplayUpgradeDialog(proj, null, useInitScript); return null; } @@ -1665,6 +1672,9 @@ public static void SetFocusToGrid(DataGrid targetGrid, int index = -1) DataGridRow row = (DataGridRow)targetGrid.ItemContainerGenerator.ContainerFromIndex(index); if (row == null) { + // clamp to max items + if (index >= targetGrid.Items.Count) index = targetGrid.Items.Count - 1; + targetGrid.ScrollIntoView(targetGrid.Items[index]); // Defer the focus once row is generated targetGrid.Dispatcher.InvokeAsync(() => diff --git a/UnityLauncherPro/UpgradeWindow.xaml.cs b/UnityLauncherPro/UpgradeWindow.xaml.cs index 9c1c48f..22f9477 100644 --- a/UnityLauncherPro/UpgradeWindow.xaml.cs +++ b/UnityLauncherPro/UpgradeWindow.xaml.cs @@ -26,11 +26,6 @@ public UpgradeWindow(string currentVersion, string projectPath, string commandLi gridAvailableVersions.SelectedItem = null; - // we have current version info in project - // enable release and dl buttons - btnOpenReleasePage.IsEnabled = true; - btnDownload.IsEnabled = true; - // if dont have exact version, show red outline if (currentVersion == null || MainWindow.unityInstalledVersions.ContainsKey(currentVersion) == false) { @@ -40,6 +35,10 @@ public UpgradeWindow(string currentVersion, string projectPath, string commandLi if (currentVersion != null) { + // we know the version, enable buttons + btnOpenReleasePage.IsEnabled = true; + btnDownload.IsEnabled = true; + // remove china c1 from version if (currentVersion.Contains("c")) currentVersion = currentVersion.Replace("c1", ""); // find nearest version @@ -150,6 +149,13 @@ private void GridAvailableVersions_PreviewMouseDoubleClick(object sender, MouseB void Upgrade() { var k = (UnityInstallation)gridAvailableVersions.SelectedItem; + + if (k == null) + { + DialogResult = false; + return; + } + upgradeVersion = k.Version; DialogResult = true; } From b9909895ddf0b80d683f9e66694f7503a7fa87ea Mon Sep 17 00:00:00 2001 From: unitycoder Date: Wed, 5 Nov 2025 20:41:20 +0200 Subject: [PATCH 04/10] display error if try to upgrade from commandline, without unty editors #212 --- UnityLauncherPro/MainWindow.xaml.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/UnityLauncherPro/MainWindow.xaml.cs b/UnityLauncherPro/MainWindow.xaml.cs index e965383..f23eb1f 100644 --- a/UnityLauncherPro/MainWindow.xaml.cs +++ b/UnityLauncherPro/MainWindow.xaml.cs @@ -333,7 +333,17 @@ void HandleCommandLineLaunch() { bool useInitScript = (bool)chkUseInitScript.IsChecked; - Tools.DisplayUpgradeDialog(proj, null, useInitScript); + // if not editors found, then dont open commandline? + if (unityInstallationsSource.Count > 0) + { + Tools.DisplayUpgradeDialog(proj, null, useInitScript); + } + else + { + MessageBox.Show("No Unity installations found. Please setup Unity Editor root folders first by running UnityLauncherPro.", "No Unity Installations found", MessageBoxButton.OK, MessageBoxImage.Warning); + // TODO display setup tab + } + } else // no Assets folder here OR Assets folder is empty, then its new project { From 05eb61ed076761248e51936f68446a5d0dd7ba1f Mon Sep 17 00:00:00 2001 From: unitycoder Date: Sun, 9 Nov 2025 23:23:24 +0200 Subject: [PATCH 05/10] dont allow duplicate folders in root folders list fixes #213 --- UnityLauncherPro/MainWindow.xaml.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/UnityLauncherPro/MainWindow.xaml.cs b/UnityLauncherPro/MainWindow.xaml.cs index f23eb1f..3a842be 100644 --- a/UnityLauncherPro/MainWindow.xaml.cs +++ b/UnityLauncherPro/MainWindow.xaml.cs @@ -890,11 +890,18 @@ void AddUnityInstallationRootFolder() var result = dialog.ShowDialog(); var newRoot = dialog.SelectedPath; + + if (lstRootFolders.Items.Contains(newRoot) == true) + { + SetStatus("Folder already exists in the list!", MessageType.Error); + return; + } + if (String.IsNullOrWhiteSpace(newRoot) == false && Directory.Exists(newRoot) == true) { - Properties.Settings.Default.rootFolders.Add(newRoot); + Settings.Default.rootFolders.Add(newRoot); lstRootFolders.Items.Refresh(); - Properties.Settings.Default.Save(); + Settings.Default.Save(); UpdateUnityInstallationsList(); RefreshRecentProjects(); } From 2d69c9a8464914dd47d81dd8401194920cbb0773 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Wed, 12 Nov 2025 22:03:34 +0200 Subject: [PATCH 06/10] add cancel button to corrupted config dialog (to open settings folder) #99 --- UnityLauncherPro/MainWindow.xaml.cs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/UnityLauncherPro/MainWindow.xaml.cs b/UnityLauncherPro/MainWindow.xaml.cs index 3a842be..b0a4dd6 100644 --- a/UnityLauncherPro/MainWindow.xaml.cs +++ b/UnityLauncherPro/MainWindow.xaml.cs @@ -747,14 +747,16 @@ void LoadSettings() { string filename = ((ConfigurationErrorsException)ex.InnerException).Filename; - if (MessageBox.Show("This may be due to a Windows crash/BSOD.\n" + + var res = MessageBox.Show("This may be due to a Windows crash/BSOD.\n" + "Click 'Yes' to use automatic backup (if exists, otherwise settings are reset), then start application again.\n\n" + - "Click 'No' to exit now (and delete user.config manually)\n\nCorrupted file: " + filename, + "Click 'No' to reset config file (you'll need to setup settings again)\n\n" + + "Click 'Cancel' to exit now (and delete user.config manually)\n\nCorrupted file: " + filename, appName + " - Corrupt user settings", - MessageBoxButton.YesNo, - MessageBoxImage.Error) == MessageBoxResult.Yes) - { + MessageBoxButton.YesNoCancel, + MessageBoxImage.Error); + if (res == MessageBoxResult.Yes) + { // try to use backup string backupFilename = filename + ".bak"; if (File.Exists(backupFilename)) @@ -766,6 +768,15 @@ void LoadSettings() File.Delete(filename); } } + else if (res == MessageBoxResult.No) + { + File.Delete(filename); + } + else if (res == MessageBoxResult.Cancel) + { + Tools.ExploreFolder(Path.GetDirectoryName(filename)); + } + // need to restart, otherwise settings not loaded Process.GetCurrentProcess().Kill(); } From d1bd18ab352bbc851965a382ad27f26582233f26 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Wed, 12 Nov 2025 22:54:48 +0200 Subject: [PATCH 07/10] testing project thumbnail (loaded from ProjectSettings/icon.png, if exists) and displayed in projects Context menu #142 --- .../Converters/ThumbnailConverter.cs | 58 +++++++++++++++++++ UnityLauncherPro/MainWindow.xaml | 16 +++++ UnityLauncherPro/MainWindow.xaml.cs | 8 +++ UnityLauncherPro/UnityLauncherPro.csproj | 1 + 4 files changed, 83 insertions(+) create mode 100644 UnityLauncherPro/Converters/ThumbnailConverter.cs diff --git a/UnityLauncherPro/Converters/ThumbnailConverter.cs b/UnityLauncherPro/Converters/ThumbnailConverter.cs new file mode 100644 index 0000000..d389489 --- /dev/null +++ b/UnityLauncherPro/Converters/ThumbnailConverter.cs @@ -0,0 +1,58 @@ +using System; +using System.Globalization; +using System.IO; +using System.Windows.Data; +using System.Windows.Media.Imaging; + +namespace UnityLauncherPro.Converters +{ + public class ThumbnailConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is Project project) + { + if (!string.IsNullOrEmpty(project.Path)) + { + string thumbnailPath = Path.Combine(project.Path, "ProjectSettings", "icon.png"); + + if (File.Exists(thumbnailPath)) + { + try + { + var bitmap = new BitmapImage(); + bitmap.BeginInit(); + bitmap.CacheOption = BitmapCacheOption.OnLoad; + bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache; + bitmap.UriSource = new Uri(thumbnailPath, UriKind.Absolute); + bitmap.DecodePixelWidth = 64; // Match your display size + bitmap.DecodePixelHeight = 64; + + bitmap.EndInit(); + + // Freeze for cross-thread access + if (bitmap.CanFreeze) + { + bitmap.Freeze(); + } + + return bitmap; + } + catch + { + // Ignore and fall back to null + } + } + } + return null; + } + + return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/UnityLauncherPro/MainWindow.xaml b/UnityLauncherPro/MainWindow.xaml index 1e19791..9441c30 100644 --- a/UnityLauncherPro/MainWindow.xaml +++ b/UnityLauncherPro/MainWindow.xaml @@ -12,6 +12,7 @@ + @@ -258,6 +259,21 @@ + + + + + + + + + + + + diff --git a/UnityLauncherPro/MainWindow.xaml.cs b/UnityLauncherPro/MainWindow.xaml.cs index b0a4dd6..d2dde14 100644 --- a/UnityLauncherPro/MainWindow.xaml.cs +++ b/UnityLauncherPro/MainWindow.xaml.cs @@ -4211,6 +4211,14 @@ private void gridRecent_SelectionChanged(object sender, SelectionChangedEventArg } + private void Image_MouseDown(object sender, MouseButtonEventArgs e) + { + var proj = GetSelectedProject(); + if (proj == null) return; + var thumbnailPath = Path.Combine(proj.Path, "ProjectSettings", "icon.png"); + Tools.LaunchExe(thumbnailPath); + } + //private void menuProjectProperties_Click(object sender, RoutedEventArgs e) //{ // var proj = GetSelectedProject(); diff --git a/UnityLauncherPro/UnityLauncherPro.csproj b/UnityLauncherPro/UnityLauncherPro.csproj index 5fe024b..109a7ad 100644 --- a/UnityLauncherPro/UnityLauncherPro.csproj +++ b/UnityLauncherPro/UnityLauncherPro.csproj @@ -85,6 +85,7 @@ + From e3514511378c217905a1025d379fbd9284f64383 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Sun, 16 Nov 2025 20:15:40 +0200 Subject: [PATCH 08/10] fix newproject combobox mouseover color --- UnityLauncherPro/App.xaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/UnityLauncherPro/App.xaml b/UnityLauncherPro/App.xaml index 1d882de..adfad5f 100644 --- a/UnityLauncherPro/App.xaml +++ b/UnityLauncherPro/App.xaml @@ -136,7 +136,7 @@ - + @@ -530,9 +530,6 @@ - - - From fffa97e9999f4a7fc881a12babedb0951954aa89 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Sun, 16 Nov 2025 21:13:00 +0200 Subject: [PATCH 09/10] adding online templates selection to NewProject window --- UnityLauncherPro/Data/OnlineTemplateItem.cs | 12 ++++ UnityLauncherPro/NewProject.xaml | 68 ++++++++++++++++++++- UnityLauncherPro/NewProject.xaml.cs | 58 ++++++++++++++++++ UnityLauncherPro/UnityLauncherPro.csproj | 1 + 4 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 UnityLauncherPro/Data/OnlineTemplateItem.cs diff --git a/UnityLauncherPro/Data/OnlineTemplateItem.cs b/UnityLauncherPro/Data/OnlineTemplateItem.cs new file mode 100644 index 0000000..a5ff4e6 --- /dev/null +++ b/UnityLauncherPro/Data/OnlineTemplateItem.cs @@ -0,0 +1,12 @@ +namespace UnityLauncherPro.Data +{ + public class OnlineTemplateItem + { + public string Name { get; set; } + public string Description { get; set; } + public string RenderPipeline { get; set; } + public string Type { get; set; } // Core, Learning, Sample, + public string PreviewImageURL { get; set; } + public string TarBallURL { get; set; } + } +} \ No newline at end of file diff --git a/UnityLauncherPro/NewProject.xaml b/UnityLauncherPro/NewProject.xaml index 75bccd9..ab08fde 100644 --- a/UnityLauncherPro/NewProject.xaml +++ b/UnityLauncherPro/NewProject.xaml @@ -4,10 +4,16 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:UnityLauncherPro" + xmlns:data="clr-namespace:UnityLauncherPro.Data" + d:DataContext="{d:DesignInstance Type=local:NewProject}" mc:Ignorable="d" - Title="Create New Project" Height="480" Width="500" Background="{DynamicResource ThemeDarkestBackground}" PreviewKeyDown="Window_PreviewKeyDown" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" ShowInTaskbar="True"> + Title="Create New Project" Height="480" Width="640" Background="{DynamicResource ThemeDarkestBackground}" PreviewKeyDown="Window_PreviewKeyDown" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" ShowInTaskbar="True"> + + + + + + + diff --git a/UnityLauncherPro/NewProject.xaml.cs b/UnityLauncherPro/NewProject.xaml.cs index ffd1530..c43f112 100644 --- a/UnityLauncherPro/NewProject.xaml.cs +++ b/UnityLauncherPro/NewProject.xaml.cs @@ -5,6 +5,7 @@ using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; +using UnityLauncherPro.Data; namespace UnityLauncherPro { @@ -31,6 +32,9 @@ public NewProject(string unityVersion, string suggestedName, string targetFolder NewProject.targetFolder = targetFolder; + // TODO could optionally disable templates in settings + _ = LoadOnlineTemplatesAsync(); + // get version newVersion = unityVersion; newName = suggestedName; @@ -398,5 +402,59 @@ private void btnCreateMissingFolder_Click(object sender, RoutedEventArgs e) Tools.SetStatus("Failed to create folder: " + ex.Message); } } + + private async System.Threading.Tasks.Task LoadOnlineTemplatesAsync() + { + // Simulate async loading (replace with actual async HTTP call later) + await System.Threading.Tasks.Task.Run(() => + { + var templates = new List + { + new OnlineTemplateItem + { + Name = "3D Template", + Description = "A great starting point for 3D projects using the Universal Render Pipeline (URP).", + PreviewImageURL = "https://storage.googleapis.com/live-platform-resources-prd/templates/assets/AR_Mobile_Thumbnail_HUB_464008d11a/AR_Mobile_Thumbnail_HUB_464008d11a.png", + Type = "CORE", + RenderPipeline = "URP", + TarBallURL = "https://download.packages.unity.com/com.unity.template.hdrp-blank/-/com.unity.template.hdrp-blank-17.0.2.tgz" + }, + new OnlineTemplateItem + { + Name = "2D Template", + Description = "A great starting point for 2D projects using the Built-in Render Pipeline.", + PreviewImageURL = "https://storage.googleapis.com/live-platform-resources-prd/templates/assets/Platformer_preview_887cd85a63/Platformer_preview_887cd85a63.png", + Type = "CORE", + RenderPipeline = "Built-in", + TarBallURL = "https://download.packages.unity.com/com.unity.template.mr-multiplayer/-/com.unity.template.mr-multiplayer-1.0.3.tgz" + }, + new OnlineTemplateItem + { + Name = "Wubba Template", + Description = "A great asdfasdf projects using.", + PreviewImageURL = "https://storage.googleapis.com/live-platform-resources-prd/templates/assets/2_4_1_Overview_627c09d1be/2_4_1_Overview_627c09d1be.png", + Type = "SAMPLES", + RenderPipeline = "URP", + TarBallURL = "https://download.packages.unity.com/com.unity.template.vr/-/com.unity.template.vr-9.2.0.tgz" + }, + new OnlineTemplateItem + { + Name = "ASDF Template", + Description = "A great asdfasdf projects using.", + PreviewImageURL = "https://storage.googleapis.com/live-platform-resources-prd/templates/assets/HDRP_c27702ce66/HDRP_c27702ce66.jpg", + Type = "LEARNING", + RenderPipeline = "HDRP", + TarBallURL = "https://download.packages.unity.com/com.unity.template.platformer/-/com.unity.template.platformer-5.0.5.tgz" + } + }; + + // Update UI on dispatcher thread + Dispatcher.Invoke(() => + { + listOnlineTemplates.Items.Clear(); + listOnlineTemplates.ItemsSource = templates; + }); + }); + } } } diff --git a/UnityLauncherPro/UnityLauncherPro.csproj b/UnityLauncherPro/UnityLauncherPro.csproj index 109a7ad..d1fa0f5 100644 --- a/UnityLauncherPro/UnityLauncherPro.csproj +++ b/UnityLauncherPro/UnityLauncherPro.csproj @@ -90,6 +90,7 @@ + From dc8a1bdd4721ec93777848c5d51a509ad8167584 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Sun, 16 Nov 2025 21:40:34 +0200 Subject: [PATCH 10/10] Adding template loading into NewProject panel #147 Fix ForceDX11 checkbox (was always enabled by default) --- .../Data/TemplateGraphQLResponse.cs | 49 ++++ UnityLauncherPro/NewProject.xaml | 4 +- UnityLauncherPro/NewProject.xaml.cs | 227 ++++++++++++++---- .../Properties/Settings.Designer.cs | 12 + UnityLauncherPro/Properties/Settings.settings | 3 + UnityLauncherPro/UnityLauncherPro.csproj | 1 + 6 files changed, 251 insertions(+), 45 deletions(-) create mode 100644 UnityLauncherPro/Data/TemplateGraphQLResponse.cs diff --git a/UnityLauncherPro/Data/TemplateGraphQLResponse.cs b/UnityLauncherPro/Data/TemplateGraphQLResponse.cs new file mode 100644 index 0000000..32bdd91 --- /dev/null +++ b/UnityLauncherPro/Data/TemplateGraphQLResponse.cs @@ -0,0 +1,49 @@ +namespace UnityLauncherPro.Data +{ + public class TemplateGraphQLResponse + { + public TemplateData data { get; set; } + } + + public class TemplateData + { + public GetTemplates getTemplates { get; set; } + } + + public class GetTemplates + { + public TemplateEdge[] edges { get; set; } + } + + public class TemplateEdge + { + public TemplateNode node { get; set; } + } + + public class TemplateNode + { + public string name { get; set; } + public string packageName { get; set; } + public string description { get; set; } + public string type { get; set; } + public string renderPipeline { get; set; } + public PreviewImage previewImage { get; set; } + public TemplateVersion[] versions { get; set; } + } + + public class PreviewImage + { + public string url { get; set; } + } + + public class TemplateVersion + { + public string name { get; set; } + public Tarball tarball { get; set; } + } + + public class Tarball + { + public string url { get; set; } + } +} \ No newline at end of file diff --git a/UnityLauncherPro/NewProject.xaml b/UnityLauncherPro/NewProject.xaml index ab08fde..b756f3f 100644 --- a/UnityLauncherPro/NewProject.xaml +++ b/UnityLauncherPro/NewProject.xaml @@ -34,7 +34,7 @@