8. 读取特效

本贴最后更新于 2114 天前,其中的信息可能已经时异事殊

效果:

在 p0.pose 里的一些动画里都会有 EffectID 项。这个项指定了,当播放此动画的第一帧的时候会播放一个特效
特效也就是 sfx 目录下的后缀为.ef 的文件

首先,游戏里的特效是分类型的,全部类型有
BOX 立体模型
AUDIO 声音
PLANE 平面特效
DONUT 圆环特效
MODEL 物品特效,读取 des 文件作为模型,类似雪人套装和手机就这么弄得
SPHERE 球体特效
PARTICLE 粒子特效
CYLINDER 圆柱模型、
BILLBOARD 公告板特效
FLAG 一般用来挂载 受击打位置的特效显示,流血刀光一类
这些参考了网上查的资料

一般一个特效是.ef 文件,一个 ef 内部包含数个小的特效,有粒子,平面,立方体,圆球,圆柱(顶半径为 0 则圆锥都是 Cylinder),圆环,声音,广告牌之类
这些特效都有一个特点,就是他们是用参数指定给程序,让程序即时绘制的,这点很重要,之前准备对每个类型的资源做个标准大小,然后按照他设置的尺寸缩放,之后发觉无论如何,经过每一帧的缩放后,总是位置不对
在 unity 里习惯了指定预设完事,而要还原流星的特效就必须代码生成 Plane ,Sphere, Cylinder, Box 的网格,这个搞定之后
特效里有部分参数,设置了特效跟随着谁一起移动,又设置了跟随谁一起旋转,最后就是最麻烦的,因为一个特效都有很多帧,帧里会设置位置,那么这个位置,之前还原的时候,一直都是世界坐标
一般一个特效会存在 1-2 个骨骼,1 个用来跟随移动,1 个用来相对移动, 就是根据跟随物体的自身坐标系空间,来进行一个移动,这个移动是一个差值,也就是其中一个骨骼指定的物体的某个轴方向上移动动画帧设置的距离,所以之前坐标一直不对
而现在基本把流星的特效全部还原了。

CYLINDER 圆柱体特效,会根据设定的参数生成指定大小的圆柱模型,而不是直接拿美术模型来用
在使用匕首上上 A 时,特效在帧动画参数结束后,会有一些额外参数
0, 3, 30,40,90,450 理解为圆柱体,头一个 0 是程序读 ef 文件算长度的,后面的顶部半径(3) 底部半径(30),高度 40,另外 90,450 这两个参数不明白什么意思,但是改了也会引起特效变化
而匕首后 A 时,特效的三个参数变为
0,0,5 ,5,90,450 同样的意思,因为匕首后 A 体现刺的感觉,所以圆柱体特效尖端很细(在这里为 0 表示成为圆锥体)。这个顶部 0,底部 5,高度 5 的圆锥,经过特效的缩放参数,和动画帧中的四元数设置,让特效尖端保持与匕首尖端一致位置
所以可以看到很多圆柱体特效,但是特效样子都不一样,这就是因为这个网格模型是经过参数生成的,而不是固定的一个美术资源。

但是这些值里,单位应该是不一致的,顶部半径和底部半径,可能都是用实际米,高度,填 5 跟角色差不多高,而角色高度 36 左右,这点还需验证
现在代码里是以单位为米计算的。

特效的生命周期
特效一般会从 pose 里调用,动作播放的第一帧,就会播放特效,而特效的最后一帧的时刻就是删除时刻

特效与动作的配合
类似匕首 pose259 动作,播放特效时会产生一个攻击盒,这个盒子会随着动作一起移动,然后在 259 的攻击帧内开启攻击盒,如果动作播放的速率,与特效不匹配,那么可能攻击盒会在动作播放完毕前就被删除,所以要让动作完全按照制作时的 30 帧/S 来算插值
对接到 unity 的帧率上,比如如果 unity 是 60fps,那么原版动作像被加速运行一样,必须在 update 里重新计算动作缩放比
在 unity 里 QualitySetting 里 vsyncCount 的值决定了同步方式
Dont sync 表示不垂直同步,这种情况是尽高帧率跑。
Every V Blank 每 1 次垂直扫描归位一次同步 PC 上尽量以 60 帧/S 跑
Every Second V Blank 每 2 次垂直扫描归位一次同步 PC 表示尽量以 30 帧/S 跑

感觉跟时间有关系的东西,都麻烦的很,在 3 种同步方式下,我都不知道 Update 在 1 秒里被调用了多少次
以下是在 pc 上测试 unity 5.4.1f1 的 update 调用.
不垂直同步下,数值不稳定,认为没有什么意义 大部分数值比开了同步要大的多,一般在 90-105 左右 time.deltatime 不稳定数值浮动大
1 倍垂直同步 1 秒约调用 update 50 次 time.deltatime = 0.016-0.017
2 倍垂直同步 1 秒约调用 update 30 次 time.deltatime = 0.0333 特殊情况下 会存在 0 time.deltatime = 0.005
这样看来,用 update 里每一帧时间的增量来算动作插值应该是可以的,只要避免跳帧。

现在就来修改动画播放受垂直同步帧率影响的问题。
发觉好像是显卡问题,有时候像鬼畜一样,帧率嗖嗖的起来了,有时候又很正常,不清楚这个帧率受什么影响
一个好游戏,帧率稳定非常关键,而且帧率过高并不全是好处,到了人眼识别范围外,就没有必要了,费电不说,
像原版流星 fps 高了之后,跳不起来,这算是个 bug 吧.

相关帖子

2 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    版主Winson您好, 想請教一下; 原版流星飛行類武器是預設無法加載於其飛行時的武器首端和末端嗎 ? 原先打算把光球特效light.ifl加載於飛行中的飛輪上, 跟飛輪一起移動, 做出七龍珠飲茶操氣彈的效果:

    https://www.google.com.hk/search?q=%E6%93%8D%E6%B0%A3%E5%BD%83&client=firefox-b&dcr=0&source=lnms&tbm=isch&sa=X&ved=0ahUKEwj9hceMjaPYAhVFI5QKHYboCTsQ_AUICigB&biw=1280&bih=606#imgdii=HlVp111IPl0VlM:&imgrc=tzJ4J76NbzEfqM:

    但光球結果停留在右手, 飛輪卻自顧自地飛出去攻擊敵人:scream: .

  • someone

    谷歌中国访问不了啊。飞行类武器应该都是代码临时生成的物件,如果是飞镖应该是有一个重力模拟类似抛物线过程的吧,轨迹中碰到敌人就算伤害,如果碰到场景物应该会销毁掉,火枪可能是用一条射线碰到的首个障碍物处播放一个特效,然后看射线是否碰到敌人了来算伤害的吧,飞轮可能是朝攻击目标算了轨迹曲线之类的,轨迹去的路上碰到第一个敌人开始返回,回的路上所有碰到的人全部受击。飞轮比较特殊的。现在这些飞行武器我也还没实现
    你要做的这种效果,可以新增个特效A,按照在角色面前10码,20码,30码,设置几个动画帧,把时间什么设置好,然后再增加其他特效,以A作为定位点,你可以看下那个飞轮的地面大招那个带毒的旋风,和那个吸心都是类似此做法做的,那个旋风的轨迹基本就是这样做的,只是他带的是旋转。所以看到的是绕角色转圈圈

推荐标签 标签

  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 625 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • abitmean

    有点意思就行了

    29 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 376 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2031 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    167 引用 • 1513 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 261 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    408 引用 • 3574 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 633 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 175 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖 • 1 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    351 引用 • 1814 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 43 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 483 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 302 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 550 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 399 关注
  • CodeMirror
    1 引用 • 2 回帖 • 129 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 27 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 531 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 167 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 638 关注