- Home /
How to automatically change Player function after picking up certain item?
Hello! I'm trying to to add a function where the Player is able to swim when they pick up an item called "snorkel" and is knocked back when not. I already have the Player Inventory script where it stores the item data but I'm not sure how to call upon it.
This is the script I have within the Player script right now. Individually the functions seem to work but I'm not sure how to phrase it together.
private void OnTriggerEnter2D(Collider2D other)
{
// With SNORKEL
if (other.gameObject.tag == "Water" /*&& Inventory has snorkel*/)
{
Debug.Log("SWIMMING!");
anim.SetBool("IsSwimming", true);
isSwimming = true;
}
// Without SNORKEL
if (other.gameObject.tag == "Water" /*&& Inventory does NOT have snorkel*/)
{
Debug.Log("CAN'T SWIM!");
anim.SetBool("IsHurting", true);
isHurting = true;
isSwimming = false;
//knockback Player
StartCoroutine(this.KnockBack(0.04f, 700, this.transform.position));
}
}
private void OnTriggerExit2D(Collider2D other)
{
//With SNORKEL
if (other.gameObject.tag == "Water" /*&& Inventory has snorkel*/)
{
anim.SetBool("IsSwimming", false);
isSwimming = false;
}
// Without SNORKEL
if else (other.gameObject.tag == "Water" /*&& Inventory does NOT have snorkel*/)
{
anim.SetBool("IsHurting", false);
isHurting = false;
isSwimming = false;
}
Answer by Zentiu · Mar 06, 2020 at 11:21 AM
@renegadetokki Try having a reference of your inventory script in your player script like:
public PlayerInventory inventory;
Put the gameobject with the inventory script in the inspector of the player. Make sure you have a method in your inventory to look for an item if its there like:
public bool IsItemInInventory (Item itemToLookFor)
{
bool foundItem = false;
//loop through all items in inventory to see if its there with a 'for' or 'foreach' loop.
//If it is then set foundItem to true and break the loop.
//this will return true or false if the item you were looking for is there or not.
return foundItem;
}
In your if statement on your player:
if (other.gameObject.tag == "Water" && Inventory.IsItemInInventory(snorkel)) This shoudl return true if player is in the water and the snorkel is in players inventory.
Sorry I commented late but thank you so much for the answer!
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Unity add a item to a list? 2 Answers
how can i make the same key activate the different effects on the items in my inventory 1 Answer
Add force help needed 1 Answer