Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #To run this you need to attach to a gameobject with four children (in my case with a circle sprite). Adjust some scale and position in code...and voilà!
- using UnityEngine;
- using System.Collections;
- public class LoadingAnim : MonoBehaviour {
- public AnimationCurve animCurve;
- public AnimationCurve animPointAlongRadius;
- public AnimationCurve animTranslation;
- public float timeToRotate;
- public float timeToTranslate;
- //Put the children in local pos (1,1,0), (-1,1,0), (-1,-1,0) and (1,-1,0)
- Transform[] transformBalls;
- Vector3[] basePosBalls;
- void Start () {
- transformBalls = new Transform[transform.childCount];
- basePosBalls = new Vector3[transform.childCount];
- for(int i=0;i<transformBalls.Length;i++){
- transformBalls[i] = transform.GetChild(i);
- basePosBalls[i] = transformBalls[i].localPosition.normalized;
- }
- StartCoroutine("TranslationAnimBegin");
- StartCoroutine("RotationAnim");
- }
- IEnumerator TranslationAnimBegin(){
- yield return new WaitForSeconds(1f);
- Vector3 v;
- Color c;
- float time = 0;
- while(time<timeToTranslate){
- v = transform.position;
- v.y = Mathf.Lerp(-3f,-1.5f,animTranslation.Evaluate(time/timeToTranslate));
- transform.position = v;
- for(int i=0;i<transformBalls.Length;i++){
- c=transformBalls[i].GetComponent<SpriteRenderer>().color;
- c.a = Mathf.Lerp(0f,1f,time/timeToTranslate);
- transformBalls[i].GetComponent<SpriteRenderer>().color=c;
- }
- time+=Time.deltaTime;
- yield return null;
- }
- for(int i=0;i<transformBalls.Length;i++){
- c=transformBalls[i].GetComponent<SpriteRenderer>().color;
- c.a = 1f;
- transformBalls[i].GetComponent<SpriteRenderer>().color=c;
- }
- yield return new WaitForSeconds(4f);
- StartCoroutine("TranslationAnimEnd");
- }
- IEnumerator TranslationAnimEnd(){
- Vector3 v;
- Color c;
- float time = 0;
- while(time<timeToTranslate){
- v = transform.position;
- v.y = Mathf.Lerp(-1.5f,-3f,animTranslation.Evaluate(time/timeToTranslate));
- transform.position = v;
- for(int i=0;i<transformBalls.Length;i++){
- c=transformBalls[i].GetComponent<SpriteRenderer>().color;
- c.a = Mathf.Lerp(1f,0f,time/timeToTranslate);
- transformBalls[i].GetComponent<SpriteRenderer>().color=c;
- }
- time+=Time.deltaTime;
- yield return null;
- }
- for(int i=0;i<transformBalls.Length;i++){
- c=transformBalls[i].GetComponent<SpriteRenderer>().color;
- c.a = 0f;
- transformBalls[i].GetComponent<SpriteRenderer>().color=c;
- }
- }
- IEnumerator RotationAnim(){
- float time;
- float rot = 0;
- while(true){
- Quaternion q1 = Quaternion.Euler(0f,0f,rot);
- Quaternion q2 = Quaternion.Euler(0f,0f,rot+90f);
- time = 0f;
- while(time<timeToRotate){
- Quaternion q = Quaternion.Lerp(q1,q2,animCurve.Evaluate(time/timeToRotate));
- transform.rotation = q;
- for(int i=0;i<transformBalls.Length;i++){
- transformBalls[i].localPosition = Vector3.Lerp(0.2f*basePosBalls[i],0.15f*basePosBalls[i],animPointAlongRadius.Evaluate(time/timeToRotate));
- }
- time+=Time.deltaTime;
- yield return null;
- }
- transform.rotation = q2;
- for(int i=0;i<transformBalls.Length;i++){
- transformBalls[i].localPosition = 0.2f*basePosBalls[i];
- }
- rot += 90f;
- rot%=360f;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment