Unity Model Stitching improved script .cs
Model Stitching .cs with Tag find function.
Code (csharp): ClothStitching
- using System.Collections.Generic;using UnityEngine;public class AvatarStitching : MonoBehaviour{public GameObject objPlayer;private ClothClass clothClassName;private void Awake(){if (!objPlayer) objPlayer = this.gameObject;}/// <summary>/// public add cloth function/// </summary>/// <param name="clothObj">Object to add</param>public void AddCloth(GameObject clothObj, ClothClass partType , bool bAttach){if (!bAttach) { AddCloth(clothObj, partType.ToString(), objPlayer); }else { AddCloth(clothObj, partType.ToString(), partType.ToString()); }}/// <summary>/// private attach cloth function/// </summary>/// <param name="clothOBJ"></param>/// <param name="rootName"></param>void AddCloth(GameObject clothOBJ, string tag, string rootName){DestroyChildren(FindChildByName(tag, this.transform));Transform rootTransform = FindChildByName(rootName, this.transform);GameObject obj = Instantiate(clothOBJ, rootTransform);obj.transform.parent = rootTransform;obj.tag = tag;}/// <summary>/// private add cloth main function/// </summary>/// <param name="boneOBJ">Object to add</param>/// <param name="rootOBJ">Character object</param>void AddCloth(GameObject boneOBJ, string tag, GameObject rootOBJ){DestroyOld(tag);var boneOBJs = boneOBJ.gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();foreach (var skinnedRenderer in boneOBJs){ProcessBoneObject(skinnedRenderer, rootOBJ, tag);}}void ProcessBoneObject( SkinnedMeshRenderer thisRenderer, GameObject rootObj, string tag){//Create the SubObjectvar newObj = new GameObject(thisRenderer.gameObject.name);newObj.transform.parent = rootObj.transform;newObj.tag = tag;//Add the renderernewObj.AddComponent<SkinnedMeshRenderer>();var newRenderer = newObj.GetComponent<SkinnedMeshRenderer>();//Assemble Bone Structurevar myBones = new Transform[thisRenderer.bones.Length];for(var i = 0; i < thisRenderer.bones.Length; i++)myBones[i] = FindChildByName(thisRenderer.bones[i].name, rootObj.transform);//Assemble RenderernewRenderer.bones = myBones;newRenderer.sharedMesh = thisRenderer.sharedMesh;newRenderer.sharedMaterials = thisRenderer.sharedMaterials;}/// <summary>/// Iterator for finding child class/// </summary>/// <param name="thisName"></param>/// <param name="thisGameObject"></param>/// <returns></returns>private Transform FindChildByName(string thisName, Transform thisGameObject){Transform returnOBJ;if (thisGameObject.name == thisName)return thisGameObject;foreach(Transform child in thisGameObject){returnOBJ = FindChildByName(thisName, child);if (returnOBJ) return returnOBJ;}return null;}private Transform[] FindChildsByTag(string thisTag, Transform thisGameObject){List<Transform> returnOBJs = new List<Transform>();if (thisGameObject.tag == thisTag) returnOBJs.Add(thisGameObject);foreach (Transform child in thisGameObject){if (child.tag == thisTag) returnOBJs.Add(child);}return returnOBJs.ToArray();}private void DestroyChildren(Transform rootTransform) {foreach (Transform child in rootTransform) Destroy(child.gameObject);}/* private Transform FindChildByTag(string thisTag, Transform thisGameObject){Transform returnOBJ;if (thisGameObject.tag == thisTag)return thisGameObject;foreach (Transform child in thisGameObject){returnOBJ = FindChildByTag(thisTag, child);if (returnOBJ) return returnOBJ;}return null;}*/void DestroyOld(string name){DestroyWithTag(name, objPlayer.transform);//ClothTagCheck(name, ref clothClassName);}void DestroyWithTag(string tagName, Transform parent){Transform[] destroyTarget = FindChildsByTag(tagName, parent);foreach(var content in destroyTarget){Destroy(content.gameObject);}}/* void ClothTagCheck(string name, ref ClothClass clothClassOut){foreach (ClothClass clothClass in System.Enum.GetValues(typeof(ClothClass))){if (StringContains(name, clothClass.ToString())){clothClassOut = clothClass;DestroyWithTag(clothClass, objPlayer.transform);}}return;}*/bool StringContains(string name, string search){if (name.Contains(search)) return true;else return false;}}
Code (csharp): DataSet
- public enum ClothClass { Hair = 0, Upper, Lower, Onepiece , Shoes, Socks }
댓글
댓글 쓰기