Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,15 @@
</StackPanel>
</StackPanel>
</Border>
<Border Background="{StaticResource EmphasisColorBrush}" Margin="20,0">
<TextBlock Text="{sd:Localize Hierarchy}" Margin="20,10" FontSize="16"/>
</Border>
<Border Margin="20,10,20,20">
<StackPanel>
<CheckBox Content="{sd:Localize Split model by hierarchy (generates prefab), Context=Button}" IsChecked="{Binding SplitModelByHierarchy}" Margin="5"/>
<TextBlock Text="{sd:Localize When enabled\, each node in the source file becomes a separate model asset and a prefab is generated that mirrors the original hierarchy.}" Margin="25,0,5,5" TextWrapping="Wrap" FontSize="11" Foreground="Gray"/>
</StackPanel>
</Border>
<UniformGrid Rows="1" Margin="20">
<Button Content="{sd:Localize OK, Context=Button}" Margin="0,0,20,0" Padding="8" Click="ButtonOk" IsDefault="True"/>
<Button Content="{sd:Localize Cancel, Context=Button}" Padding="8" Click="ButtonCancel" IsCancel="True"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public DummyReferenceContainer()
private bool importSkeleton = true;
private bool dontImportSkeleton;
private bool reuseSkeleton;
private bool splitModelByHierarchy;

public ImportModelFromFileViewModel(IViewModelServiceProvider serviceProvider)
: base(serviceProvider)
Expand All @@ -71,6 +72,8 @@ public ImportModelFromFileViewModel(IViewModelServiceProvider serviceProvider)

public bool ReuseSkeleton { get { return reuseSkeleton; } set { SetValue(ref reuseSkeleton, value); } }

public bool SplitModelByHierarchy { get { return splitModelByHierarchy; } set { SetValue(ref splitModelByHierarchy, value); } }

public Skeleton SkeletonToReuse { get { return referenceContainer.Skeleton; } set { referenceContainer.Skeleton = value; } }

public GraphViewModel ReferenceViewModel { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public static class ModelFromFileTemplateSettings
public static SettingsKey<bool> ImportAnimations = new SettingsKey<bool>("Templates/ModelFromFile/ImportAnimations", PackageUserSettings.SettingsContainer, true);
public static SettingsKey<bool> ImportSkeleton = new SettingsKey<bool>("Templates/ModelFromFile/ImportSkeleton", PackageUserSettings.SettingsContainer, true);
public static SettingsKey<AssetId> DefaultSkeleton = new SettingsKey<AssetId>("Templates/ModelFromFile/DefaultSkeleton", PackageUserSettings.SettingsContainer, AssetId.Empty);
public static SettingsKey<bool> SplitModelByHierarchy = new SettingsKey<bool>("Templates/ModelFromFile/SplitModelByHierarchy", PackageUserSettings.SettingsContainer, false);
}

public class ModelFromFileTemplateGenerator : AssetFromFileTemplateGenerator
Expand All @@ -43,6 +44,7 @@ public class ModelFromFileTemplateGenerator : AssetFromFileTemplateGenerator
protected static readonly PropertyKey<bool> ImportAnimationsKey = new PropertyKey<bool>("ImportAnimations", typeof(ModelFromFileTemplateGenerator));
protected static readonly PropertyKey<bool> ImportSkeletonKey = new PropertyKey<bool>("ImportSkeleton", typeof(ModelFromFileTemplateGenerator));
protected static readonly PropertyKey<Skeleton> SkeletonToUseKey = new PropertyKey<Skeleton>("SkeletonToUse", typeof(ModelFromFileTemplateGenerator));
protected static readonly PropertyKey<bool> SplitModelByHierarchyKey = new PropertyKey<bool>("SplitModelByHierarchy", typeof(ModelFromFileTemplateGenerator));

public override bool IsSupportingTemplate(TemplateDescription templateDescription)
{
Expand Down Expand Up @@ -72,7 +74,8 @@ protected override async Task<bool> PrepareAssetCreation(AssetTemplateGeneratorP
DeduplicateMaterials = ModelFromFileTemplateSettings.DeduplicateMaterials.GetValue(profile, true),
ImportTextures = ModelFromFileTemplateSettings.ImportTextures.GetValue(profile, true),
ImportAnimations = ModelFromFileTemplateSettings.ImportAnimations.GetValue(profile, true),
ImportSkeleton = ModelFromFileTemplateSettings.ImportSkeleton.GetValue(profile, true)
ImportSkeleton = ModelFromFileTemplateSettings.ImportSkeleton.GetValue(profile, true),
SplitModelByHierarchy = ModelFromFileTemplateSettings.SplitModelByHierarchy.GetValue(profile, false)
}
};

Expand All @@ -97,13 +100,15 @@ protected override async Task<bool> PrepareAssetCreation(AssetTemplateGeneratorP
parameters.Tags.Set(ImportAnimationsKey, window.Parameters.ImportAnimations);
parameters.Tags.Set(ImportSkeletonKey, window.Parameters.ImportSkeleton);
parameters.Tags.Set(SkeletonToUseKey, skeletonToReuse);
parameters.Tags.Set(SplitModelByHierarchyKey, window.Parameters.SplitModelByHierarchy);

// Save settings
ModelFromFileTemplateSettings.ImportMaterials.SetValue(window.Parameters.ImportMaterials, profile);
ModelFromFileTemplateSettings.DeduplicateMaterials.SetValue(window.Parameters.DeduplicateMaterials, profile);
ModelFromFileTemplateSettings.ImportTextures.SetValue(window.Parameters.ImportTextures, profile);
ModelFromFileTemplateSettings.ImportAnimations.SetValue(window.Parameters.ImportAnimations, profile);
ModelFromFileTemplateSettings.ImportSkeleton.SetValue(window.Parameters.ImportSkeleton, profile);
ModelFromFileTemplateSettings.SplitModelByHierarchy.SetValue(window.Parameters.SplitModelByHierarchy, profile);
skeletonId = AttachedReferenceManager.GetAttachedReference(skeletonToReuse)?.Id ?? AssetId.Empty;
ModelFromFileTemplateSettings.DefaultSkeleton.SetValue(skeletonId, profile);
parameters.Package.UserSettings.Save();
Expand All @@ -123,9 +128,11 @@ protected override IEnumerable<AssetItem> CreateAssets(AssetTemplateGeneratorPar
var importAnimations = parameters.Tags.Get(ImportAnimationsKey);
var importSkeleton = parameters.Tags.Get(ImportSkeletonKey);
var skeletonToReuse = parameters.Tags.Get(SkeletonToUseKey);
var splitModelByHierarchy = parameters.Tags.Get(SplitModelByHierarchyKey);

var importParameters = new AssetImporterParameters { Logger = parameters.Logger };
importParameters.InputParameters.Set(ModelAssetImporter.DeduplicateMaterialsKey, deduplicateMaterials);
importParameters.InputParameters.Set(ModelAssetImporter.SplitModelByHierarchyKey, splitModelByHierarchy);
importParameters.SelectedOutputTypes.Add(typeof(ModelAsset), true);
importParameters.SelectedOutputTypes.Add(typeof(MaterialAsset), importMaterials);
importParameters.SelectedOutputTypes.Add(typeof(TextureAsset), importTextures);
Expand Down
Loading