Just another note, do not only use a simple if in your OnCollisionEnter function, use else if, too. That saves some time for string comparisons as a gameobject can only have one tag at a time. Thus, once a tag matches the others don’t need to be checked. Could be worth as it seems you’re supposed to collect items in your game, which may happen frequently.
I can also recommend to make public const string variables for the tags in order to avoid typos and to maintain your tags much easier (imagine you have a tag used in only 5-10 scripts, which isn’t that much at all, you’d still have to adjust it in every single script at every single place).
Additionally, if you already use ‘someVariable.ToString()’ then there’s no need to concatenate an empty string “” to it.
Something that you may consider later on:
It’s worth to generalize the logic when your code repeats or when you see a lot of if statements. It’s still okay in your case as there are only a few things to be checked, but as soon as you want to add more there will be a long chain of if statements, which doesn’t look that great and might be rather expensive due to the fact that you’re comparing strings.
A quick thought would be to outsource the logic to a script component that handles the object-specific interaction . You’d only call GetComponent() once, no matter what collides with you, check whether or not the returned value is null and if it is not null, call the appropriate method that defines the behaviour.
Easier to maintain, reusable in any other script that may need to do the same.