private static Transform[] TranslateTransforms(Transform[] sources, TransformCatalog transformCatalog) { Transform[] targets = new Transform[sources.Length]; for (int index = 0; index < sources.Length; index++) { targets[index] = DictionaryExtensions.Find(transformCatalog, sources[index].name); } return(targets); }
private Transform[] TranslateTransforms(Transform[] source, TransformCatalog catalog) { Transform[] newTrans = new Transform[source.Length]; for (int i = 0; i < newTrans.Length; i++) { newTrans[i] = DictionaryExtensions.Find(catalog, source[i].name); } return(newTrans); }
/// <summary> /// Stitch clothing onto an avatar. Both clothing and avatar must be instantiated however clothing may be destroyed after. /// </summary> /// <param name="sourceClothing"></param> /// <param name="targetAvatar"></param> /// <returns>Newly created clothing on avatar</returns> public GameObject Stitch(GameObject sourceClothing, GameObject targetAvatar) { var boneCatalog = new TransformCatalog(targetAvatar.transform); var skinnedMeshRenderers = sourceClothing.GetComponentsInChildren <SkinnedMeshRenderer> (); var targetClothing = AddChild(sourceClothing, targetAvatar.transform); foreach (var sourceRenderer in skinnedMeshRenderers) { var targetRenderer = AddSkinnedMeshRenderer(sourceRenderer, targetClothing); targetRenderer.bones = TranslateTransforms(sourceRenderer.bones, boneCatalog); } return(targetClothing); }
public GameObject Stitch(GameObject source, GameObject target) { TransformCatalog catalog = new TransformCatalog(target.transform); SkinnedMeshRenderer[] skinnedMeshes = source.GetComponentsInChildren <SkinnedMeshRenderer>(); GameObject cloth = AddNewChild(source, target.transform); for (int i = 0; i < skinnedMeshes.Length; i++) { SkinnedMeshRenderer renderer = AddSkinnedMeshRenderer(skinnedMeshes[i], cloth); renderer.bones = TranslateTransforms(skinnedMeshes[i].bones, catalog); } return(cloth); }
/// <summary> /// Stitch clothing onto an avatar. Both clothing and avatar must be instantiated however clothing may be destroyed after. /// </summary> /// <param name="sourceClothing"></param> /// <param name="targetAvatar"></param> /// <returns>Newly created clothing on avatar</returns> public static GameObject Stitch(GameObject sourceClothing, GameObject targetAvatar) { TransformCatalog boneCatalog = new TransformCatalog(targetAvatar.transform); SkinnedMeshRenderer[] skinnedMeshRenderers = sourceClothing.GetComponentsInChildren <SkinnedMeshRenderer>(); GameObject targetClothing = AddChild(sourceClothing, targetAvatar.transform); foreach (SkinnedMeshRenderer sourceRenderer in skinnedMeshRenderers) { SkinnedMeshRenderer targetRenderer = AddSkinnedMeshRenderer(sourceRenderer, targetClothing); targetRenderer.bones = TranslateTransforms(sourceRenderer.bones, boneCatalog); } for (int i = 0; i < targetClothing.transform.childCount; i++) { GameObject.Destroy(targetClothing.transform.GetChild(i).gameObject); } return(targetClothing); }