Я использую Unity 3D.Я создаю экземпляры двух игровых объектов из ресурсов одной сетки.
Вот мой код для установки текстур:
public static void EquipItem(Dictionary<string, object> permissions)
{
if (permissions.Count == 0)
return;
ItemsTemplate iTemplate = ItemsHandler.itemsTemplate.Find(x => x.id == Convert.ToInt32(permissions["itemId"]));
SlotType slotType = iTemplate.slot_type;
CharacterData charData = Character.characterDetails[permissions["characterId"].ToString()];
if(Convert.ToBoolean(permissions["allowedToEquip"]) == false)
{
if(Convert.ToInt32(permissions["characterId"]) == Character.characterId)
Character.RecursiveFindChild(GameObject.Find("UI/Window (Character)/Content/Character Content/Equip Slots/").transform, slotType.ToString()).GetComponent<UIEquipSlot>().Unassign();
}
else
{
if(iTemplate.weapon_type == WeaponType.NotAWeapon){
//Record added in clients ram about equiped items.
Character.characterDetails[permissions["characterId"].ToString()].characterEquipedItems.Add(
new CharacterEquipedItems(
slotType,
iTemplate
));
//Applying visual appearence on the character
DynamicCharacterAvatar charAv = GameObject.Find("CharactersOnline/"+ permissions["characterId"]).GetComponent<DynamicCharacterAvatar>();
UMAWardrobeRecipe wardrobeRecipe = Resources.Load("Wardrobe/" + iTemplate.model) as UMAWardrobeRecipe;
charAv.SetSlot(wardrobeRecipe);
charAv.BuildCharacter();
Dictionary<string, UMATextRecipe> allEquipedWardrobeRecipes = charAv.WardrobeRecipes;
//To do - Add items stats to character stats.
} else {
GameObject CharacterGameObject = GameObject.Find("CharactersOnline/"+ permissions["characterId"]);
//Loads the Weapon gameobject.
GameObject WeaponGameObject = Instantiate(Resources.Load("Wardrobe/Weapons/" + iTemplate.model)) as GameObject;
if (iTemplate.texture != null)
{
foreach(Material mat in WeaponGameObject.GetComponent<MeshRenderer>().sharedMaterials)
{
mat.color = Color.white;
mat.SetTexture("_MainTex", Resources.Load("Wardrobe/Weapons/" + iTemplate.texture + "/" + iTemplate.model + "_" + mat.name + "_AlbedoTransparency") as Texture);
mat.SetTexture("_MetallicGlossMap", Resources.Load("Wardrobe/Weapons/" + iTemplate.texture + "/" + iTemplate.model + "_" + mat.name + "_MetallicSmoothness") as Texture);
mat.SetTexture("_BumpMap", Resources.Load("Wardrobe/Weapons/" + iTemplate.texture + "/" + iTemplate.model + "_" + mat.name + "_Normal") as Texture);
mat.SetTexture("_OcclusionMap", Resources.Load("Wardrobe/Weapons/" + iTemplate.texture + "/" + iTemplate.model + "_" + mat.name + "_AO") as Texture);
}
}
//Search for the holders in the character
GameObject MainHand = Character.RecursiveFindChild(CharacterGameObject.transform, "mixamorig:RightHandIndex2");
GameObject OffHand = Character.RecursiveFindChild(CharacterGameObject.transform, "mixamorig:LeftHandIndex2");
switch (iTemplate.slot_type)
{
case SlotType.MainHand:
GameObject MainHandWeapon = Instantiate(WeaponGameObject, MainHand.transform);
MainHandWeapon.transform.localPosition = new Vector3(0f,0.05f,0f);
MainHandWeapon.transform.localRotation = Quaternion.Euler(new Vector3(-45f, 0f, -70f));
MainHandWeapon.transform.localScale = Character.RaceEquipItemSizeModifier(charData.characterRace, charData.characterGender, MainHandWeapon.transform);
break;
case SlotType.OffHand:
GameObject OffHandWeapon = Instantiate(WeaponGameObject, OffHand.transform);
OffHandWeapon.transform.localPosition = new Vector3(0f,0f,0.05f);
OffHandWeapon.transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, 70f));
OffHandWeapon.transform.localScale = Character.RaceEquipItemSizeModifier(charData.characterRace, charData.characterGender, OffHandWeapon.transform);
break;
case SlotType.Shield:
GameObject Shield = Instantiate(WeaponGameObject, OffHand.transform);
//Shield.transform.localRotation = Quaternion.Euler(new Vector3(180f, -60f, 0f));
//Shield.transform.localScale += Character.RaceEquipItemSizeModifier(charData.characterRace, charData.characterGender, CharacterGameObject.transform);
break;
default:
break;
}
}
}
}
Однако он устанавливает текстуры последнего экземпляра игрового объекта.Можно ли даже создать разные текстуры на нескольких игровых объектах, созданных из одной и той же сетки, и если да, то где моя ошибка?Как я могу это сделать?
Это количество материалов, которые WeaponGameObject
имеют:
![enter image description here](https://i.stack.imgur.com/0r9uD.png)