Sie dies mit dem Animator in Unity tun können, aber mit dem Code zu tun geben Ihnen mehr Kontrolle. Coroutines ist eine der besten Möglichkeiten, dies zu tun.
.Erstellen Sie ein Skript mit der Bezeichnung SpriteAnimator
. Kopiere alles von unten hinein.
using UnityEngine;
using System.Collections;
public class SpriteAnimator : MonoBehaviour
{
bool continueAnimation = false;
SpriteRenderer displaySprite;
Sprite sprite1;
Sprite sprite2;
public void setupSprites(SpriteRenderer displaySprite, string animSprite1, string animSprite2)
{
//Set where the animated sprite will be updated
this.displaySprite = displaySprite;
//Load Sprite 1
Texture2D tex = Resources.Load<Texture2D>(animSprite1) as Texture2D;
sprite1 = Sprite.Create(tex, new Rect(0, 0, 250, 150), new Vector2(0.5f, 0.5f), 40);
//Load Sprite 2
Texture2D tex2 = Resources.Load<Texture2D>(animSprite2) as Texture2D;
sprite2 = Sprite.Create(tex2, new Rect(0, 0, 250, 150), new Vector2(0.5f, 0.5f), 40);
}
private IEnumerator startAnimationCRT(float time)
{
if (continueAnimation)
{
yield break;
}
continueAnimation = true;
WaitForSeconds waitTime = new WaitForSeconds(time);
while (continueAnimation)
{
//Change to Sprite1
displaySprite.sprite = sprite1;
//Wait for `time` amount
yield return waitTime;
//Change Sprite
displaySprite.sprite = sprite2;
//Wait for `time` amount
yield return waitTime;
}
continueAnimation = false;
}
public void startAnimation(float time)
{
StartCoroutine(startAnimationCRT(time));
}
public void stopAnimation()
{
continueAnimation = false;
}
public void removeAnimation()
{
Destroy(this.gameObject);
}
}
.Create ein anderes Skript SpriteAnimation
genannt. Kopiere alles von unten hinein. Entfernen Sie auch ": MonoBehaviour
" nach dem Klassennamen. Sie müssen dies tun! Es kann nicht von MonoBehaviour
abgeleitet werden, also entfernen Sie es.
using UnityEngine;
using System.Collections;
public class SpriteAnimation
{
SpriteAnimator spriteAnimator;
GameObject gameObj;
public void setupSprites(string animationName, SpriteRenderer displaySprite, string animSprite1, string animSprite2)
{
gameObj = new GameObject(animationName);
gameObj.AddComponent<SpriteAnimator>();
spriteAnimator = gameObj.GetComponent<SpriteAnimator>();
spriteAnimator.setupSprites(displaySprite, animSprite1, animSprite2);
}
public void startAnimation(float time = 0.5f)
{
spriteAnimator.startAnimation(time);
}
public void stopAnimation()
{
spriteAnimator.stopAnimation();
}
public void Destroy()
{
spriteAnimator.removeAnimation();
}
}
Erledigt. Wie zu verwenden:
public SpriteRenderer SR;
SpriteAnimation dogAnimation;
void Start()
{
dogAnimation = new SpriteAnimation();
dogAnimation.setupSprites("DogAnimation", SR, "dog", "dog2");
dogAnimation.startAnimation(0.2f);
}
Anruf dogAnimation.stopAnimation();
die Animation zu stoppen. Sie können viele SpriteAnimations
erstellen, wie Sie möchten. Die Zeile Code dogAnimation.setupSprites("DogAnimation", SR, "dog", "dog2");
wird Animation einrichten. Es wird ein neues GameObject
namens DogAnimation
erstellt. Es lädt dann zwei Bilder namens dog
und dog2
aus dem Ordner Resources
, so stellen Sie sicher, dass diese existieren. SR
ist die Textur auf dem Bildschirm, die mit dog2
und dog
Bilder geändert werden. dogAnimation.startAnimation(0.2f);
startet die Animation und Sie können die Animationsübergangszeit hineingeben.
Nur zwei zwei Bilder oder mehr? Wo ist der Animationscode? Dies ist nicht vollständig. – Programmer
@Programmer Nur zwei, aber ich habe 10 Objekte, einige sind Schweine, einige sind Hunde etc .. jedes Objekt hat zwei Bilder zu animieren im Leerlauf. – DAVIDBALAS1
Ok. Wie viele Sekunden wechseln Sie jeweils zwei Sprites? – Programmer