An Idea: Add an Inventory UI Panel

Announcements, support questions, and discussion for the Dialogue System.
User avatar
Alatriste
Posts: 181
Joined: Wed Nov 11, 2015 5:07 pm
Contact:

An Idea: Add an Inventory UI Panel

Post by Alatriste »

Hi Tony,

I know this one goes far beyond the scope of Dialogue System, but it would be amazing that DS include an optional UI Inventory panel where the item collected and stored by DS are displayed. Just a way to keep a visual track of what our inventory has.

I know there are plugins that already do that and even more, but looking at them, many are way more complicated or offer way too many different options, which make them difficult to set up.

Anyway, just an idea to make DS even better! :D
User avatar
Tony Li
Posts: 21059
Joined: Thu Jul 18, 2013 1:27 pm

Re: An Idea: Add an Inventory UI Panel

Post by Tony Li »

Thanks for the idea; I'll keep it in mind. You may be interested in Inventory Engine. It's the simplest inventory system that's integrated with the Dialogue System, and it works the best (most reliable, fewest headaches).
User avatar
Alatriste
Posts: 181
Joined: Wed Nov 11, 2015 5:07 pm
Contact:

Re: An Idea: Add an Inventory UI Panel

Post by Alatriste »

Thanks for the suggestion! I'll take a look. 8-)
CricketSaysChill
Posts: 5
Joined: Tue Sep 11, 2018 10:54 am

Re: An Idea: Add an Inventory UI Panel

Post by CricketSaysChill »

Just wanted to throw in that I managed to do this really easily in a couple of hours with 'just' the dialogue System using only the Unity UI. Might be useful for someone in the future so I'll try to explain a little. You don't even need seperate inventory plugins depending on how your game is built.

I just created a new Cavnas with an open inventory button. Said button when clicked activates a Scrollview Gameobject in it which itself is filled with an arranged row of buttons, each button representing an item. (It's buttons all the way down) They have no on click function, but will activate a child window in their Animation OnHover state when the mouse hovers over them in order to Show stats and detials for the item. When the Player collects the item in game I just use "SetActive(MegaUltraDeathSword, true);" in the sequence area of the dialogue node to turn on the button in the inventory giving the apperance that the Player has visually collected the item.

Then, assuming you made a "is_collected" variable for the item. Just set said variable in the item to true using the script ["Mega_Ultra_Death_Sword"].Is_Collected = true;. This is critical if you use the persistant active data scripts when saving as you can just add one to the inventory for each item with the condition that it has been found so the game knows when you load in that the item has been collected. Hope that all makes sense. :)
User avatar
Tony Li
Posts: 21059
Joined: Thu Jul 18, 2013 1:27 pm

Re: An Idea: Add an Inventory UI Panel

Post by Tony Li »

Thanks for sharing that!
User avatar
Alatriste
Posts: 181
Joined: Wed Nov 11, 2015 5:07 pm
Contact:

Re: An Idea: Add an Inventory UI Panel

Post by Alatriste »

CricketSaysChill wrote: Mon Sep 17, 2018 2:11 pm Just wanted to throw in that I managed to do this really easily in a couple of hours with 'just' the dialogue System using only the Unity UI. Might be useful for someone in the future so I'll try to explain a little. You don't even need seperate inventory plugins depending on how your game is built.

I just created a new Cavnas with an open inventory button. Said button when clicked activates a Scrollview Gameobject in it which itself is filled with an arranged row of buttons, each button representing an item. (It's buttons all the way down) They have no on click function, but will activate a child window in their Animation OnHover state when the mouse hovers over them in order to Show stats and detials for the item. When the Player collects the item in game I just use "SetActive(MegaUltraDeathSword, true);" in the sequence area of the dialogue node to turn on the button in the inventory giving the apperance that the Player has visually collected the item.

Then, assuming you made a "is_collected" variable for the item. Just set said variable in the item to true using the script ["Mega_Ultra_Death_Sword"].Is_Collected = true;. This is critical if you use the persistant active data scripts when saving as you can just add one to the inventory for each item with the condition that it has been found so the game knows when you load in that the item has been collected. Hope that all makes sense. :)
Thanks for sharing! I might give a try. I wonder how it can handle that all objects are aligned by appearing order if not all items are unlocked sequentially. :?
CricketSaysChill
Posts: 5
Joined: Tue Sep 11, 2018 10:54 am

Re: An Idea: Add an Inventory UI Panel

Post by CricketSaysChill »

Alatriste wrote: Tue Sep 18, 2018 11:32 amThanks for sharing! I might give a try. I wonder how it can handle that all objects are aligned by appearing order if not all items are unlocked sequentially. :?
Not well on it's own I suppose.

Like I said it depends on what kind of game you are making. Mine for example uses pre-determined inventory slots for items even though they can be picked up in random order, but I want to have gaps betwen inventory slots on purpose, so it doesn't bother me personally. I like the 'feel' it gives the game because it hints to the Player "woah. Look at all this stuff you haven't found yet. Better explore a little more."

My current personal idea if you wanted to avoid that (Note that this is just vague theory crafting from here on out) you could probably easily write a simple C# script that checks the Dialogue System item table for all items that have the variable "is_collected" set to true. Following that it should thereafter instantiate said gameobjects at unique transform coordinates found inside the scrollview inventory. IE Item 1 is_collected= true so instantiate Item1 at x=75 x y=75, Item 2 is_collected= true, instantiate at x=150 y=150.

But at that point it might just be easier to get the inventory System. :)
User avatar
Tony Li
Posts: 21059
Joined: Thu Jul 18, 2013 1:27 pm

Re: An Idea: Add an Inventory UI Panel

Post by Tony Li »

You can use a layout group inside the scroll content to get rid of gaps. It will still show items in the order they are defined at design time, such as alphabetical order.

For example, let's say your scroll content contains a Horizontal Layout Group. Inside the Vertical Layout Group are three items: Apple, Banana, and Cherry. All three start inactive.

If you pick up Cherry and then Apple (and activate their UI elements), the scroll content will be:

[Apple][Cherry]

with no gap. If you then pick up Banana, the content will be:

[Apple][Banana][Cherry]
User avatar
Alatriste
Posts: 181
Joined: Wed Nov 11, 2015 5:07 pm
Contact:

Re: An Idea: Add an Inventory UI Panel

Post by Alatriste »

Thanks to both. I hope I can give a try in the next days. :)
User avatar
Alatriste
Posts: 181
Joined: Wed Nov 11, 2015 5:07 pm
Contact:

Re: An Idea: Add an Inventory UI Panel

Post by Alatriste »

I finally bought the Inventory Engine as I tried to make the inventory myself but I wanted to handle some logic to align the objects, etc, so I found this the easiest solution, especially if Dialogue System supports it.

But I'm having some problems running the example scene. I suppose to have to interact with another character but I don't know how to do it. The interaction doesn't work, neither the access to the other room (where I guess the apples are). Am I missing something?

When I try to follow the tutorial I'm getting this error as well:

Code: Select all

Dialogue System: Lua code 'mmAddItem("MainInventory", "Apple", 1)' threw exception 'Exception has been thrown by the target of an invocation.'
UnityEngine.Debug:LogError(Object)
PixelCrushers.DialogueSystem.Lua:RunRaw(String, Boolean, Boolean) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Lua/Lua Wrapper/Lua Interpreter Wrapper/Lua.cs:218)
PixelCrushers.DialogueSystem.Lua:Run(String, Boolean, Boolean) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Lua/Lua Wrapper/Lua Interpreter Wrapper/Lua.cs:119)
PixelCrushers.DialogueSystem.ConversationModel:GetState(DialogueEntry, Boolean, Boolean, Boolean) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Model/Logic/Model/ConversationModel.cs:227)
PixelCrushers.DialogueSystem.ConversationModel:GetState(DialogueEntry) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Model/Logic/Model/ConversationModel.cs:291)
PixelCrushers.DialogueSystem.ConversationController:OnFinishedSubtitle(Object, EventArgs) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Controller/ConversationController.cs:224)
PixelCrushers.DialogueSystem.ConversationView:FinishSubtitle() (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/View/View/ConversationView.cs:379)
PixelCrushers.DialogueSystem.ConversationView:OnFinishedSubtitle() (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/View/View/ConversationView.cs:386)
PixelCrushers.DialogueSystem.Sequencer:FinishSequence() (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Sequencer/Sequencer.cs:469)
PixelCrushers.DialogueSystem.Sequencer:Update() (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Sequencer/Sequencer.cs:462)
Last edited by Alatriste on Thu Dec 13, 2018 11:02 am, edited 1 time in total.
Post Reply