I have been messing around with almost any solution I can find on the matter and still no luck. I have a variable that changes and a message that is sent to the local player. It all works via client, but does not change anything for the rest of the players… Any help would be greatly appreciated.
public void Cmdchangehelm(int num) {
if (body.male)
{
if (HelmName == HelmName)
{
Destroy(HelmInst);
}
HelmName = Helm[num].name;
GameObject NewHelm = (GameObject)Instantiate(Resources.Load("Armor/" + HelmName));
HelmInst = NewHelm;
Destroy(NewHelm);
AddHelm();
}
}
private void AddHelm(){
SkinnedMeshRenderer[] BonedObjects = HelmInst.GetComponentsInChildren<SkinnedMeshRenderer>();
foreach( SkinnedMeshRenderer smr in BonedObjects )
CmdProcessBonedObjectHelm( smr );
}
[Command]
private void CmdProcessBonedObjectHelm(SkinnedMeshRenderer ThisRenderer){
// Create the SubObject
HelmInst = new GameObject( ThisRenderer.gameObject.name );
HelmInst.transform.parent = transform;
// Add the renderer
SkinnedMeshRenderer NewRenderer = HelmInst.AddComponent( typeof( SkinnedMeshRenderer ) ) as SkinnedMeshRenderer;
// Assemble Bone Structure
Transform[] MyBones = new Transform[ ThisRenderer.bones.Length ];
// As clips are using bones by their names, we find them that way.
for( int i = 0; i < ThisRenderer.bones.Length; i++ )
MyBones[ i ] = FindChildByName( ThisRenderer.bones[ i ].name, transform );
// Assemble Renderer
NewRenderer.bones = MyBones;
NewRenderer.sharedMesh = ThisRenderer.sharedMesh;
NewRenderer.materials = ThisRenderer.materials;
NewRenderer.gameObject.AddComponent<NetworkIdentity>();
NewRenderer.gameObject.AddComponent<NetworkTransform>();
ClientScene.RegisterPrefab(NewRenderer.gameObject);
NetworkServer.Spawn(NewRenderer.gameObject);
}