/// <summary> /// Load bindposes and bones matrices from resources scriptable object /// </summary> /// <param name="gender"></param> /// <param name="weapon"></param> /// <returns></returns> public BindPoses loadBindPoses(GameObject skeleton, GenderType gender, WeaponType weapon) { BindPoses poses = ScriptableObject.Instantiate <BindPoses>((BindPoses)Resources.Load("Animation/" + gender.ToString() + "/" + weapon.ToString() + "/bindPoses")); for (int i = 0; i < poses.boneNames.Length; i++) { poses.boneTransforms[i] = Utils.findChild(skeleton, poses.boneNames[i]); } return(poses); }
public void GenerateAnimationAsset(GenderType gender, RigType rig, Dictionary <String, String> zmoPaths) { GameObject skeleton = new GameObject("skeleton"); bool male = (gender == GenderType.MALE); ZMD zmd = new ZMD(male ? "Assets/3DData/Avatar/MALE.ZMD" : "Assets/3DData/Avatar/FEMALE.ZMD"); zmd.buildSkeleton(skeleton); BindPoses poses = ScriptableObject.CreateInstance <BindPoses>(); poses.bindPoses = zmd.bindposes; poses.boneNames = getBoneNames(zmd.boneTransforms); poses.boneTransforms = zmd.boneTransforms; LoadClips(skeleton, zmd, gender, rig, zmoPaths); string path = "Assets/Resources/Animation/" + gender.ToString() + "/" + rig.ToString() + "/skeleton.prefab"; AssetDatabase.CreateAsset(poses, path.Replace("skeleton.prefab", "bindPoses.asset")); AssetDatabase.SaveAssets(); PrefabUtility.CreatePrefab(path, skeleton); }
private void LoadPlayerSkeleton(GenderType gender, WeaponType weapType, RigType rig, int weapon, int body, int arms, int foot, int hair, int face, int back, int cap, int shield) { // First destroy any children of player int childs = player.transform.childCount; for (int i = childs - 1; i > 0; i--) Utils.Destroy(player.transform.GetChild(i).gameObject); Utils.Destroy (skeleton); if( rig == RigType.FOOT) skeleton = rm.loadSkeleton(gender, weapType); else skeleton = rm.loadSkeleton(gender, rig); bindPoses = rm.loadBindPoses (skeleton, gender, weapType); skeleton.transform.parent = player.transform; skeleton.transform.localPosition = new Vector3 (0, 0, 0); skeleton.transform.localRotation = Quaternion.Euler (new Vector3 (0, 0, 0)); // If player has already been initialized, make sure it knows that the skeleton has changed in order to restart its state machine with new animations PlayerController controller = player.GetComponent<PlayerController> (); if( controller != null ) controller.OnSkeletonChange (); //load all objects playerBounds = new Bounds(player.transform.position, Vector3.zero); playerBounds.Encapsulate(LoadObject(BodyPartType.BODY, body)); playerBounds.Encapsulate(LoadObject(BodyPartType.ARMS, arms)); playerBounds.Encapsulate(LoadObject(BodyPartType.FOOT, foot)); playerBounds.Encapsulate(LoadObject(BodyPartType.FACE, face)); LoadObject(BodyPartType.CAP, cap); String hairOffsetStr = rm.stb_cap_list.Cells[cap][34]; int hairOffset = (hairOffsetStr == "") ? 0 : int.Parse(hairOffsetStr); playerBounds.Encapsulate(LoadObject(BodyPartType.HAIR, hair - hair%5 + hairOffset)); LoadObject(BodyPartType.SUBWEAPON, shield); LoadObject(BodyPartType.WEAPON, weapon); LoadObject(BodyPartType.BACK, back); //player.SetActive(true); }