在unity5.4.0中,进行场景制作时需要模拟一些植物的生长过程等,导入植物各个阶段的图片设定为Sprite,利用精灵进行开发。基本方法是:在场景中的物体上添加Sprite Render组件,通过更换Sprite Render组件中的Sprite属性模拟植物的生长过程。
在这过程中,如果涉及到的植物只有一个或几个,且Sprite所占内存空间不多,可以使用如下方法用Resoures导入进行开发。
(1)把导入的Sprite图片放到Resoures文件中,利用协程模拟制作SPrite动画。
在脚本的Start()函数中,使用Resources.Load()导入Sprite,在脚本的Update()中,在需要的时机启动协程设置Sprite Render组件中的Sprite属性。
private Sprite[] spriteFlowers1 = new Sprite[145];
private Sprite[] spriteFlowers2 = new Sprite[145];
private Dictionary <string ,int> dic = new Dictionary<string ,int> ();
void Start () {
for (int i = 0; i < 145; i++)
{
string str;
str = "flower1/flower1_" + (i+1).ToString ();
spriteFlowers1[i] = Resources.Load<Sprite> (str);
Resources.UnloadAsset(spriteFlowers1[i]);
str = "flower2/flower2_" + (i+1).ToString ();
spriteFlowers2[i] = Resources.Load<Sprite> (str);
Resources.UnloadAsset(spriteFlowers2[i]);
}
}
public void EnableFlowersGrowing(GameObject obj)
{
if (!dic.ContainsKey (obj.name))
{
dic.Add (obj.name, obj.GetInstanceID ());
StartCoroutine (ChangeSprite (obj));
}
}
IEnumerator ChangeSprite (GameObject obj)
{
string str = obj.name;
Sprite[] newSprites = new Sprite[145];
if(str.StartsWith("flower1"))
newSprites = spriteFlowers1;
else if(str.StartsWith("flower2"))
newSprites = spriteFlowers2;
if(newSprites.Length>0)
{
for (int index=0; index < newSprites.Length; index++)
{
obj.GetComponent<SpriteRenderer> ().sprite = newSprites [index];
yield return new WaitForSeconds (0.02f);
}
}
//等待一定时间后返回到最小
float timeToOriginal = Random.Range (10, 20);
yield return new WaitForSeconds (timeToOriginal);
if(newSprites.Length>0)
{
for (int index=newSprites.Length-1; index >=0; index--)
{
obj.GetComponent<