还有高手?用Shader让图片中的3D圆环转起来!

引言

哈喽大家好,我是亿元程序员,一位止步 8 年游戏行业经验的主程。

不知道小伙伴是否还记得在 2D 项目里做 3D 音乐球球的那期文章,项目经理强行要在 2D 项目里实现 3D 的游戏效果。

俗话说得好 ,很多事情只有 0 次和无数次,项目经理要求在 2D 项目里做 3D 效果也不例外。

项目经理 :能不能在我们 2D 项目模拟实现一下 3D 欢乐球球的游戏效果?

: ...

可能有很多小伙伴未见过欢乐球球这个游戏,就是通过旋转平台,让在平台上不停跳跃的小球从缺口下落得分的游戏。

避免限流,就不发游戏视频了,重点就是让一张圆环图片模拟出 3D 的旋转效果:

言归正传 ,本期跟随笔者来看看,如何用Shader让图片中的 3D 圆环转起来!

本文示例工程在文末获取,小伙伴们自行前往。

资源准备

首先我们找搭子帮忙生成一张圆环,有条件的小伙伴可以找美术妹子帮忙。

然后 创建一个名叫ring的 2D 工程,为了避免小伙伴说是 3D 的,我截了一个图:

接着把图片放到项目里,然后拖到场景中即可完成资源的准备:

接下来就可以让圆环转起来了

初见端倪

看到这里可能有小伙伴就跃跃欲试了:

旋转? 这个我会,一个tween的事情!

于是开始奋笔疾书:

运行一看

虽然转是转起来了,就是转的是图片,没有转圆环。

我是这样转的

1.给点颜色瞧瞧

因为 圆环是纯白色的,如果正常转起来,看不出变化,因此我们先通过Shader给圆环加点颜色。

首先 我们还是复制一个builtin-sprite到我们项目的assets目录,并且改个自己喜欢的名字:

想要 通过shader改变颜色,只需要在片元着色器中简单修改即可:

然后 新建个材质球,选择自定义的shader

最后修改下图片的材质即可看到红色的圆环了:

全红?那这和白色有什么区别...

2.圆环部分红色

首先Shader中添加几个参数:

其中:

  • rotation:红色弧段所在的角度。

  • segmentWidth:红色弧段的长度。

  • edgeSoftness:弧段边缘的柔和程度。

接着在片元着色器中声明这些参数:

如果直接通过图片 UV 计算角度,得到的只是一块平面扇形,无法处理圆环的前后遮挡。

因此 ,项目中使用一个数学圆环,并通过 traceRing 找到当前像素对应的圆环表面位置:

**这是球面追踪(SDF 光线步进)**渲染圆环。

屏幕每个像素发射一条射线,去找圆环的交点,自动处理圆环前后遮挡。

由于篇幅问题就不作深入讲解,感兴趣的小伙伴可以深入研究。

然后计算这个位置在圆环上的角度:

再计算它与红色弧段中心的距离:

当角度差小于弧段宽度时,就把当前像素标记为红色区域:

最后 使用 mix 混合原图和红色:

再次回到编辑器即可看到效果:

红色部分已经准备好了,接下来只要不断修改 rotation,就可以让它沿着圆环转起来。

3.脚本控制旋转

红色部分已经准备好了 ,接下来通过脚本修改Shader中的 rotation 参数,让红色弧段跟随鼠标移动。

首先 获取当前Sprite使用的材质实例:

然后监听鼠标和触摸事件:

拖动时,将横向移动距离转换成旋转角度:

鼠标移动时调用旋转方法:

回到编辑器运行一下:

以上就是我和搭子用Shader让图片中的 3D 圆环转起来的全部内容,如有不对,还请指出。

结语

项目经理:我就知道你可以的!

**不知道小伙伴们还有没有更简单的实现方式?**欢迎在评论区分享你的思路。

本文实例工程 可通过私信 发送"圆环"获取。

更多实战完整源码包含编辑器 已集成到亿元Cocos小游戏实战合集(已完结),感谢小伙伴们对创作的支持。


我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助,也希望通过您能帮助到大家。

实不相瞒,想要个爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐文章:

亿元Cocos小游戏实战合集2.0

亿元Cocos小游戏实战合集1.0

老板说最近这款游戏很火让我抄,可是我连玩都玩不明白...

这款值68亿的游戏,你不实战一下吗?安排!

小伙伴说我的拼图游戏用Mask不能合批...

俄罗斯方块谁不会做......啊?流沙版?

最近很火的一个拼图游戏,老板让我用Cocos3.8做一个...

老板说拼图游戏太卷了,让我用Cocos做个3d版本的...

敢不敢挑战用Cocos3.8复刻曾经很火的割绳子游戏?

相关推荐
灯澜忆梦13 分钟前
【基于GO的Web开发14】gin请求重定向
前端·后端·golang·gin
qq_4523962314 分钟前
第十一篇:《前端性能优化体系:从加载到交互的全链路》
前端·性能优化·交互
Mh17 分钟前
听说我兄弟喜欢跑车,所以必须安排上
前端·javascript·vue.js
zttbee17 分钟前
vue学习(白话功能版)
前端·vue.js·学习·前端框架
qq_4260039619 分钟前
多语言新增语种全量测试策略
前端·javascript·python·pycharm·自动化
nicole bai27 分钟前
前端封装el-table及注意点
前端·javascript·vue.js
晨枫阳36 分钟前
Vue 前端构建工具链完全理解指南
前端·javascript·vue.js
言乐637 分钟前
Python关于老游复刻与创新2
前端·javascript·css·python·css3
ly768938 分钟前
前端测试完整指南:从单元测试、组件测试到端到端测试与 CI/CD
前端·ci/cd·单元测试