private Material[] GetSourceMaterials(KitbashSourceConfig config) { Material[] result = new Material[config.Materials.Length]; for (int i = 0; i < config.Materials.Length; i++) { result[i] = (Material)PrefabManager.Cache.GetPrefab(typeof(Material), config.Materials[i]); } return(result); }
private bool Kitbash(GameObject kitbashedPrefab, KitbashSourceConfig config) { // Try to load a custom prefab GameObject sourcePrefab = PrefabManager.Instance.GetPrefab(config.SourcePrefab); // If no prefab is found, warn and return if (!sourcePrefab) { Logger.LogWarning($"No prefab found for {config}"); return(false); } GameObject sourceGameObject = sourcePrefab.transform.Find(config.SourcePath).gameObject; Transform parentTransform = config.TargetParentPath != null?kitbashedPrefab.transform.Find(config.TargetParentPath) : kitbashedPrefab.transform; if (parentTransform == null) { Logger.LogWarning($"Target parent not found for {config}"); return(false); } GameObject kitbashObject = Object.Instantiate(sourceGameObject, parentTransform); kitbashObject.name = config.Name ?? sourceGameObject.name; kitbashObject.transform.localPosition = config.Position; kitbashObject.transform.localRotation = config.Rotation; kitbashObject.transform.localScale = config.Scale; if (config.Materials != null) { Material[] sourceMaterials = GetSourceMaterials(config); if (sourceMaterials == null) { Logger.LogWarning($"No materials found for {config}"); return(false); } SkinnedMeshRenderer[] targetSkinnedMeshRenderers = kitbashObject.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer targetSkinnedMeshRenderer in targetSkinnedMeshRenderers) { targetSkinnedMeshRenderer.sharedMaterials = sourceMaterials; targetSkinnedMeshRenderer.materials = sourceMaterials; } MeshRenderer[] targetMeshRenderers = kitbashObject.GetComponentsInChildren <MeshRenderer>(); foreach (MeshRenderer targetMeshRenderer in targetMeshRenderers) { targetMeshRenderer.sharedMaterials = sourceMaterials; targetMeshRenderer.materials = sourceMaterials; } } return(true); }