小伙伴说我的绳子要是有纹理就完美了,我就笑了...

引言

哈喽大家好,我是亿元程序员。

前阵子我发了一篇割绳子游戏实战的文章,其中核心在于如何制作一根不像棍子的物理绳子,受到小伙伴们的一致好评:

但是也有小伙伴认为绳子缺少纹理不够完美:

看到这,我就笑了,哈哈,非常感谢小伙伴提供的素材,绳子的确可以优化成带有纹理的绳子。

言归正传 ,本期带大家一起来实战看看,如何通过自定义Assembler实现一根带有纹理的绳子。

本文源工程可在文末获取,小伙伴们自行前往,有体验链接。

为什么要有纹理?

因为没有纹理的线:

  • 像棍子
  • 像塑料吸管
  • 像程序员的头发(越来越少)

具体到游戏有割绳子游戏中的绳子纹理,箭头游戏中把箭头换成蛇或者其他皮肤。

Cocos 自带的Graphics虽然能画线,但有个问题就是不支持纹理。

所以本期我们就一起来实现一个。

实现纹理画线有哪些办法?

想要实现纹理画线,笔者能想到的,有且不局限于下面几种:

1.Sprite拼接

相信很多小伙伴第一反应能想到的就是这个方法,理论上当绳子的每一节越来越小,节数越来越多时,就会接近绳子的状态,否则绳子就会像双截棍一样。

2.MeshRenderer

通过 自己生成Mesh(顶点 + 索引),用MeshRendererUIMeshRenderer进行渲染。

3.自定义Assembler

通过 UIRendererAssembler,自己生成顶点数据,接入UI渲染管线(Assembler)。

喜欢 看源码的小伙伴,可以看看Graphics组件MotionStreak(拖尾)组件

接下来我们就借鉴一下,通过Assembler实现纹理画线。

纹理画线实战

1.核心原理

  • UIRenderer :Cocos 所有 2D UI 组件的「渲染基类」(Sprite、Label 都继承它)。

  • Assembler : 负责把「坐标、UV、颜色」打包成渲染器能识别的顶点数据。

  • 渲染流程我们写路径坐标-> 生成顶点(UIRenderer)-> 组装器打包(Assembler)-> 提交 GPU 渲染

根据上述流程 ,我们需要把"线"变成一条条三角形Mesh来画。

也就是:

一条线 -> 展开成一个"带宽度的条带" -> 用三角形拼出来 -> 再贴纹理

给大家画个图(别慌不是画饼):

三角形

2.具体实现

新建 一个TextureGraphics组件继承UIRenderer

首先 路径点的收集,避免游戏逻辑改动太多,笔者模拟了一套Graphics组件的API

接着逐个将点沿着法线(垂直于方向)展开成两个顶点:

图示

然后逐个生成三角形:

图示

最后 把数据更新到Assembler并且标记已修改,使得渲染数据可以重新计算:

3.Assembler

这是 最重要的一层,负责把"线数据"变成GPU能画的顶点数据。

首先 是创建createData,其中resize两个参数分别代表顶点数量和索引数量,updateRenderData是上面提到的更新数据接口:

然后 就是最重要的一环fillBuffers打包数据了:

上面最主要做了四件事:

  • 坐标转换并写入:通过矩阵将本地坐标转成世界坐标,把画的点变成屏幕位置
  • 写入UV:控制纹理如何贴在线上
  • 写入颜色:控制颜色
  • 写入索引:控制"哪3个点组成一个三角形"

最后要指定Assembler

4.使用

完成 上面的操作之后,我们就可以和Graphics一样去使用它了,需要额外拖入一张纹理:

绳子图片就地取材,用的还是上次被指"像棍子"的那根:

写一个屏幕画线功能进行测试:

效果如下

效果应用

功能没问题之后,我们就可以实际应用到游戏中去了。

由于 我们做了适配,我们只需要将Graphics组件换成我们的TextureGraphics即可实现纹理画线:

效果如下

效果出来后,我愣了几秒

结语

这,好像还是没有纹理好看点啊...

本文实战完整源码 已集成到亿元Cocos小游戏实战合集(已完结),已经拥有的小伙伴可以直接更新。


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

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

推荐文章:

亿元Cocos小游戏实战合集

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

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

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

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

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

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

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

相关推荐
gaolei_eit2 小时前
解锁Vue3构建新维度:Vite生产环境深度优化实战指南
前端
向上的车轮2 小时前
TypeScript 一日速通指南:TypeScript可以做全栈开发吗?
前端·javascript·typescript
心.c2 小时前
从输入 URL 到页面展示的完整过程
前端·javascript·vue.js·js
Mintopia2 小时前
组件契约文档的标准结构(可复制模板)
前端·架构
一次旅行2 小时前
飞书接入龙虾后失联解决方法
前端·人工智能·chrome·飞书
晴天162 小时前
【Electron】从零构建你的第一个桌面应用
前端·javascript·electron
斌味代码2 小时前
Vue3源码解读(一):响应式系统 reactive/ref 核心原理图解(2026最新版)
前端·javascript·vue.js
yhole3 小时前
Nginx解决前端跨域问题
运维·前端·nginx
我爱学习好爱好爱3 小时前
Ansible 常用模块详解:hostname、selinux 、file实战
前端·chrome·ansible