Beispiel #1
0
        void OnGUI()
        {
            EditorGUILayout.LabelField("UMA Prefab Saver", EditorStyles.boldLabel);
            EditorGUILayout.HelpBox("This will convert an UMA avatar into a non-UMA prefab. Once converted, it can be reused with little overhead, but all UMA functionality will be lost.", MessageType.None, false);
            baseObject          = (UMAAvatarBase)EditorGUILayout.ObjectField("UMA Avatar", baseObject, typeof(UMAAvatarBase), true);
            UnswizzleNormalMaps = EditorGUILayout.Toggle("Unswizzle Normals", UnswizzleNormalMaps);
            CharacterName       = EditorGUILayout.TextField("Prefab Name", CharacterName);
            prefabFolder        = EditorGUILayout.ObjectField("Prefab Base Folder", prefabFolder, typeof(UnityEngine.Object), false) as UnityEngine.Object;

            string folder = CheckFolder(ref prefabFolder);

            if (prefabFolder != null && baseObject != null && !string.IsNullOrEmpty(CharacterName))
            {
                if (GUILayout.Button("Make Prefab") && prefabFolder != null)
                {
                    UMAAvatarLoadSaveMenuItems.ConvertToNonUMA(baseObject.gameObject, baseObject, folder, UnswizzleNormalMaps, CharacterName);
                    EditorUtility.DisplayDialog("UMA Prefab Saver", "Conversion complete", "OK");
                }
            }
            else
            {
                if (baseObject == null)
                {
                    EditorGUILayout.HelpBox("A valid character with DynamicCharacterAvatar or DynamicAvatar must be supplied", MessageType.Error);
                }
                if (string.IsNullOrEmpty(CharacterName))
                {
                    EditorGUILayout.HelpBox("Prefab Name cannot be empty", MessageType.Error);
                }
                if (prefabFolder == null)
                {
                    EditorGUILayout.HelpBox("A valid base folder must be supplied", MessageType.Error);
                }
            }
        }
 public void SetAvatar(GameObject newAvatarObject)
 {
     if (guideUMA != null)
     {
         if (newAvatarObject == guideUMA.gameObject)
         {
             //reset guide transparency one we have sussed out how to do this
             guideUMA = null;
         }
     }
     if (targetUMA == null || newAvatarObject != targetUMA.gameObject)
     {
         if (newAvatarObject.GetComponent <UMAAvatarBase>() != null)
         {
             targetUMA = newAvatarObject.GetComponent <UMAAvatarBase>();
             activeUMA = newAvatarObject.GetComponent <UMAAvatarBase>();
             SetAvailableConverters(activeUMA.umaData);
             selectedConverter = null;
         }
         else
         {
             targetUMA = null;
             activeUMA = null;
             availableConverters.Clear();
             selectedConverter = null;
         }
     }
 }
/*
 *      public AvatarMask currentAvatarMask;
 *      public bool exportRestPose;
 *      public bool T1R;
 *      void Update() {
 *          if (exportRestPose) {
 *              ExportRestPose();
 *              exportRestPose = false;
 *          }
 *      }
 *
 *      public void ExportRestPose() {
 *
 *          List<string> _parts = new List<string>();
 *          List<Quaternion> _rotations = new List<Quaternion>();
 *          Vector3 translation = Vector3.zero;
 *
 *          for (int i = 0; i < currentAvatarMask.transformCount; i++) {
 *              if (!currentAvatarMask.GetTransformActive(i)) continue;
 *              string boneName = currentAvatarMask.GetTransformPath(i).Split(new char[] { '/' }).Last();
 *              if (!CanonicalRepresentation.HAnimBoneNames.Contains(boneName)) continue;
 *              CanonicalRepresentation.HAnimBones canonicalBone = (CanonicalRepresentation.HAnimBones)System.Enum.Parse(typeof(CanonicalRepresentation.HAnimBones), boneName, false);
 *              MappedBone _ltc = rig.boneMap.FirstOrDefault(m => m.canonicalBoneName == canonicalBone);
 *              if (_ltc == null) continue;
 *              if (T1R && _rotations.Count == 0) {
 *                  translation = _ltc.CurrentPositionInCanonical();
 *              }
 *
 *              _rotations.Add(_ltc.CurrentRotationInCanonical());
 *              _parts.Add(boneName);
 *          }
 *
 *          string res = "";
 *          string encoding = "R";
 *          if (T1R) encoding = "T1R";
 *
 *          string parts = string.Join(" ", _parts.ToArray());
 *          res += "<SkeletonPose encoding=\""+encoding+"\" rotationEncoding=\"quaternions\" parts=\""+ parts + "\">\n";
 *          res += "\t";
 *          if (T1R) res += translation.ToASAPString() + " ";
 *          res += string.Join(" ", _rotations.ToArray().Select(q => q.ToASAPString()).ToArray());
 *          res += "\n</SkeletonPose>";
 *
 *          Debug.Log(res);
 *      }
 */

        protected override void Awake()
        {
            base.Awake();
            uma = GetComponent <UMAAvatarBase>();
            uma.CharacterCreated.AddListener(OnCreated);
            uma.CharacterUpdated.AddListener(OnUpdated);
        }
 // Update is called once per frame
 void Update()
 {
     if (activeUMA != targetUMA)
     {
         activeUMA = targetUMA;
         if (activeUMA.umaData != null)
         {
             SetAvailableConverters(activeUMA.umaData);
         }
         else
         {
             availableConverters.Clear();
         }
     }
     if (activeUMA != null)
     {
         if (activeUMA.umaData != null)
         {
             if (activeUMA.umaData.umaRecipe != null)
             {
                 if (activeUMA.umaData.umaRecipe.raceData != null)
                 {
                     if (activeUMA.umaData.umaRecipe.raceData.raceName != activeUMARace)
                     {
                         activeUMARace = activeUMA.umaData.umaRecipe.raceData.raceName;
                         SetAvailableConverters(activeUMA.umaData);
                     }
                 }
             }
         }
     }
     //TODO make the guide /target semi transparent...
 }
        public override void OnEnter()
        {
            avatar = ((GameObject)gameObject.Value).GetComponent <UMAAvatarBase> ();
            var asset = ScriptableObject.CreateInstance <UMATextRecipe>();

            asset.recipeString = recipe.Value;
            avatar.Load(asset);
            Finish();
        }
Beispiel #6
0
 public override void OnEnter()
 {
     avatar  = ((GameObject)gameObject.Value).GetComponent <UMAAvatarBase> ();
     umaData = avatar.umaData;
     umaData.GetSlot(slotIndex).RemoveOverlay(((OverlayData)overlay.Value).overlayName);
     umaData.isShapeDirty   = true;
     umaData.isTextureDirty = true;
     umaData.Dirty();
     Finish();
 }
Beispiel #7
0
        private void SaveAndStart(GameObject selectedChar)
        {
            //Save the selected UMA into a static string so we can access it from the Game Scene
            UMAAvatarBase avatar = selectedChar.GetComponent <UMAAvatarBase>();
            UMATextRecipe asset  = ScriptableObject.CreateInstance <UMATextRecipe>();

            asset.Save(avatar.umaData.umaRecipe, avatar.context);
            umaString = asset.recipeString;

            //Start network host
            manager.StartHost();
        }
        // Use this for initialization
        void Start()
        {
            //TODO make the guide/target semi transparent

            /*targetAlphaTex = new Texture2D(2,2);
             * guideAlphaTex = new Texture2D(2,2);
             * var AlphaColor = new Color(guideAlpha, guideAlpha, guideAlpha, 1f);
             * guideAlphaTex.SetPixel(0, 0, AlphaColor);
             * guideAlphaTex.SetPixel(0, 1, AlphaColor);
             * guideAlphaTex.SetPixel(1, 0, AlphaColor);
             * guideAlphaTex.SetPixel(1, 1, AlphaColor);*/
            if (targetUMA != null)
            {
                activeUMA = targetUMA;
                activeUMA.CharacterUpdated.AddListener(SetAvailableConverters);
            }
        }
        public override void OnEnter()
        {
            avatar  = ((GameObject)gameObject.Value).GetComponent <UMAAvatarBase> ();
            umaData = avatar.umaData;
            foreach (int mSlotIndex in slotIndex)
            {
                foreach (int mOverlayIndex in overlayIndex)
                {
                    OverlayData overlayData = umaData.GetSlot(mSlotIndex).GetOverlay(mOverlayIndex);
                    overlayData.color = color.Value;
                }
            }

            umaData.isShapeDirty   = true;
            umaData.isTextureDirty = true;
            umaData.Dirty();
            if (!everyFrame)
            {
                Finish();
            }
        }
Beispiel #10
0
    void GenerateUMA()
    {
        umaDynamicAvatar = avatarGOFactory.Create();
        GameObject player = umaDynamicAvatar.gameObject;

        player.name = "MyUMA";

        this.slotLibrary    = umaDynamicAvatar.context.slotLibrary;
        this.overlayLibrary = umaDynamicAvatar.context.overlayLibrary;
        this.raceLibrary    = umaDynamicAvatar.context.raceLibrary;

        umaData = player.AddComponent <UMAData> ();
        umaDynamicAvatar.umaData = umaData;
        umaData.umaRecipe        = CreateMaleRecipe();

        // Generate UMA
        umaDynamicAvatar.UpdateNewRace();

        Animator animator = player.GetComponent <Animator>();
//		controller.m_Animator = animator;
    }
Beispiel #11
0
    void Loading()
    {
        if (Application.isPlaying)
        {
            //	umaData = gameObject.GetComponent<UMAData>();

            var selectedTransform = transform;
            avatar = selectedTransform.GetComponent <UMAAvatarBase>();

            while (avatar == null && selectedTransform.parent != null)
            {
                selectedTransform = selectedTransform.parent;
                avatar            = selectedTransform.GetComponent <UMAAvatarBase>();
            }
            if (avatar != null)
            {
                var asset = ScriptableObject.CreateInstance <UMATextRecipe>();
                asset.recipeString = _StreamedUMA;

                if (avatar.umaData == null)
                {
                    avatar.umaData = gameObject.AddComponent <UMAData>();
                }
                if (avatar.umaData.umaRecipe == null)
                {
                    avatar.umaData.umaRecipe = new UMAData.UMARecipe();
                }

                avatar.Load(asset);
                Destroy(asset);
                Debug.Log("Auto Loading");
                //	Invoke ( "ApplyDNA", 3f );
                //	ApplyDNA();
            }
            //	if (  avatar.umaData != null ){
            //		ApplyDNA();
            //	}
        }
    }
Beispiel #12
0
        void OnGUI()
        {
            EditorGUILayout.LabelField("UMA Prefab Saver", EditorStyles.boldLabel);
            EditorGUILayout.HelpBox("This will convert an UMA avatar into a non-UMA prefab. Once converted, it can be reused with little overhead, but all UMA functionality will be lost.", MessageType.None, false);
            baseObject = (UMAAvatarBase)EditorGUILayout.ObjectField("UMA Avatar", baseObject, typeof(UMAAvatarBase), true);
            EditorGUILayout.HelpBox("If you unswizzle normals (recommended) then they can be used in other applications, and UMA will automatically mark them as normal maps in the import settings.", MessageType.None);
            UnswizzleNormalMaps = EditorGUILayout.Toggle("Unswizzle Normals", UnswizzleNormalMaps);
            EditorGUILayout.HelpBox("Adding Standalone DNA will allow you to adjust most DNA of the character, without it being an UMA. However, it will require that you have the UMA system in the project.", MessageType.None);
            AddStandaloneDNA = EditorGUILayout.Toggle("Add Standalone DNA", AddStandaloneDNA);
            CharacterName    = EditorGUILayout.TextField("Prefab Name", CharacterName);
            prefabFolder     = EditorGUILayout.ObjectField("Prefab Base Folder", prefabFolder, typeof(UnityEngine.Object), false) as UnityEngine.Object;

            string folder = CheckFolder(ref prefabFolder);

            if (prefabFolder != null && baseObject != null && !string.IsNullOrEmpty(CharacterName))
            {
                if (GUILayout.Button("Make Prefab") && prefabFolder != null)
                {
                    UMAAvatarLoadSaveMenuItems.ConvertToNonUMA(baseObject.gameObject, baseObject, folder, UnswizzleNormalMaps, CharacterName, AddStandaloneDNA);
                    EditorUtility.DisplayDialog("UMA Prefab Saver", "Conversion complete", "OK");
                }
            }
            else
            {
                if (baseObject == null)
                {
                    EditorGUILayout.HelpBox("A valid character with DynamicCharacterAvatar or DynamicAvatar must be supplied", MessageType.Error);
                }
                if (string.IsNullOrEmpty(CharacterName))
                {
                    EditorGUILayout.HelpBox("Prefab Name cannot be empty", MessageType.Error);
                }
                if (prefabFolder == null)
                {
                    EditorGUILayout.HelpBox("A valid base folder must be supplied", MessageType.Error);
                }
            }
        }
Beispiel #13
0
        public static void ConvertToNonUMA(GameObject baseObject, UMAAvatarBase avatar, string Folder, bool ConvertNormalMaps, string CharName)
        {
            Folder = Folder + "/" + CharName;

            if (!System.IO.Directory.Exists(Folder))
            {
                System.IO.Directory.CreateDirectory(Folder);
            }

            SkinnedMeshRenderer[] renderers = avatar.umaData.GetRenderers();
            int meshno = 0;

            foreach (SkinnedMeshRenderer smr in renderers)
            {
                Material[] mats = smr.sharedMaterials;

                int Material = 0;
                foreach (Material m in mats)
                {
                    // get each texture.
                    // if the texture has been generated (has no path) then we need to convert to Texture2D (if needed) save that asset.
                    // update the material with that material.
                    List <Texture> allTexture = new List <Texture>();
                    Shader         shader     = m.shader;
                    for (int i = 0; i < ShaderUtil.GetPropertyCount(shader); i++)
                    {
                        if (ShaderUtil.GetPropertyType(shader, i) == ShaderUtil.ShaderPropertyType.TexEnv)
                        {
                            string  propertyName = ShaderUtil.GetPropertyName(shader, i);
                            Texture texture      = m.GetTexture(propertyName);
                            if (texture is Texture2D || texture is RenderTexture)
                            {
                                string path = AssetDatabase.GetAssetPath(texture.GetInstanceID());
                                if (string.IsNullOrEmpty(path))
                                {
                                    if (ConvertNormalMaps && propertyName.ToLower().Contains("bumpmap"))
                                    {
                                        // texture = ConvertNormalMap(texture);
                                        texture = sconvertNormalMap(texture);
                                    }
                                    string texName = Path.Combine(Folder, CharName + "_Mat_" + Material + propertyName + ".png");
                                    SaveTexture(texture, texName);
                                    AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
                                    Texture2D tex = AssetDatabase.LoadAssetAtPath <Texture2D>(CustomAssetUtility.UnityFriendlyPath(texName));
                                    m.SetTexture(propertyName, tex);
                                }
                            }
                        }
                    }
                    string matname = Folder + "/" + CharName + "_Mat_" + Material + ".mat";
                    CustomAssetUtility.SaveAsset <Material>(m, matname);
                    Material++;
                    // Save the material to disk?
                    // update the SMR
                }

                string meshName = Folder + "/" + CharName + "_Mesh_" + meshno + ".asset";
                meshno++;
                // Save Mesh to disk.
                CustomAssetUtility.SaveAsset <Mesh>(smr.sharedMesh, meshName);
                smr.sharedMaterials = mats;
                smr.materials       = mats;
            }

            // save Animator Avatar.
            var animator = baseObject.GetComponent <Animator>();

            string avatarName = Folder + "/" + CharName + "_Avatar.asset";

            CustomAssetUtility.SaveAsset <Avatar>(animator.avatar, avatarName);

            DestroyImmediate(avatar);
            var lod = baseObject.GetComponent <UMASimpleLOD>();

            if (lod != null)
            {
                DestroyImmediate(lod);
            }

            var ud = baseObject.GetComponent <UMAData>();

            if (ud != null)
            {
                DestroyImmediate(ud);
            }

            var ue = baseObject.GetComponent <UMAExpressionPlayer>();

            if (ue != null)
            {
                DestroyImmediate(ue);
            }

            baseObject.name = CharName;
            string prefabName = Folder + "/" + CharName + ".prefab";

            prefabName = CustomAssetUtility.UnityFriendlyPath(prefabName);
            PrefabUtility.SaveAsPrefabAssetAndConnect(baseObject, prefabName, InteractionMode.AutomatedAction);
        }
Beispiel #14
0
    void SendDNAToUMA()
    {
        umaData = DefaultUMA.GetComponent <UMAData>();
        //	UMADnaHumanoid umaDna = new UMADnaHumanoid();
        //	UMADnaHumanoid umaDna = _LoadUMA.umaDna;
        //	umaRecipe.ClearDna();
        //	umaRecipe.AddDna(umaDna);
        UMAAvatarBase avatar = DefaultUMA.GetComponent <UMAAvatarBase>();

        if (avatar.context == null)
        {
            GameObject tmpObj = GameObject.Find("UMAContext");
            if (tmpObj)
            {
                avatar.context = tmpObj.GetComponent <UMAContext>();
            }
            else
            {
                Debug.LogError("UMA is missing from your scene. UMA is required to generate a UMA avatar.");
            }
        }
        try{
            if (avatar.context != null)
            {
                foreach (DKRaceData.DNAConverterData dkDNA in _DK_UMACrowd.umaData.DNAList2)
                {
                    //	DKRaceData.DNAConverterData dkDNA = _DK_UMACrowd.umaData.DNAList2[i];
                    float DnaValue = 0;

                    //	if ( dkDNA.Value < 0.0f ) DnaValue = 0.0f;
                    //	else if ( dkDNA.Value > 0.9f ) DnaValue = 0.9f;
                    //	else
                    DnaValue = dkDNA.Value;

                    //	Debug.Log ( dkDNA.Name+" "+dkDNA.Value );
                    //	Debug.Log ( _LoadUMA.umaDna.height );

                    if (dkDNA.Name.ToLower() == "height")
                    {
                        _LoadUMA.umaDna.height = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "headsize")
                    {
                        _LoadUMA.umaDna.headSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "headwidth")
                    {
                        _LoadUMA.umaDna.headWidth = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "neckthickness")
                    {
                        _LoadUMA.umaDna.neckThickness = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "handssize")
                    {
                        _LoadUMA.umaDna.handsSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "feetsize")
                    {
                        _LoadUMA.umaDna.feetSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "legsseparation")
                    {
                        _LoadUMA.umaDna.legSeparation = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "waist")
                    {
                        _LoadUMA.umaDna.waist = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "armlength")
                    {
                        _LoadUMA.umaDna.armLength = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "forearmlength")
                    {
                        _LoadUMA.umaDna.forearmLength = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "armwidth")
                    {
                        _LoadUMA.umaDna.armWidth = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "forearmwidth")
                    {
                        _LoadUMA.umaDna.forearmWidth = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "uppermuscle")
                    {
                        _LoadUMA.umaDna.upperMuscle = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "upperweight")
                    {
                        _LoadUMA.umaDna.upperWeight = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "lowermuscle")
                    {
                        _LoadUMA.umaDna.lowerMuscle = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "lowerweight")
                    {
                        _LoadUMA.umaDna.lowerWeight = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "belly")
                    {
                        _LoadUMA.umaDna.belly = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "legssize")
                    {
                        _LoadUMA.umaDna.legsSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "gluteussize")
                    {
                        _LoadUMA.umaDna.gluteusSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "earssize")
                    {
                        _LoadUMA.umaDna.earsSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "earsposition")
                    {
                        _LoadUMA.umaDna.earsPosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "earsrotation")
                    {
                        _LoadUMA.umaDna.earsRotation = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "nosesize")
                    {
                        _LoadUMA.umaDna.noseSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "nosecurve")
                    {
                        _LoadUMA.umaDna.noseCurve = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "nosewidth")
                    {
                        _LoadUMA.umaDna.noseWidth = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "noseinclination")
                    {
                        _LoadUMA.umaDna.noseInclination = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "noseposition")
                    {
                        _LoadUMA.umaDna.nosePosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "nosepronounced")
                    {
                        _LoadUMA.umaDna.nosePronounced = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "noseflatten")
                    {
                        _LoadUMA.umaDna.noseFlatten = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "chinsize")
                    {
                        _LoadUMA.umaDna.chinSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "chinpronounced")
                    {
                        _LoadUMA.umaDna.chinPronounced = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "chinposition")
                    {
                        _LoadUMA.umaDna.chinPosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "mandiblesize")
                    {
                        _LoadUMA.umaDna.mandibleSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "jawssize")
                    {
                        _LoadUMA.umaDna.jawsSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "jawsposition")
                    {
                        _LoadUMA.umaDna.jawsPosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "cheeksize")
                    {
                        _LoadUMA.umaDna.cheekSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "cheekposition")
                    {
                        _LoadUMA.umaDna.cheekPosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "lowcheekpronounced")
                    {
                        _LoadUMA.umaDna.lowCheekPronounced = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "lowcheekposition")
                    {
                        _LoadUMA.umaDna.lowCheekPosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "foreheadsize")
                    {
                        _LoadUMA.umaDna.foreheadSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "foreheadposition")
                    {
                        _LoadUMA.umaDna.foreheadPosition = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "lipssize")
                    {
                        _LoadUMA.umaDna.lipsSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "mouthsize")
                    {
                        _LoadUMA.umaDna.mouthSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "eyerotation")
                    {
                        _LoadUMA.umaDna.eyeRotation = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "eyesize")
                    {
                        _LoadUMA.umaDna.eyeSize = DnaValue;
                    }
                    else if (dkDNA.Name.ToLower() == "breastsize")
                    {
                        _LoadUMA.umaDna.breastSize = DnaValue;
                    }
                    //	_LoadUMA.umaDna = umaDna;
                }
            }
        }catch (NullReferenceException) {}
        Finish();
    }
Beispiel #15
0
 void Awake()
 {
     uma = GetComponent <UMAAvatarBase>();
     uma.CharacterCreated.AddListener(OnCreated);
     uma.CharacterUpdated.AddListener(OnUpdated);
 }
Beispiel #16
0
    void GenerateUMA()
    {
        umaDynamicAvatar = avatarGOFactory.Create();
        GameObject player = umaDynamicAvatar.gameObject;
        player.name = "MyUMA";

        this.slotLibrary = umaDynamicAvatar.context.slotLibrary;
        this.overlayLibrary = umaDynamicAvatar.context.overlayLibrary;
        this.raceLibrary = umaDynamicAvatar.context.raceLibrary;

        umaData = player.AddComponent<UMAData> ();
        umaDynamicAvatar.umaData = umaData;
        umaData.umaRecipe = CreateMaleRecipe();

        // Generate UMA
        umaDynamicAvatar.UpdateNewRace();

        Animator animator = player.GetComponent<Animator>();
        //		controller.m_Animator = animator;
    }
Beispiel #17
0
        public static void ConvertToNonUMA(GameObject baseObject, UMAAvatarBase avatar, string Folder, bool ConvertNormalMaps, string CharName, bool AddStandaloneDNA)
        {
            Folder = Folder + "/" + CharName;

            if (!System.IO.Directory.Exists(Folder))
            {
                System.IO.Directory.CreateDirectory(Folder);
            }

            SkinnedMeshRenderer[] renderers = avatar.umaData.GetRenderers();
            int meshno = 0;

            foreach (SkinnedMeshRenderer smr in renderers)
            {
                Material[] mats = smr.sharedMaterials;

                int Material = 0;
                foreach (Material m in mats)
                {
                    // get each texture.
                    // if the texture has been generated (has no path) then we need to convert to Texture2D (if needed) save that asset.
                    // update the material with that material.
                    List <Texture> allTexture = new List <Texture>();
                    Shader         shader     = m.shader;
                    for (int i = 0; i < ShaderUtil.GetPropertyCount(shader); i++)
                    {
                        if (ShaderUtil.GetPropertyType(shader, i) == ShaderUtil.ShaderPropertyType.TexEnv)
                        {
                            string  propertyName = ShaderUtil.GetPropertyName(shader, i);
                            Texture texture      = m.GetTexture(propertyName);
                            if (texture is Texture2D || texture is RenderTexture)
                            {
                                bool   isNormal = false;
                                string path     = AssetDatabase.GetAssetPath(texture.GetInstanceID());
                                if (string.IsNullOrEmpty(path))
                                {
                                    if (ConvertNormalMaps)
                                    {
                                        if (propertyName.ToLower().Contains("bumpmap") || propertyName.ToLower().Contains("normal"))
                                        {
                                            // texture = ConvertNormalMap(texture);
                                            texture  = sconvertNormalMap(texture);
                                            isNormal = true;
                                        }
                                    }
                                    string texName = Path.Combine(Folder, CharName + "_Mat_" + Material + propertyName + ".png");
                                    SaveTexture(texture, texName);
                                    AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
                                    if (isNormal)
                                    {
                                        TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(texName);
                                        importer.isReadable         = true;
                                        importer.textureType        = TextureImporterType.NormalMap;
                                        importer.maxTextureSize     = 1024;                                     // or whatever
                                        importer.textureCompression = TextureImporterCompression.CompressedHQ;
                                        EditorUtility.SetDirty(importer);
                                        importer.SaveAndReimport();
                                    }

                                    Texture2D tex = AssetDatabase.LoadAssetAtPath <Texture2D>(CustomAssetUtility.UnityFriendlyPath(texName));
                                    m.SetTexture(propertyName, tex);
                                }
                            }
                        }
                    }
                    string matname = Folder + "/" + CharName + "_Mat_" + Material + ".mat";
                    CustomAssetUtility.SaveAsset <Material>(m, matname);
                    Material++;
                    // Save the material to disk?
                    // update the SMR
                }

                string meshName = Folder + "/" + CharName + "_Mesh_" + meshno + ".asset";
                meshno++;
                // Save Mesh to disk.
                smr.sharedMesh.Optimize();
                CustomAssetUtility.SaveAsset <Mesh>(smr.sharedMesh, meshName);
                smr.sharedMaterials = mats;
                smr.materials       = mats;
            }

            // save Animator Avatar.
            var animator = baseObject.GetComponent <Animator>();

            string avatarName = Folder + "/" + CharName + "_Avatar.asset";

            CustomAssetUtility.SaveAsset <Avatar>(animator.avatar, avatarName);

            DestroyImmediate(avatar);
            var lod = baseObject.GetComponent <UMASimpleLOD>();

            if (lod != null)
            {
                DestroyImmediate(lod);
            }

            if (AddStandaloneDNA)
            {
                UMAData       uda = baseObject.GetComponent <UMAData>();
                StandAloneDNA sda = baseObject.AddComponent <UMA.StandAloneDNA>();
                sda.PackedDNA = UMAPackedRecipeBase.GetPackedDNA(uda._umaRecipe);
                if (avatar is DynamicCharacterAvatar)
                {
                    DynamicCharacterAvatar avt = avatar as DynamicCharacterAvatar;
                    sda.avatarDefinition = avt.GetAvatarDefinition(true);
                }
                sda.umaData = uda;
            }
            else
            {
                var ud = baseObject.GetComponent <UMAData>();
                if (ud != null)
                {
                    DestroyImmediate(ud);
                }
            }
            var ue = baseObject.GetComponent <UMAExpressionPlayer>();

            if (ue != null)
            {
                DestroyImmediate(ue);
            }

            baseObject.name = CharName;
            string prefabName = Folder + "/" + CharName + ".prefab";

            prefabName = CustomAssetUtility.UnityFriendlyPath(prefabName);
            PrefabUtility.SaveAsPrefabAssetAndConnect(baseObject, prefabName, InteractionMode.AutomatedAction);
        }