unity3d中简单的2d动画制作
在学习了 Unity3D 开发之后,下面将为大家分享一位初学者在 Unity3D 中制作 2D 动画的经验。
Unity3D 制作 2D 动画的方法
1. 动画帧序列
这是一种常见的制作 2D 动画的方法,相信很多开发者都使用过。与 Cocos2d 类似,在 Unity 中也可以通过动画帧让角色动起来。以下是示例代码:
using UnityEngine;
using System.Collections;
public class AnimateDemo : MonoBehaviour {
public Texture[] frames;
public float framesPerSecond = 10;
private int index;
private float dTime = 0;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
AnimaOne();
AnimaAlways();
}
void AnimaAlways() {
int nowIndex = (int)(Time.time * framesPerSecond) % frames.Length;
if (index != nowIndex) {
index = nowIndex;
renderer.material.mainTexture = frames[index];
}
}
void AnimaOne() {
dTime += Time.deltaTime;
if (dTime > 1 / framesPerSecond) {
dTime -= 1 / framesPerSecond;
renderer.material.mainTexture = frames[++index];
if (index + 1 >= frames.Length) {
// 可在此处添加动画最后一帧时的其他控制逻辑
}
}
}
}
上述代码详细展示了实现动画帧序列的逻辑,虽然未实际执行,但按照此思路可以轻松实现动画帧效果。其中,AnimaOne 方法可在动画播放到最后一帧时实现其他控制逻辑;AnimaAlways 方法则会一直循环播放动画。
2. 动画渲染
当动画帧过多或者资源消耗过大时,我们可以将动画整合到一张图片上,通过控制相机或者材质来渲染图片的特定位置。这种方法比较适合数据、Tag 的动态显示。以下是示例代码:
public Texture imgTexture; // 声明一张图片
Vector2 scaleVec2 = new Vector2(0.1f, 1); // 控制渲染的图片区域
renderer.material.mainTexture = imgTexture; // 实现动画的渲染
renderer.sharedMaterial.SetTextureScale("_MainTex", scaleVec2);
游戏中角色的位移和旋转
在游戏开发中,我们常常需要让游戏角色进行位移、旋转等动作。在 Unity 中,对于没有刚体的对象,其位移和旋转都是通过 Transform 属性来控制的。Transform 下有 position 和 rotation 属性,并且 Unity 提供了普通旋转和位移的方法。在控制对象移动时,最常用的方式是通过坐标增量来实现。不过,需要特别注意相对位移和绝对位移的区别,要明确是相对于世界坐标还是其父对象的坐标。
此外,iTween 是制作 2D 动画时常用的插件。其官网和其他博客对该插件方法的使用有较为详细的介绍。这里简单介绍一下 iTween.Hash(),iTween 提供了哈希表,使得简单的动画效果更加自然和多样化。哈希表的参数会根据 iTween 不同的方法而稍有差异,比较常用的参数如下:
x,y,z:表示目标Vector3的量;time:动画执行的时间;easeType:过渡方式,如平滑、直线等;incomplete:当前iTween动画结束时调用的动作或方法。
作为一名 Unity3D 的初学者,以上是我对近期工作的总结,希望能与大家分享。若想深入学习,建议在 Unity 的论坛和高手的博客上进行研究。最后,祝各位工作顺利!