Equipping Armor

Frocha

Member
So I'm a bit curious if its possible to use the inventory system to equip armor or clothing items. I've seen one other thread where someone had the same question but it seemed a bit tedious. I've been toying around with the inventory system and I'm able to get for example a helmet to show precisely where I need it. But there's errors. The helmet is not enabled at runtime, but its where I need it to be.


So the character will pick up the item, it shows up in the proper location but its not enabled.
Below is the error message.


NullReferenceException: Object reference not set to an instance of an object
Opsive.UltimateCharacterController.Inventory.ItemSet.StateChange () (at Assets/Opsive/UltimateCharacterController/Scripts/Inventory/ItemSet.cs:179)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.InventoryItemSetManager.StateChange () (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/ItemSet/InventoryItemSetManager.cs:733)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.BridgeEquippableProcessing.UpdateItemSetItems (System.Boolean equip) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/BridgeEquippableProcessing.cs:478)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.BridgeEquippableProcessing.OnItemAddedToEquippable (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, Opsive.UltimateInventorySystem.Core.DataStructures.ItemStack addedItemStack) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/BridgeEquippableProcessing.cs:202)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.BridgeEquippableProcessing.OnAddItemToInventory (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, Opsive.UltimateInventorySystem.Core.DataStructures.ItemStack addedItemStack) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/BridgeEquippableProcessing.cs:782)
Opsive.Shared.Events.InvokableAction`2[T1,T2].Invoke (T1 arg1, T2 arg2) (at <27da9e1afec54f2fb2a11d46a234f9df>:0)
Opsive.Shared.Events.EventHandler.ExecuteEvent[T1,T2] (System.Object obj, System.String eventName, T1 arg1, T2 arg2) (at <27da9e1afec54f2fb2a11d46a234f9df>:0)
Opsive.UltimateInventorySystem.Core.InventoryCollections.ItemCollection.NotifyAdd (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, Opsive.UltimateInventorySystem.Core.DataStructures.ItemStack addedItemStack) (at Assets/Opsive/UltimateInventorySystem/Scripts/Core/InventoryCollections/ItemCollection.cs:431)
Opsive.UltimateInventorySystem.Core.InventoryCollections.ItemSlotCollection.SetItemAmount (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, System.Int32 slotIndex, System.Boolean removePreviousItem) (at Assets/Opsive/UltimateInventorySystem/Scripts/Core/InventoryCollections/ItemSlotCollection.cs:276)
Opsive.UltimateInventorySystem.Core.InventoryCollections.ItemSlotCollection.AddItemInternal (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, System.Int32 slotIndex) (at Assets/Opsive/UltimateInventorySystem/Scripts/Core/InventoryCollections/ItemSlotCollection.cs:236)
Opsive.UltimateInventorySystem.Core.InventoryCollections.ItemSlotCollection.AddItem (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, System.Int32 slotIndex) (at Assets/Opsive/UltimateInventorySystem/Scripts/Core/InventoryCollections/ItemSlotCollection.cs:200)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.CharacterInventoryBridge.MoveItemToEquippable (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, System.Int32 equippableCollectionIndex, System.Int32 slotIndex) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/CharacterInventoryBridge.cs:451)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.CharacterInventoryBridge.MoveEquip (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, System.Int32 equippableItemCollectionSet, System.Int32 slotID, System.Boolean equip) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/CharacterInventoryBridge.cs:532)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.CharacterInventoryBridge.MoveEquip (Opsive.UltimateInventorySystem.Core.DataStructures.ItemInfo itemInfo, System.Boolean equip) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/CharacterInventoryBridge.cs:518)
Opsive.UltimateCharacterController.Integrations.UltimateInventorySystem.InventoryItemPickup.DoItemIdentifierPickupInternal (UnityEngine.GameObject character, Opsive.UltimateCharacterController.Inventory.InventoryBase inventory, System.Int32 slotID, System.Boolean immediatePickup, System.Boolean forceEquip) (at Assets/Opsive/UltimateCharacterController/Integrations/UltimateInventorySystem/Scripts/Pickup/InventoryItemPickup.cs:111)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ItemPickupBase.DoItemIdentifierPickup (UnityEngine.GameObject character, Opsive.UltimateCharacterController.Inventory.InventoryBase inventory, System.Int32 slotID, System.Boolean immediatePickup, System.Boolean forceEquip) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ItemPickupBase.cs:267)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ItemPickupBase.DoItemPickup (UnityEngine.GameObject character, Opsive.UltimateCharacterController.Inventory.InventoryBase inventory, System.Int32 slotID, System.Boolean immediatePickup, System.Boolean pickupItemIdentifier) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ItemPickupBase.cs:229)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ItemPickupBase.TryItemPickup (Opsive.UltimateCharacterController.Inventory.InventoryBase inventory, System.Int32 slotID) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ItemPickupBase.cs:124)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ItemPickupBase.TriggerEnter (UnityEngine.GameObject other, System.Int32 slotID) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ItemPickupBase.cs:113)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ItemPickupBase.DoPickup (UnityEngine.GameObject target) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ItemPickupBase.cs:91)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ItemPickupBase.TriggerEnter (UnityEngine.GameObject other) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ItemPickupBase.cs:82)
Opsive.UltimateCharacterController.Objects.CharacterAssist.ObjectPickup.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Opsive/UltimateCharacterController/Scripts/Objects/CharacterAssist/ObjectPickup.cs:165)
 

Attachments

  • Screenshot.png
    Screenshot.png
    24.5 KB · Views: 3
To be more specific, i created an item with a unique slot id that links it to the characters "Head".
 

Attachments

  • Screenshot.png
    Screenshot.png
    36.2 KB · Views: 6
Do I have to create a custom script to equip clothing? Or can I use the tools in the inventory system? Im using the UCC Thirdperson controller. Guns work fine and so do items (health/shield items). Where would I start? I'm trying to avoid coding because I'm terrible at it.
 
Just to clarify you are using the Ultimate Inventory System (UIS) integration with the Third Person Character Controller correct?

Equipping clothes is different then equipping weapons. Clothes cannot be used (in most cases) you just wear them. So that means you don't need to use the Third Person Character controller at all. Just UIS is enough to equip clothes using the Equippper component.

There is a section in the integration documentation that goes over that. Check the "EQUIPPING SKINNED MESH CLOTHES" section of this page
 
Top