private void SelectRecord(int id) { flagEdit = 2; selectedRecord = id; SkinsTable.Skin tRec = listSkins.Find(x => x.ID == id); skinName = tRec.Name; bodyModelSelected = bodyModelList.FindIndex(x => x.ID == tRec.IDModel); defSkin = tRec.DefaultSkin; FilterSlots(bodyModelSelected); List <SkinsTable.SkinSlots> tList = skinTable.GetSlotsList(selectedRecord, true); //Fill the material list for (int i = 0; i < tList.Count; i++) { MaterialPrefab tMat = new MaterialPrefab(); tMat = materialList.Find(x => x.IDSlot == tList [i].IDSkinSlot); tMat.PrefabName = tList [i].MaterialName; //Try to find the object Material prefabToLoad = (Material)Resources.Load(_config.GetPathName(CSConfig.PathTypeEnum.SkinsPath) + "/" + tMat.PrefabName); if (prefabToLoad != null) { tMat.Prefab = prefabToLoad; tMat.PrefabSelected = prefabToLoad; } else { tMat.PrefabError = true; } } }
//** ApplyBodyModel ** //Change the actual model used by the actor public void ApplyBodyModel(int modelID) { if (_config == null) { return; } //Get the name of the prefab to be used BodyModelTable.BodyModel model = tableBodyModel.GetModel(modelID); if (model == null) { Debug.LogError("Cannot retrieve the prefab of Body Model."); } //Assembly the full name with the path where the models are stored string modelPath = _config.GetPathName(CSConfig.PathTypeEnum.BodyModelsPath) + "/" + model.ModelName; //Load the model prefab GameObject objModel = (GameObject)Resources.Load(modelPath); if (objModel == null) { //Cannot load the model. Don't continue Debug.LogError("Cannot retrieve the prefab of Body Model. Prefab not found."); } //Retrieve the bone estructure that need to be used SkinnedMeshRenderer bSource = bonesSource.GetComponent <SkinnedMeshRenderer> (); //Remove actual model from actor if (actorBody.ActorModel != null) { Destroy(actorBody.ActorModel); } //Assign the new model to actor controller actorBody.ActorModel = GameObject.Instantiate(objModel) as GameObject; actorBody.ActorModel.transform.SetParent(this.gameObject.transform, false); //For each sub object of the model set the bone structure to be used foreach (Transform child in actorBody.ActorModel.transform) { SkinnedMeshRenderer bDest = child.GetComponent <SkinnedMeshRenderer> (); bDest.bones = bSource.bones; } oldBodySubtype = actorBody.BodySubtype; //Update information about the actor's body model actorBody.BodyID = modelID; actorBody.BodyStructure = model.IDBodyStructure; actorBody.BodySubtype = model.IDBodySubtype; actorBody.BodyModel = modelPath; actorBody.EyeID = model.IDEye; //Find the bone structure object actorBody.BonesArmature = transform.Find(model.ArmatureName); //Retrieve the clothing method used by this model / body structure tableBodyStructure.GetList(); actorBody.ClothingType = tableBodyStructure.GetRecord(model.IDBodyStructure).ClothingMethod; if (AutoChangeCloth) { ChangeClothesForModel(); } //Apply the default skin SkinsTable.Skin tSkin = tableSkins.GetDefaultSkin(actorBody.BodyID); if (tSkin != null) { actorBody.SkinID = tSkin.ID; ApplyBodySkin(actorBody.SkinID); } else { Debug.LogWarning("Body model doesn't have a default skin."); } }