[置顶] unity中制作序列帧动画
2016-02-27 11:19
555 查看
在上一篇中我介绍了用NGUI来实现序列帧动画,这一节我们用unity中的Texture来制作序列帧动画。
首先我们将图片导入到工程中,
这里是所有素材都在一张图片上,我们通过切割来实现动画,然后将图片的格式设置为Texture;将这个图片挂载在有Renderer的物体上,我们是通过修改
来实现
public class AnimationController : MonoBehaviour {
public int min;//从第几行的第几列开始播放
public int max;//到第几行的第几列结束播放
public int fps = 2;//每秒播放几帧
float timer;//计时器
public int columns = 8;//根据图片的每列分为几个素材来定义
public int rows = 8;//根据图片的每行分为几个素材来定义
public int currentFrame = 0;//当前调用的帧数
// Use this for initialization
void Start()
{
currentFrame = min;//初始开始位置
HandleMaterial();
ResetTimer();
}
// Update is called once per frame
void Update()
{
timer -= Time.deltaTime;
if (timer < 0)
{
ResetTimer();
currentFrame++;
if (currentFrame > max)
{
currentFrame = min;
}
HandleMaterial();
}
}
//重置计时器
void ResetTimer()
{
timer = 1f / fps;
}
//处理材质
public void HandleMaterial()
{
Vector2 framePosition = new Vector2();
framePosition.x = currentFrame % columns;//取余
framePosition.y = currentFrame / columns;//取整
//"_MainTex"是默认Shader的名称
this.GetComponent<Renderer>().sharedMaterial.SetTextureScale("_MainTex", new Vector2(1f / columns, 1f / rows));
//这里我是从最上面开始播放的,如果你是从下面播放的则1 - (framePosition.y + 1) / rows)改为(framePosition.y + 1) / rows)
this.GetComponent<Renderer>().sharedMaterial.SetTextureOffset("_MainTex", new Vector2(framePosition.x / columns, 1 - (framePosition.y + 1) / rows));
}
}
我们要播放具体地动画来设置最大和最小值
首先我们将图片导入到工程中,
这里是所有素材都在一张图片上,我们通过切割来实现动画,然后将图片的格式设置为Texture;将这个图片挂载在有Renderer的物体上,我们是通过修改
来实现
public class AnimationController : MonoBehaviour {
public int min;//从第几行的第几列开始播放
public int max;//到第几行的第几列结束播放
public int fps = 2;//每秒播放几帧
float timer;//计时器
public int columns = 8;//根据图片的每列分为几个素材来定义
public int rows = 8;//根据图片的每行分为几个素材来定义
public int currentFrame = 0;//当前调用的帧数
// Use this for initialization
void Start()
{
currentFrame = min;//初始开始位置
HandleMaterial();
ResetTimer();
}
// Update is called once per frame
void Update()
{
timer -= Time.deltaTime;
if (timer < 0)
{
ResetTimer();
currentFrame++;
if (currentFrame > max)
{
currentFrame = min;
}
HandleMaterial();
}
}
//重置计时器
void ResetTimer()
{
timer = 1f / fps;
}
//处理材质
public void HandleMaterial()
{
Vector2 framePosition = new Vector2();
framePosition.x = currentFrame % columns;//取余
framePosition.y = currentFrame / columns;//取整
//"_MainTex"是默认Shader的名称
this.GetComponent<Renderer>().sharedMaterial.SetTextureScale("_MainTex", new Vector2(1f / columns, 1f / rows));
//这里我是从最上面开始播放的,如果你是从下面播放的则1 - (framePosition.y + 1) / rows)改为(framePosition.y + 1) / rows)
this.GetComponent<Renderer>().sharedMaterial.SetTextureOffset("_MainTex", new Vector2(framePosition.x / columns, 1 - (framePosition.y + 1) / rows));
}
}
我们要播放具体地动画来设置最大和最小值
相关文章推荐
- [置顶] Unity中基于NGUI插件制作序列帧动画
- 碰撞检测之Ray-Capsule检测
- Unity3d MonoBehaviour 的可重写函数整理
- Unity3d中的属性(Attributes)整理
- Share 学习二:Unity shader 的组织形式
- CCIE学习笔记 3---BGP 团体属性 community
- Unity 编辑器路径设置输入框
- 反序列化多个XML文件后出现Unity卡死
- Unity性能优化专题(腾讯牛人分享经验)
- Unity3D-Android版本调用Java函数
- 【Unity】关于LightMap过度曝光、NormalMap变红
- Unity动态对象优化
- Unity系列文章
- Unity全面优化
- Unity 的延时加载(defer resolve)
- Unity获取场景gameobject的路径
- Ubuntu unity 桌面正常工作在VNC上
- Unity3D 学习 控制角色运动控制
- Unity NGUI之ScrollView扩展-2
- unity 导出包后 xcode build 报错il2cpp_codegen_initialize_method