unity3d 序列帧最多支持多少序列帧

unity3d里面的序列帧动画怎么做_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
unity3d里面的序列帧动画怎么做
我有更好的答案
用animation做或者代码写,把你的图片放集合里,然后多少帧++就行了
为您推荐:
其他类似问题
您可能关注的内容
unity3d的相关知识
等待您来回答序列帧动画制作
大家好,偶目前遇到一个问题:当序列帧图片过多(120张)过大()时,使用什么方法做序列帧动画运行时不会太卡?我使用过的方法:1、NGUI的创建图集制作的方法不行,因为只要创建图集,unity直接崩溃掉,可能是由于图片过大过多吧;2、使用Resources.Load()的方法做时,运行又太卡了;各位朋友,有知道其他方法的或者可以解决太卡问题的,回个帖啊,感谢万分!!!!
要评论请先&或者&
用NGUI的texture应该可以,给maintext循环赋上贴图
使用Resources.Load()的方法做,你一次性把图片资源加载完存入字典,通过遍历字典来播放图片在图片播放的过程中应该不会卡的
改变一下方案吧,你的图片数量太大了,光图片得100多M了把
这样的项目规划科学么?
或者用视频纹理。
已解决,使用的movietexture的方法做的【图片】教你如何用Unity3D实现帧同步!【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:76,968贴子:
教你如何用Unity3D实现帧同步!收藏
在帧同步模型中,每个客户端都会对整个游戏世界进行模拟。这种方法的好处在于减少了需要发送的信息。帧同步只需要发送用户的输入信息,而对于反过来的中心服务器模型来说,单位的信息则发送越频繁越好。比如说你在游戏世界中移动角色。在中心服务器模型中,物理模拟只会在服务器执行。客户端告诉服务器,角色要往哪个方向移动。服务器会执行寻路而且开始移动角色。服务器紧接着就会尽可能频繁地告知每个客户端该角色的位置。对于游戏世界中的每个角色都要运行这样的过程。对于实时策略游戏来说,同步成千上万的单位在中心服务器模型中几乎是不可能的任务。在帧同步模型中,在用户决定移动角色之后,就会告诉所有客户端。每个客户端都会执行寻路以及更新角色位置。只有用户输入的时候才需要通知每个客户端,然后每个客户端都会自己更新物理以及位置。这个模型带来了一些问题。每个客户端的模拟都必须执行得一模一样。这意味着,物理模拟必须执行同样的更新次数而且每个动作都需要同样的顺序执行。如果不这么做,其中一个客户端就会跑在其他客户端之前或者之后,然后在新的命令发出之后,跑得太快或者太慢的客户端走出的路径就会不同。这些不同会根据不同的游戏玩法而不同。另一个问题就是跨不同的机器和平台的确定性问题。计算上很小的不同都会对游戏造成蝴蝶效应。这个问题会在后续的文章中讲到。这里的实现方案灵感来自于这篇文章:《1500个弓箭手》。每个玩家命令都会在后续的两个回合中执行。在发送动作与处理动作之间存在延迟有助于对抗网络延迟。这个实现还给我们留下了根据延迟以及机器性能动态调整每回合时长的空间。这部分在这里先不讨论,会在后续文章再说。对于这个实现,我们有如下定义:帧同步回合帧同步回合可以由多个游戏回合组成。玩家在一个帧同步回合执行一个动作。帧同步回合长度会根据性能调整。目前硬编码为200ms。游戏回合游戏回合就是游戏逻辑和物理模拟的更新。每个帧同步回合拥有的游戏回合次数是由性能控制的。目前硬编码为50ms,也就是每次帧同步回合有4次游戏回合。也就是每秒有20次游戏回合。动作一个动作就是玩家发起的一个命令。比如说在某个区域内选中单位,或者移动选中单位到目的地。注意:我们将不使用unity3d的物理引擎。而是使用一个确定性的自定义引擎。在后续文章中会有实现。游戏主循环Unity3d的循环是运行在单线程下的。可以通过在这两个函数插入自定义代码:Update()FixedUpdate()Unity3d的主循环每次遍历更新都会调用Update()。主循环会以最快速度运行,除非设置了固定的帧率。FixedUpdate()会根据设置每秒执行固定次数。在主循环遍历中,它会被调用零次或多次,取决于上次遍历所花费的时间。FixedUpdate()有着我们想要的行为,就是每次帧同步回合都执行固定时长。但是,FixedUpdate()的频率只能在运行之前设置好。而我们希望可以根据性能调节我们的游戏帧率。游戏帧回合这个实现有着与FixedUpdate()在Update()函数中执行所类似的逻辑。主要不同的地方在于,我们可以调整频率。这是通过增加”累计时间”来完成的。每次调用Update()函数,上次遍历所花费的时间会添加到其中。这就是Time.deltaTime。如果累计时间大于我们的固定游戏回合帧率(50ms),那么我们就会调用gameframe()。我们每次调用gameframe()都会在累计时间上减去50ms,所以我们一直调用,知道累计时间小于50ms。我们跟踪当前帧同步回合中游戏帧的数量。每当我们在帧同步回合中达到我们想要的游戏回合次数,我们就会更新帧同步回合到下一轮。如果帧同步还不能到下一轮,我们就不能增加游戏帧,而且我们会在下一次同样执行帧同步检查。在游戏回合中,物理模拟会更新而且我们的游戏逻辑也会更新。游戏逻辑是通过接口(IHasGameFrame)来实现的,而且添加这个对象到集合中,然后我们就可以进行遍历。IHasGameFrame接口有一个方法叫做GameFrameTurn,它以当前每秒游戏帧的个数为参数。一个具体的带游戏逻辑的对象应该基于GameFramesPerSecond来计算。比如说,如果一个单位正在攻击另一个单位,而且他攻击频率为每秒钟10点伤害,你可能会通过将它除以GameFramesPerSecond来添加伤害。而GameFramesPerSecond会根据性能进行调整。IHasGameFrame接口也有属性标记着结束。这使得实现IHasGameFrame的对象可以通知游戏帧循环自己已经结束。一个例子就是一个对象跟着路径行走,而在到达目的地之后,这个对象就不再需要了。帧同步回合为了与其他客户端保持同步,每次帧同步回合我们都要问以下问题:我们已经收到了所有客户端的下一轮动作了吗?每个客户端都确认得到我们的动作了吗?我们有两个对象,ConfirmedActions和PendingActions。这两个都有各自可能收到消息的集合。在我们进入下一个回合之前,我们会检查这两个对象。动作动作,也就是命令,都通过实现IAction接口来通信。有着一个无参数函数叫做ProcessAction()。这个类必须为Serializable。这意味着这个对象的所有字段也是Serializable的。当用户与UI交互,动作的实例就会创建,然后发送到我们的帧同步管理器的队列中。队列通常在游戏太慢而用户在一个帧同步回合中发送多于一个命令的时候用到。虽然每次只能发送一个命令,但没有一个会忽略。当发送动作到其他玩家的时候,动作实例会序列化为字节数组,然后被其他玩家反序列化。一个默认的”非动作”对象会在用户没有执行任何操作的时候发送。而其他则会根据特定游戏逻辑而定。这里是一个创建新单位的动作:这个动作会依赖于SceneManager的静态引用。如果你不喜欢这个实现,可以修改IAction接口,使得ProcessAction接收一个SceneManager实例。实例代码可以在下面找到:Bitbucket – Sample Lockstep本文来自手Gad游戏开发者平台,加入GAD的核心用户QQ群,参加有奖活动阅读原创技术贴,让你真正做到快乐学习!QQ群号:原文地址:
正版授权奇迹MU页游,奇迹重生!原汁原味还原奇迹,十年轮回!
消灭无人回复惨案
登录百度帐号推荐应用今天看啥 热点:
Unity3D中播放序列帧动画,unity3d播放序列
【狗刨学习网】
class FrameAnimation&
& & private float fps = 10.0f;
& & private Rect drawP
& & private float time = 0;
& & private int currentIndex = 0;
& & public void DrawFrameAnimation(Texture[] frameTex)&
& && &&&int length = frameTex.L
& && &&&GUI.DrawTexture(drawPos, frameTex[currentIndex]);
& && &&&time += Time.deltaT
& && &&&if(time &= 1.0f/fps)
& && && && &currentIndex++;
& && && && &time = 0;
& && && && &if(currentIndex&= length-1)
& && && && &{
& && && && && & currentIndex = length - 1;
& && && && &}
& & public FrameAnimation(Rect drawPos,float fps)
& && &&&this.drawPos = drawP
& && &&&this.fps =
在unity3D中新建一个脚本直接调用该类。
using UnityE
using System.C
public class DrawAnimation : MonoBehaviour {
& & //private R
& & private Rect drawPos = new Rect(200,0,500,200);
& & private Object[] texO
& & public bool isCanDraw =
& & Texture[] frameT
& & private FrameAnimation frameA
& & // Use this for initialization
& & void Start () {
& && &&&LoadTexture(texObject,&FrameTex&);
& && &&&frameAni = new FrameAnimation( drawPos, 10);
& & void OnGUI()&
& && &&&if(GUILayout.Button(&@#@&))
& && && && &isCanDraw =
& && &&&if(isCanDraw)
& && && && &frameAni.DrawFrameAnimation(frameTex);
& & void LoadTexture(Object[] texObj, string path)
& && &&&texObj = Resources.LoadAll(path);
& && &&&frameTex = new Texture[texObj.Length];
& && &&&texObj.CopyTo(frameTex, 0);
其实完全没有必要写成类,但是为了方便修改和最近在练习写代码的习惯,希望逐渐面向对象编程,希望可以提高代码的灵活性和复用性,所以就当是练习了!
发现把所有图片一次性全部导入,加载相当的消耗资源,在PC上都会卡上一下,何况在移动平台上,特别有的时候图片稍微多的时候。
所以把代码稍作修改:
int currentIndex = 0;
& & Texture frameAniT
& & // Use this for initialization
& & void Start ()
& & // Update is called once
& & void FrameAnimation()
& && &&&//isAnimating =
& && &&&frameAniTex = resources.GetTexture(&BootAnim/&
+ currentIndex.ToString(&D4&));
& && &&&GUI.DrawTexture(frameAnimPos,frameAniTex);
& && &&&if (currentIndex &
length - 1)
& && && && &time += Time.deltaT
& && && && &if (time &= 1.0f
& && && && &{
& && && && && & currentIndex++;
& && && && && & time = 0;
& && && && && & if (currentIndex
== length - 1)
& && && && && & {
& && && && && && &&&Resources.UnloadUnusedAssets();&
&&&///加载完成后,即播放完毕后,卸载掉这些资源,好像跟播放序列帧动画扯远了,这是加载资源管理才对、、、、、
& && && && && & }
& && && && &}
这样做的好处是一张一张的加载资源,不像上面的那样一次性加载完,但是图片的数量即length的数量需要自己手动传入,因为无法根据代码动态获取。
声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
更多精彩内容:
相关搜索:
相关阅读:
相关频道:
Android教程最近更新后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 3058|回复: 15
unity模型播放序列帧脚本
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
脚本用于模型播放单张序列帧图片,脚本直接赋予模型使用即可。
14:22 上传
点击文件名下载附件
售价: 2 张CG券 &[]
unity模型播放序列帧脚本
如何让别人关注你?
本楼回复(<span id="dp_count_)
如何让别人关注你?
好东西 正需要
本楼回复(<span id="dp_count_)
如何让别人关注你?
好好好好好好好好好
本楼回复(<span id="dp_count_)
如何让别人关注你?
添加到unity后出现错误,不能使用,怎么办?
本楼回复(<span id="dp_count_)
如何让别人关注你?
有错。 不能循环播放。怎么回事。
本楼回复(<span id="dp_count_)
如何让别人关注你?
本楼回复(<span id="dp_count_)
如何让别人关注你?
不是想象中的那样,脚本用不了。。。好可惜2CG币~~~
本楼回复(<span id="dp_count_)
如何让别人关注你?
报错用不了
本楼回复(<span id="dp_count_)
如何让别人关注你?
用不了还花钱,草
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered by}

我要回帖

更多关于 unity3d 序列化类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信