- Home /
How do I make a Skinned Mesh Renderer independent?
Working on a character creator mechanism in which I can replace an existing full character mesh with multiple character mesh pieces.
The problem that I have right now is that when I destroy or hide the original character mesh, the added skinned mesh renderers stop animating - because they are still accessing data from that mesh.
I found the functional code in another thread, but I'm trying to do something different here. Can anyone suggest how I can properly separate the necessary data?
The script is attached to a separate game object which references both source and target objects:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class createMesh1 : MonoBehaviour {
public SkinnedMeshRenderer sourceRenderer;
public SkinnedMeshRenderer[] newItemRenderers;
public int currNewItem;
public Material skinMat;
public void NewItem()
{
currNewItem++;
if(currNewItem > newItemRenderers.Length-1)
{
currNewItem = 0;
}
ChangeMesh();
}
void ChangeMesh()
{
Dictionary<string, Transform> boneMap = new Dictionary<string, Transform>();
foreach (Transform bone in sourceRenderer.bones)
{
boneMap[bone.name] = bone;
}
Transform[] boneArray = newItemRenderers[currNewItem].bones;
for (int idx = 0; idx < boneArray.Length; ++idx)
{
string boneName = boneArray[idx].name;
if (false == boneMap.TryGetValue(boneName, out boneArray[idx]))
{
Debug.LogError("failed to get bone: " + boneName);
Debug.Break();
}
}
GameObject newObj = new GameObject("addedGO");
newObj.AddComponent<SkinnedMeshRenderer>();
SkinnedMeshRenderer objSMR = newObj.GetComponent<SkinnedMeshRenderer>();
objSMR.sharedMesh = newItemRenderers[currNewItem].sharedMesh;
objSMR.bones = boneArray;
objSMR.material = skinMat;
newObj.transform.position = sourceRenderer.gameObject.transform.position;
newObj.transform.parent = transform.parent;
}
}
Your answer
Follow this Question
Related Questions
Multiple skinned mesh characters. 2 Answers
Skinned Mesh Renderer / Morph 2 Answers
Creating LOD Group for character 4 Answers
Skinned Mesh Renderer vs Mesh Renderer 3 Answers