目录
《头号玩家》Unity虚拟拍摄方案解析
用刚体控制角色移动的实践
Marvelous Designer 动画创作工作流在 Unity HDRP 的实现
UDP助力手游四海为家
二次元向高品质着色器解决方案:Unity-Chan Toon Shader 2.0 介绍
《不可思议之梦蝶》从 PC 版移植到 Nintendo Switch 经验分享
游戏开发者出海监测的几个关键问题
爆款的诞生:《胡闹厨房2》的多人游戏模式解决方案
如何将游戏转为 DOTS 模式
使用 Unity Tiny Mode 进行原型设计
闪耀暖暖技术分享:2D 到 3D 的进化与创造之路
Unity AI 自动化游戏测试
游戏架构和云服务的耦合前瞻 —— 匹配对战和连续大世界
提升收益的组合拳:广告变现 与IAP 内购
Unity 轻量级渲染管线(LWRP)源码及案例解析
Unity 游戏开发优化案例
Unity 的 Asset 管理和序列化
Unity 中的实时光线追踪技术剖析
基于 Unity 的手游基础服务框架的研发
一步解决 Unity 游戏新安全风险
媒体报道
以往笔记
Unity2018
Unity2017上
Unity2017下
《头号玩家》Unity虚拟拍摄方案解析
用刚体控制角色移动的实践
用CharacterController控制的角色与场景交互比较简单
用Rigbody交互比较真实自然
CharacterController仅适用于标准FPS移动
落地检测方法
1. 射线检测点
2. Rigbody.velocity < 0
- 可以用速度变化计算落地伤害
- 可以用水平方向的速度变化判断角色是否被推走
- 调整Rigbody.drag的值可以表现浮空效果
- 可用于计算斜面行走的体力消耗/移动速度
超大型角色
用动画控制移动,用物理运算挤开玩家
要注意FixUpdate在一个Update周期之间可能调用多次
斜面上的地形模拟
- 设置Physics Material
- 墙壁的 friction 系数小
- 地面的 friction 系数大
- 根据Rigbody.velocity更改角色的动画
Marvelous Designer 动画创作工作流在 Unity HDRP 的实现
制作过程
- 服装在Marvelous Designer制作(不需要专业服装知识)
- 在Maximo制作板片
- 在Marvelous Designer进行布料模拟
- 在Unity创建动画(设置高清渲染管线)
制作服装
- 方法一:自己制作
- 在various patterm下载想要的服装款式
- 以该图片为背景描绘轮廓
- 会遇到身材不匹配的问题,MD可以自动调节
- 手动微调
- 方法二:直接购买,也有免费素材
- 方法三 使用Flatten功能
制作板片
- 打开Mixamo网站
- 上传FBX
- 选择重要连接点
- 导出
布料模拟
- MD是最容易,准确率最高的布料模拟软件
- 问题解决
- 大多数问题都是动作太快,可以通过拉长模拟时间解决
- 不建议用normal模式,该模式一般用来快速预览,在complete模式下大部分模拟都比较稳定
- 调节 time warp ,但是在快速动画中会出现的褶皱不会在慢速出现,不推荐
导入Unity
- Unity支持Pc2格式
- alembic格式更好,但是需要安装alembic插件
- Post Processing 后期处理(校正颜色,环境光散射,实时查看景深)
- 通过Unity Recorder导出视频,(截图方式,方便后期,时间也快)
Real Time(实时渲染)
- 加载布料引擎
- 放服装进入游戏
UDP助力手游四海为家
- 东南亚
- 本地化很重要
- 东南亚国家80%玩家没有信用卡,支付成功率很低
- 通过弹出Web页面实现第三方支付
- 韩国
- 总量200-2500万人
- 通常关注留存,用户体验
- 政府要求较高,需提供相关文件
二次元向高品质着色器解决方案:Unity-Chan Toon Shader 2.0 介绍
UTS组成
- Base Color
- 1st Color
- 2nd Color
方便的用户手册以及操作界面
可以直接在booth购买预设方案
《不可思议之梦蝶》从 PC 版移植到 Nintendo Switch 经验分享
用了很多插件,见链接
- 不能使用Unity Input
- Rewired插件可以提供很好的支持
- HD震动,加速计,参考范例
注意Joy-con 的五种输入方式
存档I/O需要重写
- 没有默认的奖杯界面,需要自己制作
- 内存较小 1G内存
- 插件需要平台授权费
- 声音格式
- 支持Opus格式硬解压
- 使用Wwise,选择OpusNX格式
优化
1. 使用git来管理不同版本
2. 将声音使用steam方式读取
3. 通过Console -> Editor Log 查看资源实际占用
4. 用二分法排查SDK导致的崩溃
游戏开发者出海监测的几个关键问题
追踪链接:(监测广告推广的效果)
国外三家:
- Kochava
- Adjust
国内两家
- Talking Data
- ShareInstall
如何选择渠道 如何防止假量 几个有用的功能 如何精准定位受众
如何选择渠道
自归因渠道:计费由渠道方自行决定
- Search Ads
- snapchat
- Display & Video 360
非自归因渠道:
- Amazon
- Moloco
- Criteo
- Unity Ads
每个季度的报告可以去kochava官网下载
2019第一季度的报告在这里
假量分析
10大推广渠道,84%产生假量
27%的安装是虚假的
70%的假量是安装劫持(监听到App安装后,上报一条广告点击事件,2016年由以色列人发现)
安卓45%的点击是假量,IOS平台少于1%
2019年假量有所收敛,原因是记者报道,google下架了百度的48款产品也是原因在此。
今日头条开始与Google/FB竞争渠道市场。
防假措施
1. 全球假量黑名单
2. 防伪控制台
3. 屏蔽“广告堆叠”等造假措施
对开发者有用的功能
1. 永久排重(避免重复计算,永久保留原始数据)
2. Tracker归因窗口,(按照广告类型区分结算时间)
3. 实时查看留存
4. 花费以及ROI监测
5. 源数据SQL查询
6. 漏斗分析以及客户召回(可以向流失用户推送定制化消息)
7. 跨设备监测
如何进行精准定位
- 可选择多个维度进行投放“例如选择有Unity游戏的用户”
爆款的诞生:《胡闹厨房2》的多人游戏模式解决方案
如何将游戏转为 DOTS 模式
DOTS=
- JosSystem
- ECS
- Burt Compiler
- Project Tiny
使用DOTS的理由:
- 性能高
- (这里我补充一点,ECS的架构在编写代码时效率也是非常高的,结构简洁清晰)
使用Unity Tiny进行原型设计
传统迭代方式:
- 概念
- 设计
- 开发(最耗时)
- 安装
- 测试
- 反馈(回到1)
使用Unity Tiny砍掉开发流程,通过架设Web服务器的方式,跳过编译环节
要求:
- 确定所有可调的参数
- 将参数集中在一个类里
闪耀暖暖技术分享:2D 到 3D 的进化与创造之路
Unity AI 自动化游戏测试
通过蒙特卡罗方法预测玩家行为
- 记录选择路径
- 取选择的方向
- 取选择的概率(有随机性的情况下)
C Value :好奇心/贪婪之比
最后根据AI的平均胜率判断关卡难度
更深的网络层数可提高AI能力
游戏架构和云服务的耦合前瞻 —— 匹配对战和连续大世界
匹配对战游戏服务器架构
弹性伸缩
- 解决痛点,业务规模呈周期波动
- 容器服务(TKE),秒级启动
延迟问题
- 现有方案:根据玩家的网络情况把不同玩家匹配在一起
- 前瞻:根据匹配成功的玩家快速启动示例(就是服务器在有玩家匹配的情况下按需启动)
连续大世界
目标
- 复杂计算
- 支持超大世界场景
- 场景无缝切换
- 拓展不需要停机维护
方案
- 分布式架构
- 基于空间位置作为索引保存数据
- 以矩形为基础进行数据储存并记录边界信息
- 实现实体在保管者的移动和保管范围的扩缩
- 对运行规则进行切分
- 为每条规则建立事务集群,对实体保管者进行读写
- 规则模拟器独占写权限,分享区域边界读权限(边界大小:一个刚体的最大体积,AI:一个对象的最大视野)
- 玩家可看做一种特殊的规则模拟器
提升收益的组合拳:广告变现 与IAP 内购
Unity Ads
- 连接设备1.7B
- 月视频展示次数 10.5B
- 每日游玩时数 8.8B
优势:
- 提前获得玩家类型
- 提供内购广告和视频广告两种方式适应不同人群
- 根据数据后台分析玩家属性(我们可以自己建立一个)
Unity 轻量级渲染管线(LWRP)源码及案例解析
对比:
- 传统渲染管线一个光源是一个pass,轻型渲染管线一个pass对应多个光源
- 轻型渲染管线对光源有限制 < 4个
尽量不要使用多摄像机,会造成比较大的性能开销
FPS游戏里枪支和场景是分开渲染的,一般场景的FOV是80,枪支是40
通过设置渲染顺序避免像素重复填充 在Camera中设置深度缓存
通过修改代码使运行时修改Render可行
将renderFeature 设为public
Unity 游戏开发优化案例
自研Batch合并工具调整参数来实现DrawCall与包体大小的平衡
材质:区分共享材质和区域材质
图集:大厅和游戏内做两套独立图集
Unity 的 Asset 管理和序列化
Unity 内置的序列化格式
- Streamed Binary Read/Write
- YAMLRead/Write
- JSON Read/Write
- Remap PPtm
Assets 导入管线:
- 分配GUID
- 创建.meta文件
- 序列化数据并保存在Library文件,()
GUID:
- 分配给GUID
- 长度为128bit
- 保存在meta文件中
FileID:
- 分配给Object
- 保存在序列化文件中(Library)
GUID 和 文件ID
- !u!4&998431354
- Transform
- Class ID:4
- File ID: 4998431354
Import Assets
所有非unity原生的资源格式会根据setting和目标平台进行资源处理和序列化
Library Folder
- metadata序列化文件
- metadata的文件名就是他的GUID
- 按照Assets GUID的前两位hex进行分组
- 共256个文件夹
binary2text
- metadata默认状态是二进制形式
- 可以在这个路径找到 Unity\Editor\Data\Tools\binary2text
Shader Assets
* 读取shader时会解压缩,导致加载尖峰
Script Assets
只在Editor中被序列化的
- m_script
- m_Icon Unity调用Update等特殊API是将所有接口筹集到一个特殊容器中然后遍历,并没有用到反射。
Model Assets
勾选 mesh compress,会抹掉顶点,但会压缩,建议关闭。
Unity 中的实时光线追踪技术剖析
DXR结构:
基于 Unity 的手游基础服务框架的研发
为什么不使用第三方SDK解决方案
- 第三方SDK有滞后性
- 想要的部分功能缺失
- 缺少源码
每个功能是一个核心模块 建议使用Gradle进行编译,节约解决SDK冲突时间
经验:
- 使用C# Attribute方便管理
- 不要低估SDK维护成本
- 自动化能大幅提升开发效率
- 原生平台开发比较复杂
提问:
接入微信SDK时,若要求代码的包名与设置一致该如何解决?
答,自动生成并编译代码。
一步解决 Unity 游戏新安全风险
破解工具:
- ILSpy
- dnspy
- Cheat Engine
- Reflector
IL2CPP可以提升安全性,但是不够安全
反破解方案:
- 文件加密
- 方法加密 + 字符串加密
- 指令加密
在Projectsetting中勾选一下就可以生效 目前还在Demo阶段
有些开发人员调试开关打开project Setting.asset就可以找到,但是不会在面板中出现。
媒体报道
《使命召唤》手游引擎技术的升级与演化
用AR Foundation实现多平台AR的开发
爆款的诞生:《胡闹厨房2》的多人游戏模式解决方案
闪耀暖暖技术分享:2D 到 3D 的进化与创造之路
《头号玩家》背后的技术:Unity虚拟拍摄解决方案解析