goobatog@yahoo.co.uk
This is my singleton c# script that you can use in any unity project. Its used to move things from one place to another using coroutines. Set NumberOfTransforms to 100 in the inspector view before using it.Zachhe
csharp
4 years ago
36 kB
31
Indexable
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Mover : MonoBehaviour { public static Mover Instance; public int NumberOfTransforms; public Transform [] S2FTrans; public Vector3 [] S2FVec; public Transform [] S2FTargetTrans; public RectTransform [] S2FRT; public RectTransform [] S2FTargetRT; public Transform [] S2FLookAtTrans; public bool [,] S2FXYZ; public Material [] S2FMaterial; public SpriteRenderer[] S2FSR; public TextMesh[] S2FTM; public Image [] S2FImage; public Text [] S2FText; public Color [] S2FColours; public float[] S2FAmplification; public float[] S2FDecimalOfFirstBounce; public Vector3[] S2FSquijVec; public bool [] S2FBool; public float [] S2FTime2Take; public int S2FTicker; public bool Stopping; // private float Rad2Deg = 180.0f / Mathf.PI; // private float Deg2Rad = Mathf.PI / 180.0f; void Awake () { Instance = this; S2FTrans = new Transform[NumberOfTransforms]; S2FVec = new Vector3[NumberOfTransforms]; S2FTargetTrans = new Transform[NumberOfTransforms]; S2FRT = new RectTransform[NumberOfTransforms]; S2FTargetRT = new RectTransform[NumberOfTransforms]; S2FLookAtTrans = new Transform[NumberOfTransforms]; S2FXYZ = new bool[3,NumberOfTransforms]; S2FMaterial = new Material[NumberOfTransforms]; S2FSR = new SpriteRenderer[NumberOfTransforms]; S2FTM = new TextMesh[NumberOfTransforms]; S2FImage = new Image[NumberOfTransforms]; S2FText = new Text[NumberOfTransforms]; S2FColours = new Color[NumberOfTransforms]; S2FAmplification = new float[NumberOfTransforms]; S2FDecimalOfFirstBounce = new float[NumberOfTransforms]; S2FSquijVec = new Vector3[NumberOfTransforms]; S2FBool = new bool[NumberOfTransforms]; S2FTime2Take = new float[NumberOfTransforms]; } void Update() { /*if(Input.GetKey(KeyCode.D) ) { StopEverthing(); }*/ } public void StopEverthing() { Stopping = true; StartCoroutine(StopEverythingRoutine()); } private IEnumerator StopEverythingRoutine() { for(int i = 0; i < NumberOfTransforms; i++) { S2FTrans[i] = null; S2FVec[i] = Vector3.zero; S2FTargetTrans[i] = null; S2FRT[i] = null; S2FTargetRT[i] = null; S2FLookAtTrans[i] = null; S2FXYZ[0,i] = false; S2FXYZ[1,i] = false; S2FXYZ[2,i] = false; S2FMaterial[i] = null; S2FImage[i] = null; S2FText[i] = null; S2FColours[i] = Color.white; S2FBool[i] = false; S2FTime2Take[i] = 0; } while(S2FTicker > 0) { yield return null; } Stopping = false; } public int GetChumNumber() { int Chum = 0; while(S2FBool[Chum]) { Chum++; if(Chum >= S2FBool.Length) { // Maybe Wait until there is one available return Chum; } } return Chum; } public int MoveToPoint (Transform StartTrans, Vector3 TargVec, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToPointRoutine(Chum)); return Chum; } private IEnumerator MoveToPointRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int MoveToTransformPos (Transform StartTrans, Transform TargTrans, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FTargetTrans[Chum] = TargTrans; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToTranformPosRoutine(Chum)); return Chum; } private IEnumerator MoveToTranformPosRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = S2FTargetTrans[S2FNumber].position; //Transform TORR = S2FTargetTrans[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTargetTrans[S2FNumber] != null && S2FTrans[S2FNumber] != null) { FinishVec = S2FTargetTrans[S2FNumber].position; time += Time.deltaTime; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null && S2FTargetTrans[S2FNumber] != null) { S2FTrans[S2FNumber].position = FinishVec = S2FTargetTrans[S2FNumber].position; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; S2FTargetTrans[S2FNumber] = null; } public int RotateToLookAtPoint(Transform StartTrans, Vector3 PointToLookAt, float Time2Take) { Vector3 StartAngle = StartTrans.eulerAngles; StartTrans.LookAt(PointToLookAt); Vector3 TargetVecAngle = StartTrans.eulerAngles; StartTrans.eulerAngles = StartAngle; return(RotateToPoint(StartTrans, TargetVecAngle, Time2Take) ); } public int RotateToPoint (Transform StartTrans, Vector3 TargVec, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(RotateToPointRoutine(Chum)); return Chum; } private IEnumerator RotateToPointRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].localEulerAngles; Vector3 FinishVec = S2FVec[S2FNumber]; StartVec = SortRotationVec(StartVec,FinishVec); float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].localEulerAngles = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localEulerAngles = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int SpiralAroundPointLocal (Transform ChildTrans, Transform ParentTrans, float Time2Take, float StartingLocalHeight, float EndingLocalHeight, float NumberOfSpirals, float StartingDistanceFromParent, float StartingRotation) { ChildTrans.parent = ParentTrans; int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = ChildTrans; S2FTargetTrans[Chum] = ParentTrans; S2FTime2Take[Chum] = Time2Take; StartCoroutine(SpiralAroundPointLocalRoutine(Chum, StartingLocalHeight, EndingLocalHeight, NumberOfSpirals, StartingDistanceFromParent, StartingRotation) ); return Chum; } private IEnumerator SpiralAroundPointLocalRoutine(int S2FNumber,float StartingLocalHeight, float EndingLocalHeight, float NumberOfSpirals, float StartingDistanceFromParent, float StartingRotation) { Vector3 StartVec = S2FTrans[S2FNumber].position; float T2T = S2FTime2Take[S2FNumber]; S2FTrans[S2FNumber].localPosition = new Vector3(StartingDistanceFromParent * Mathf.Sin(StartingRotation), StartingLocalHeight, StartingDistanceFromParent * Mathf.Cos(StartingRotation) ); S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector3 AVec = new Vector3((StartingDistanceFromParent * (1 - Chom) ) * Mathf.Sin(StartingRotation + (Mathf.PI * (Chom * NumberOfSpirals) ) ), ( (StartingLocalHeight * (1 - Chom) ) + (EndingLocalHeight * Chom) ),(StartingDistanceFromParent * (1 - Chom) ) * Mathf.Cos(StartingRotation + (Mathf.PI * (Chom * NumberOfSpirals) ) )); S2FTrans[S2FNumber].localPosition = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localPosition = new Vector3(0,EndingLocalHeight,0); } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public Vector3 SortRotationVec(Vector3 SV,Vector3 FV) { int Testo = 0; while(Mathf.Abs(SV.x - FV.x) > 180) { if(SV.x < FV.x) { SV.x += 360; } else { SV.x -= 360; } Testo++; if(Testo > 30) { return SV; } } while(Mathf.Abs(SV.y - FV.y) > 180) { if(SV.y < FV.y) { SV.y += 360; } else { SV.y -= 360; } Testo++; if(Testo > 30) { return SV; } } while(Mathf.Abs(SV.z - FV.z) > 180) { if(SV.z < FV.z) { SV.z += 360; } else { SV.z -= 360; } Testo++; if(Testo > 30) { return SV; } } return SV; } public int MoveToPointLocal (Transform StartTrans, Vector3 TargVecLocal, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVecLocal; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToPointLocalRoutine(Chum)); return Chum; } private IEnumerator MoveToPointLocalRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].localPosition; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].localPosition = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localPosition = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int MoveToPointEvolved (Transform StartTrans, Vector3 TargVec, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToPointEvolvedRoutine(Chum)); return Chum; } private IEnumerator MoveToPointEvolvedRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; Vector3 DistanceVec = FinishVec - StartVec; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = GetCriticalNumber(time, T2T); Vector3 AVec = StartVec + (DistanceVec * Chom); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int MoveToPointBounceY (Transform StartTrans, Vector3 TargVec, float Time2Take, float BounceHeight) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToPointBounceYRoutine(Chum,BounceHeight)); return Chum; } private IEnumerator MoveToPointBounceYRoutine(int S2FNumber, float BounceHeight) { Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chim = GetBounceNumber(time, T2T); Chim *= 2; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom) + new Vector3(0,Chim * BounceHeight,0); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int MoveToPointLocalBounceY (Transform StartTrans, Vector3 TargVec, float Time2Take, float BounceHeight) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToPointLocalBounceYRoutine(Chum,BounceHeight)); return Chum; } private IEnumerator MoveToPointLocalBounceYRoutine(int S2FNumber, float BounceHeight) { Vector3 StartVec = S2FTrans[S2FNumber].localPosition; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chim = GetBounceNumber(time, T2T); Chim *= 2; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom) + new Vector3(0,Chim * BounceHeight,0); S2FTrans[S2FNumber].localPosition = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localPosition = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int GrowToRectTrans (RectTransform StartRT, RectTransform TargetRT, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FRT[Chum] = StartRT; S2FTargetRT[Chum] = TargetRT; S2FTime2Take[Chum] = Time2Take; StartCoroutine(GrowToRectTransRoutine(Chum)); return Chum; } private IEnumerator GrowToRectTransRoutine(int S2FNumber) { Vector2 StartVec = S2FRT[S2FNumber].sizeDelta; Vector2 SAMin = S2FRT[S2FNumber].anchorMin;Vector2 TAMin = S2FTargetRT[S2FNumber].anchorMin; Vector2 SAMax = S2FRT[S2FNumber].anchorMax;Vector2 TAMax = S2FTargetRT[S2FNumber].anchorMax; Vector2 FinishVec = S2FTargetRT[S2FNumber].sizeDelta; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FRT[S2FNumber]!= null && S2FTargetRT[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector2 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); Vector2 AMin = (SAMin * (1 - Chom)) + (TAMin * Chom); Vector2 AMax = (SAMax * (1 - Chom)) + (TAMax * Chom); S2FRT[S2FNumber].sizeDelta = AVec; S2FRT[S2FNumber].anchorMin = AMin; S2FRT[S2FNumber].anchorMax = AMax; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FRT[S2FNumber] != null && S2FTargetRT[S2FNumber]) { S2FRT[S2FNumber].sizeDelta = FinishVec; } S2FTicker--; S2FRT[S2FNumber] = null; S2FTargetRT[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int FadeMaterialToColour (Material StartMaterial, Color TargColour, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FMaterial[Chum] = StartMaterial; S2FColours[Chum] = TargColour; S2FTime2Take[Chum] = Time2Take; StartCoroutine(FadeMaterialToColourRoutine(Chum)); return Chum; } private IEnumerator FadeMaterialToColourRoutine(int S2FNumber) { Color StartColour = S2FMaterial[S2FNumber].color; Color FinishColour = S2FColours[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { time += Time.deltaTime; float Chom = time/T2T; Color AVec = (StartColour * (1 - Chom)) + (FinishColour * Chom); S2FMaterial[S2FNumber].color = AVec; yield return null; } if(S2FBool[S2FNumber]) { S2FMaterial[S2FNumber].color = FinishColour; } S2FTicker--; S2FMaterial[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int FadeSRToColour(SpriteRenderer StartSR, Color TargColour, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FSR[Chum] = StartSR; S2FColours[Chum] = TargColour; S2FTime2Take[Chum] = Time2Take; StartCoroutine(FadeSRToColourRoutine(Chum)); return Chum; } private IEnumerator FadeSRToColourRoutine(int S2FNumber) { Color StartColour = S2FSR[S2FNumber].color; Color FinishColour = S2FColours[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while (time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { time += Time.deltaTime; float Chom = time / T2T; Color AVec = (StartColour * (1 - Chom)) + (FinishColour * Chom); if (S2FSR[S2FNumber] != null) { S2FSR[S2FNumber].color = AVec; } yield return null; } if (S2FBool[S2FNumber]) { if (S2FSR[S2FNumber] != null) { S2FSR[S2FNumber].color = FinishColour; } } S2FTicker--; S2FSR[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int FadeTMToColour(TextMesh StartSR, Color TargColour, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTM[Chum] = StartSR; S2FColours[Chum] = TargColour; S2FTime2Take[Chum] = Time2Take; StartCoroutine(FadeTMToColourRoutine(Chum)); return Chum; } private IEnumerator FadeTMToColourRoutine(int S2FNumber) { Color StartColour = S2FTM[S2FNumber].color; Color FinishColour = S2FColours[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while (time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { time += Time.deltaTime; float Chom = time / T2T; Color AVec = (StartColour * (1 - Chom)) + (FinishColour * Chom); if (S2FTM[S2FNumber] != null) { S2FTM[S2FNumber].color = AVec; } yield return null; } if (S2FBool[S2FNumber]) { if (S2FTM[S2FNumber] != null) { S2FTM[S2FNumber].color = FinishColour; } } S2FTicker--; S2FTM[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int FadeImageToColour (Image StartImage, Color TargColour, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FImage[Chum] = StartImage; S2FColours[Chum] = TargColour; S2FTime2Take[Chum] = Time2Take; StartCoroutine(FadeImageToColourRoutine(Chum)); return Chum; } private IEnumerator FadeImageToColourRoutine(int S2FNumber) { Color StartColour = S2FImage[S2FNumber].color; Color FinishColour = S2FColours[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FImage[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Color AColour = (StartColour * (1 - Chom)) + (FinishColour * Chom); S2FImage[S2FNumber].color = AColour; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FImage[S2FNumber] != null) { S2FImage[S2FNumber].color = FinishColour; } S2FTicker--; S2FImage[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int FadeTextToColour (Text StartText, Color TargColour, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FText[Chum] = StartText; S2FColours[Chum] = TargColour; S2FTime2Take[Chum] = Time2Take; StartCoroutine(FadeTextToColourRoutine(Chum)); return Chum; } private IEnumerator FadeTextToColourRoutine(int S2FNumber) { Color StartColour = S2FText[S2FNumber].color; Color FinishColour = S2FColours[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FText[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Color AColour = (StartColour * (1 - Chom)) + (FinishColour * Chom); S2FText[S2FNumber].color = AColour; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FText[S2FNumber] != null) { S2FText[S2FNumber].color = FinishColour; } S2FTicker--; S2FText[S2FNumber] = null; S2FBool[S2FNumber] = false; } private float GetCriticalNumber(float CT,float TT) { float Chum = (CT/TT) * 2; if(Chum <= 1) { Chum *= Chum; Chum /= 2; return Chum; } else { Chum -= 1; Chum = Mathf.Sqrt(Chum); Chum += 1; Chum /= 2; return Chum; } } private float GetBounceNumber(float CT,float TT) { float Chum = (CT/TT) * 2; if(Chum < 1) { Chum = Mathf.Sqrt(Chum); return Chum; } else { Chum -= 1; Chum *= Chum; Chum = 1 - Chum; return Chum; } } public int GrowToSize (Transform StartTrans, Vector3 TargVec, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(GrowToSizeRoutine(Chum)); return Chum; } private IEnumerator GrowToSizeRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].localScale; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].localScale = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localScale = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int RotateToLookAtTrans(Transform StartTrans, Transform LATrans, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FLookAtTrans[Chum] = LATrans; S2FTime2Take[Chum] = Time2Take; StartCoroutine(RotateToTransRoutine(Chum)); return Chum; } private IEnumerator RotateToTransRoutine(int S2FNumber) { float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FLookAtTrans[S2FNumber] != null && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null && S2FLookAtTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; Vector3 StartAngle = S2FTrans[S2FNumber].eulerAngles; S2FTrans[S2FNumber].LookAt(S2FLookAtTrans[S2FNumber]); Vector3 TargetVecAngle = S2FTrans[S2FNumber].eulerAngles; S2FTrans[S2FNumber].eulerAngles = StartAngle; StartAngle = SortRotationVec(StartAngle,TargetVecAngle); Vector3 AVec = (StartAngle * (1 - Chom)) + (TargetVecAngle * Chom); S2FTrans[S2FNumber].localEulerAngles = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FLookAtTrans[S2FNumber] != null && S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].LookAt(S2FLookAtTrans[S2FNumber]); } S2FTicker--; S2FTrans[S2FNumber] = null; S2FLookAtTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int MoveToPointXYZ (Transform StartTrans, Vector3 TargVec, float Time2Take, bool X, bool Y, bool Z) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; S2FXYZ[0,Chum] = X; S2FXYZ[1,Chum] = Y; S2FXYZ[2,Chum] = Z; StartCoroutine(MoveToPointRoutineXYZ(Chum)); return Chum; } private IEnumerator MoveToPointRoutineXYZ(int S2FNumber) { Vector3 StartVec = SortXYZ(S2FNumber, S2FTrans[S2FNumber].position ); Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while(time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if(S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time/T2T; StartVec = SortXYZ(S2FNumber, StartVec ); FinishVec = SortXYZ(S2FNumber,FinishVec); Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if(S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { FinishVec = SortXYZ(S2FNumber,FinishVec); S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; S2FXYZ[0,S2FNumber] = false; S2FXYZ[1,S2FNumber] = false; S2FXYZ[2,S2FNumber] = false; } public Vector3 SortXYZ(int S2FNumber, Vector3 FinishVec) { if(!S2FXYZ[0,S2FNumber]) { FinishVec.x = S2FTrans[S2FNumber].position.x; } if(!S2FXYZ[1,S2FNumber]) { FinishVec.y = S2FTrans[S2FNumber].position.y; } if(!S2FXYZ[2,S2FNumber]) { FinishVec.z = S2FTrans[S2FNumber].position.z; } return FinishVec; } public int BoinkToSize(Transform StartTrans, Vector3 TargVec, float Time2Take, float SizeAmplification, float DecimalOfFirstBounce) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; S2FAmplification[Chum] = SizeAmplification; S2FDecimalOfFirstBounce[Chum] = DecimalOfFirstBounce; StartCoroutine(BoinkToSizeRoutine(Chum)); return Chum; } private IEnumerator BoinkToSizeRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].localScale; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; Vector3 AmplifiedVec = FinishVec * S2FAmplification[S2FNumber]; if(FinishVec == Vector3.zero) { AmplifiedVec = StartVec * S2FAmplification[S2FNumber]; } float FirstBounceTime = T2T * S2FDecimalOfFirstBounce[S2FNumber]; float SecondBounceTime = T2T - FirstBounceTime; S2FTicker++; float time = 0; while (time + Time.deltaTime < FirstBounceTime && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time / FirstBounceTime; Vector3 AVec = (StartVec * (1 - Chom)) + (AmplifiedVec * Chom); S2FTrans[S2FNumber].localScale = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } time = 0; while (time + Time.deltaTime < SecondBounceTime && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time / SecondBounceTime; Vector3 AVec = (AmplifiedVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].localScale = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if (S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localScale = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; S2FAmplification[S2FNumber] = 0; S2FDecimalOfFirstBounce[S2FNumber] = 0; } public int MoveToPointAccelerate(Transform StartTrans, Vector3 TargVec, float StartingSpeed, float Acceleration, float TerminalVelocity) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = StartingSpeed; S2FAmplification[Chum] = Acceleration; S2FDecimalOfFirstBounce[Chum] = TerminalVelocity; StartCoroutine(MoveToPointAccelerateRoutine(Chum)); return Chum; } private IEnumerator MoveToPointAccelerateRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; float Speed = S2FTime2Take[S2FNumber]; float Acceleration = S2FAmplification[S2FNumber]; float TerminalVelocity = S2FDecimalOfFirstBounce[S2FNumber]; float DistanceBetweenTwoPoints = Vector3.Distance(StartVec, FinishVec); S2FTicker++; float time = 0; while (time + Speed < DistanceBetweenTwoPoints && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Speed; Speed += (Time.deltaTime * Acceleration); if(Speed > TerminalVelocity) { Speed = TerminalVelocity; } float Chom = time / DistanceBetweenTwoPoints; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if (S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int BoinkToSizeSquij(Transform StartTrans, Vector3 TargVec, float Time2Take, Vector3 SquijVec, float DecimalOfFirstBounce) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; S2FSquijVec[Chum] = SquijVec; S2FDecimalOfFirstBounce[Chum] = DecimalOfFirstBounce; StartCoroutine(BoinkToSizeSquijRoutine(Chum)); return Chum; } private IEnumerator BoinkToSizeSquijRoutine(int S2FNumber) { Vector3 StartVec = S2FTrans[S2FNumber].localScale; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; Vector3 AmplifiedVec = S2FSquijVec[S2FNumber]; /*if (FinishVec == Vector3.zero) { AmplifiedVec = StartVec * S2FAmplification[S2FNumber]; }*/ float FirstBounceTime = T2T * S2FDecimalOfFirstBounce[S2FNumber]; float SecondBounceTime = T2T - FirstBounceTime; S2FTicker++; float time = 0; while (time + Time.deltaTime < FirstBounceTime && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time / FirstBounceTime; Vector3 AVec = (StartVec * (1 - Chom)) + (AmplifiedVec * Chom); S2FTrans[S2FNumber].localScale = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } time = 0; while (time + Time.deltaTime < SecondBounceTime && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time / SecondBounceTime; Vector3 AVec = (AmplifiedVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].localScale = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if (S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].localScale = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; S2FAmplification[S2FNumber] = 0; S2FDecimalOfFirstBounce[S2FNumber] = 0; } public int MoveToMousePosition(Transform StartTrans, float Time2Take) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToMousePositionRoutine(Chum)); return Chum; } private IEnumerator MoveToMousePositionRoutine(int S2FNumber) { Camera CurrentCam = Camera.main; Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = CurrentCam.ScreenToWorldPoint(Input.mousePosition);FinishVec.z = 0; float T2T = S2FTime2Take[S2FNumber]; S2FTicker++; float time = 0; while (time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chom = time / T2T; FinishVec = CurrentCam.ScreenToWorldPoint(Input.mousePosition); FinishVec.z = 0; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom); S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if (S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { FinishVec = CurrentCam.ScreenToWorldPoint(Input.mousePosition); FinishVec.z = 0; S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } public int MoveToPointOverShoot(Transform StartTrans, Vector3 TargVec, float Time2Take, float BounceHeight) { int Chum = GetChumNumber(); S2FBool[Chum] = true; S2FTrans[Chum] = StartTrans; S2FVec[Chum] = TargVec; S2FTime2Take[Chum] = Time2Take; StartCoroutine(MoveToPointOverShootRoutine(Chum, BounceHeight)); return Chum; } private IEnumerator MoveToPointOverShootRoutine(int S2FNumber, float BounceHeight) { Vector3 StartVec = S2FTrans[S2FNumber].position; Vector3 FinishVec = S2FVec[S2FNumber]; float T2T = S2FTime2Take[S2FNumber]; float OverShootValue = Vector3.Distance(StartVec, FinishVec) * BounceHeight; S2FTicker++; float time = 0; while (time + Time.deltaTime < T2T && S2FBool[S2FNumber]) { if (S2FTrans[S2FNumber] != null) { time += Time.deltaTime; float Chim = GetBounceNumber(time, T2T); //Chim *= 2; float Chom = time / T2T; Vector3 OverShootVec = (StartVec - FinishVec) * Chim * OverShootValue; Vector3 AVec = (StartVec * (1 - Chom)) + (FinishVec * Chom) - OverShootVec; S2FTrans[S2FNumber].position = AVec; yield return null; } else { S2FBool[S2FNumber] = false; } } if (S2FBool[S2FNumber] && S2FTrans[S2FNumber] != null) { S2FTrans[S2FNumber].position = FinishVec; } S2FTicker--; S2FTrans[S2FNumber] = null; S2FBool[S2FNumber] = false; } }
Editor is loading...