what I’m trying to do is change my character’s color once he touches an item and after 10 seconds i want it to change back to original color. thanks in advance…
here is my objects Script
using UnityEngine;
using System.Collections;
public class ChalkaPickup : MonoBehaviour {
public Transform myTransform;
public Color changeToColor;
public Color baseColor;
public float changeDelay;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
changeColor ();
}
}
IEnumerator colorChange ()
{
yield return new WaitForSeconds (10f);
changeBack ();
}
void changeColor ()
{
Destroy (gameObject);
myTransform.GetComponent<Renderer>().material.color = changeToColor;
StartCoroutine (colorChange ());
}
void changeBack ()
{
myTransform.GetComponent<Renderer>().material.color =baseColor;
print ("Back");
}
}
You probably want to have the behaviour on your player object, not the pickup object.
You already have all the code you need, you just need to split it between the pickup object and the player object.
public class ChalkaPickup : MonoBehaviour
{
public Color changeToColor;
public float changeDelay;
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
other.StartCoroutine (other.GetComponent<ChalkaPlayer>().ChangeColor (changeToColor, changeDelay));
Destroy (gameObject);
}
}
}
public class ChalkaPlayer : MonoBehaviour
{
private Color baseColor;
private Renderer renderer;
void Awake ()
{
renderer = GetComponent<Renderer>();
}
public IEnumerator ChangeColor (Color color, float delay)
{
baseColor = renderer.material.color;
renderer.material.color = color;
yield return new WaitForSeconds (delay);
renderer.material.color =baseColor;
}
}
I assume this is because you are using “Destroy” function. It “cancels” EVERY started coroutine. You have to insert this IEnumerator to player class. That should be solve a problem.