关于Unity 动画绘制原理
动画绘制的原理:现在屏幕中确定动画的显示区域,然后将动画中的每一帧图片按固定的时间在这个区域中按顺序切换,从而实现动画的效果。建立文件夹Textures,里面放上图片,此处我截了三张图,风怒的小鸟图片放在该文件夹下,运行结果如下图,点击相关按钮小鸟做相关移动,脚本如下:
private var anim:Object[];//动画数组
private var nowFram:int;//帧序列
private var mFrameCount:int;//动画帧总数
private var fps:float=5;//限制一秒多少帧
private var time:float=0;//限制帧的时间
var x:int;
var y:int;
var tex:Object[];
var bg:Texture2D;//背景图片
function Start () {
anim=Resources.LoadAll("Textures");//得到帧动画中所有图片资源
mFrameCount=anim.Length;//得到动画有多少帧
bg=Resources.Load("next_bg");
}
function Update () {
}
function OnGUI(){
//绘制背景图片
GUI.DrawTexture(Rect(0,0,Screen.width,Screen.height),bg,ScaleMode.StretchToFill,true,0);
//调用DrawAnimation,参数一:动画数组,参数二:动画显示区域
DrawAnimation(anim,Rect(x,y,32,48));//全局变量x,y确定主角的方向
if(GUILayout.RepeatButton("up"))
{
y-=2;
tex=anim;
}
if(GUILayout.RepeatButton("down"))
{
y+=2;
tex=anim;
}
if(GUILayout.RepeatButton("left"))
{
x-=2;
tex=anim;
}
if(GUILayout.RepeatButton("right"))
{
x+=2;
tex=anim;
}
}
function DrawAnimation(tex:Object[],rect:Rect)
{
GUILayout.Label("当前动画播放:地"+nowFram+"帧");
GUI.DrawTexture(rect,anim[nowFram],ScaleMode.StretchToFill ,true,0);//绘制动画数组
//计算限制帧时间
time+=Time.deltaTime;
if(time>=1.0/fps)
{
nowFram++;//帧切换
time=0;//切换后限制帧的时间归零,从新计算
if(nowFram>=mFrameCount)
{
nowFram=0;//若当前帧到达最后一帧,那么在从第0帧开始播放
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用