- Home /
How to Trigger Animation After x Items Collected?
Below is my code I am working with, how can I trigger an animation once x1 items are collected?
using UnityEngine; using System.Collections;
public class Item : MonoBehaviour {
///////////////////////////////////////////////////////////////////////
///This file goes on a Collectable Game Object that is in your scene///
///////////////////////////////////////////////////////////////////////
//Set up variables for text output on screen, and audio
//This will create "open slots" in your editor, on the object that has this script
//You will drop in your GuiText and Audio into the open slots.
public GUIText TextOutput;
public AudioClip SoundToPlay;
//Set up variable for number of items collected.
//Each time you collect something, this can be updated to be you "inventory" of that item.
public static int itemCounter = 0;
//Code for when the player collides with an item to collect.
void OnTriggerEnter (Collider other)
{
//When something hits the collectable, if it is the player that touches the collectable,
//Play a noise,
//Display some text,
//Update the inventory,
//Delete the prefab.
if ((other.tag == "Player")&& (Item.itemCounter == 0)) {
//Play the audio at the collectables position
AudioSource.PlayClipAtPoint (SoundToPlay, this.transform.position);
//Update the GuiText
TextOutput.text =
"Coin Found";
//Update the varible for the # of items you have in your inventory
//The below code is a "shorthand" method of writing itemCounter = itemCounter +1;
itemCounter += 1;
//Simulate collection by destroying the prefab object
Destroy (gameObject.transform.parent.gameObject);
}
}
}
}
Answer by fafase · May 22, 2014 at 05:02 AM
Have a script on the player that keep track of the items and increase that value each you collect. Check that value to play the anim.
public class ItemOnPlayer:MonoBehaviour{
int item;
public int Item{
get{return item;}
set{
item += value;
if(item == 10)// Play animation
}
}
}
on your collision script:
if (other.tag == "Player"){
other.gameObject.GetComponent<ItemOnPlayer>().Item++;
// rest of code
}
Answer by Maerig · May 22, 2014 at 05:07 AM
You already have a counter named itemCounter
in your script, so you just need to use it :
l.38
itemCounter += 1;
if(itemCounter >= numberRequired) {
other.animation.Play ("animationName");
}
I tried implementing the code with the animation name and it's still not triggering the gate animation to work. I know the item counter works because I have it triggering other stuff. I'm not sure what I'm doing wrong, but here is the code I tried doing below
if (Item.itemCounter == 1) { other.animation.Play ("ga$$anonymous$$nimation");
}
Your script is in the Item
class isn't it ? If not, you might want to change Item.itemCounter
to itemCounter
. Else, it probably means the problem comes from the animation. Have you tried to display a Debug.Log()
ins$$anonymous$$d ?
Your answer
Follow this Question
Related Questions
play a door animation with collider 1 Answer
Activating One Part of An Animation 2 Answers
Can I make animations snap to a frame? 1 Answer
Trigger Door Animation 2 Answers
Trouble getting a trigger to activate an animation 2 Answers