Blog

Understanding iTween Callbacks

One of the most frequent problems I see people have with iTween is with callbacks that don’t fire.

At it’s core iTween leverages Unity’s SendMessage method for carrying out it’s 3 callbacks: “onStart”, “onUpdate” and “onComplete”. When you add an iTween to a GameObject, iTween will throw all callbacks against the GameObject that is being animated. Where most people have difficulties is when they assign iTweens to GameObjects that don’t physically contain the methods they are attempting to call.

For example, the following code with never execute the “ShakeComplete” method because the “target” GameObject does not have a script attachted to it containing this method:

using UnityEngine;
using System.Collections;

public class UnderstandingCallbacks : MonoBehaviour
{
	public GameObject target;
	
	void Start ()
	{
		iTween.ShakePosition(target, iTween.Hash("x", 1, "onComplete", ShakeComplete));
	}
	
	void ShakeComplete(){
		Debug.Log("The shake completed!");	
	}
}

There’s 2 ways to correct the previous script. The long route: create another script, attach it to our actual “target” GameObject and transfer the “ShakeComplete” method to that new script. The easy route: utilize iTween’s callback “target modifiers”!

Each of iTween’s 3 callbacks have an additional “target modifier” that can be used to tell iTween to look somewhere else for the callback method: “onStartTarget”, “onUpdateTarget” and “onCompleteTarget”.

The following corrected script will now fire the “onComplete” callback since we are now using “onCompleteTarget” to tell iTween that the “ShakeComplete” method is located on the GameObject that actually set up the iTween:

using UnityEngine;
using System.Collections;

public class UnderstandingCallbacks : MonoBehaviour
{
	public GameObject target;
	
	void Start ()
	{
		iTween.ShakePosition(target, iTween.Hash("x", 1, "onComplete", "ShakeComplete", "onCompleteTarget", gameObject));
	}
	
	void ShakeComplete(){
		Debug.Log("The shake completed!");	
	}
}

I hope this helps clear up unsuccessful callbacks in iTween.

8 Comments

  1. waldo
    March 22, 2011

    Awesome. Thanks.

  2. May 3, 2011

    Thank you so much for this post! Saved most of my hair D:

  3. yuki
    June 17, 2011

    nice.

  4. August 11, 2011

    Thanks for the tip! Just what I was looking for.

  5. Senthil Kumaran
    June 27, 2013

    Thanks a lot!!! You saved my time…

  6. October 21, 2013

    Just wanted to point out that in the first example, “ShakeComplete” should be in inverted commas like this:
    iTween.ShakePosition(target, iTween.Hash(“x”, 1, “onComplete”, “ShakeComplete”));

  7. Lefthandmedia
    June 18, 2014

    Hi,
    the documentation states ‘oncomplete’ all lowercase, your example states ‘onComplete’ in camel case.
    which is it?

    • June 18, 2014

      Either way. I did that on purpose to show the flexibility to new coders. The code converts everytgibg to lowercase so you can pick your poison. 😉