在王者荣耀中脸探草丛的正确姿势是什么?

在这里插入图片描述

引言

Cocos中躲草丛效果的实现原理。

在游戏开发中,我们经常用透视或者半透明效果去表现模型被遮挡的效果。

本文将介绍一下如何在Cocos中实现王者荣耀中的躲草丛效果

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

躲草丛效果的实现原理

在这里插入图片描述

要在Cocos中实现王者荣耀中的躲草丛效果,需要以下几个点:

1.模型半透明

要实现模型的半透明效果,需要下面2个条件:

  • 3D物体所在的渲染队列为”透明队列”;
  • 3D物体的颜色alpha值改成127(半透明);

好的收到

2.触发

进入草丛的时候触发模型半透明离开草丛时恢复模型半透明。需要下面Collider2个事件:

  • onTriggerEnter:当其他Collider进入我的Collider时触发。

  • onTriggerExit:当其他Collider离开我的Collider时触发。

好的好的

话不多说,一起来做个实例。

王者小鸡躲草丛

接下来我们一步一步来实现王者荣耀中的躲草丛效果。

1.环境

引擎版本:Cocos Creator 3.8.1

编程语言:TypeScript

2.资源准备

首先去“菜市场”买两把””,有喜欢做模型的小伙伴可以自己在3dmax里面做一个,我们先看下草在3dmax中的效果:

节目组终于有点良心了

然后把模型从3dmax导出一下,包括FBXTGA,然后添加到工程:

不懂没关系,拖就完了

把模型拖到场景里面去,可以看到雪白的草:

塑料一样

想要把草恢复成绿色需要以下处理:

  • 修改材质的Effect,我们用builtin-unlit
  • 然后Technique选择transparent通道。
  • 设置贴图。

我数123木头人

处理完成后效果如下:

简单展示,追求极致的小伙伴可以调一下

由于草不够茂密,我们复制粘贴多几个:

要是我的头发也能这么Ctrl+C+V那该多好

想要草可以产生触发事件,需要添加一下Collider,这里直接用BoxCollider,简单快捷:

你可以把这个理解成结界

勾选Is Trigger使其变成触发器,否者会进不去草丛:

划重点!!!

3.编写代码

新建一个Tussock组件,并且到王者小鸡身上。

@ccclass('Tussock')
export class Tussock extends Component {start() {}update(deltaTime: number) {}
}

start()方法中获取CapsuleCollider组件并且监听onTriggerEnteronTriggerExit事件。

start() {var collider = this.getComponent(CapsuleCollider);collider.on('onTriggerEnter', (event: ICollisionEvent) => {if (event.otherCollider.node.name == "tussock") {this.setModelTranslucency(true);}}, this);collider.on('onTriggerExit', (event: ICollisionEvent) => {if (event.otherCollider.node.name == "tussock") {this.setModelTranslucency(false);}}, this);
}

最后获取王者小鸡的材质,通过material.setProperty('albedo');设置一下他的透明度

setModelTranslucency(flag: boolean) {const material = this.node.getChildByName("rooster_man").getComponent(RenderableComponent)?.sharedMaterials[0]; // 0 表示第一个材质,根据您的需求修改material.setProperty('albedo', new Color(255, 255, 255, flag ? 127 : 255));
}

4.效果演示

在这里插入图片描述

一天不整活,浑身都难受。帮忙转发一下文章哦,下课!

结语

本文源工程可通过私信发送Tussock获取。

近日,笔者受麒麟子(深耕游戏引擎与游戏开发15年,每一滴干货都源自商业项目实践)的邀请,以嘉宾的形式加入知识星球,星球主要用于:

  • 导师教学
  • 学习问题交流
  • 新人入门与进阶
  • 招聘与就业机会分享
  • 面试题集锦
  • 面试经验分享

总的来说,星球的目标只有一个:提供优质内容,搞学习。感兴趣的小伙伴可以扫码了解和捧场,在里面等你

长按识别,扫码了解

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

AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。

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

推荐专栏:

你知道王者荣耀是怎么实现技能范围指示器的吗?

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio的笔记--String和byte[]

String和byte[]的相互转换,字节数组转换 String转换byte[]文本16进制字节数组 byte[]转换String文本16进制 其它 String转换byte[] 文本 将字符串(String)转换为字节(byte)的方法。默认使用的是UTF-8编码 StandardCh…

Qt设置应用程序字体

目的 由于微软雅黑字体具有版权效应, 导致实际项目中需要load其他字体, 比如说应用程序默认字体为思源黑体-Mdeium黑度。 通用做法在qrc中添加字体资源,SourceHanSansCN-Medium.ttf, 然后在main函数中动态加载字体文件。 如果后…

Linux本地部署1Panel服务器运维管理面板并实现公网访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

剑指 Offer(第2版)面试题 20:表示数值的字符串

剑指 Offer(第2版)面试题 20:表示数值的字符串 剑指 Offer(第2版)面试题 20:表示数值的字符串解法1:模拟解法2:分段匹配解法 3:DFA 剑指 Offer(第2版&#xf…

linux进程通信

匿名管道 struct_file的两套资源 管道只能单向通信 特征 1.如果管道没有数据 读端在读 默认会直接阻塞正在读取的进程 2.写端写满 在写会阻塞 等待对方读取 管道设计 命名管道 实现管道通信 #pragma once #include<iostream> #include<string> #include<sys/…

windows MYSQL解决中文乱码问题

1.首先确保你已经把mysql配置了环境变量 2.打开window终端 3.输入mysql -u root -p 4.输入密码&#xff0c;就是安装的时候设置的root超级管理员权限密码 5.输入&#xff1a; SHOW VARIABLES LIKE ‘character%’; 出现上图&#xff0c;说明就会出现中文乱码问题。 6.该怎么办…

前端中的响应式布局与各个端适配

什么是响应式布局&#xff1f; 响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局。在移动互联网高度发达的今天&#xff0c;我们在桌面浏览器上开发的网页已经无法满足在移动设备上查看的需求。传统的开发方式是PC端开发一套页面&#xff0c;手机端再开发一套页面。但是…

使用python脚本一个简单的搭建ansible集群

1.环境说明&#xff1a; 角色主机名ip地址控制主机server192.168.174.150受控主机/被管节点client1192.168.174.151受控主机/被管节点client2192.168.174.152 2.安装python和pip包 yum install -y epel-release yum install -y python python-pip 3.pip安装依赖库 pip in…

redis-学习笔记(hash)

Redis 自身已经是 键值对 结构了 Redis 自身的键值对就是通过 哈希 的方式来组织的 把 key 这一层组织完成后, 到了 value 这一层, 还可以用 哈希类型 来组织 (简单的说就是哈希里面套哈希 [数组里面套数组 -> 二维数组] ) [ field value ] hset key field value [ field va…

【Spring】Spring 微服务中的数据分区和分片

文章目录 前言数据分区简介分区的本质分区类型为什么分区很重要&#xff1f;分片简介了解分片分片的机制为什么选择分片&#xff1f;在 Spring 微服务中实现分区和分片用于分区的 Spring Data JPA挑战与最佳实践分区和分片时的注意事项选择正确的键重新分片和重新分区基础设施和…

【Java 基础】23 国际化

文章目录 1.概念2.原理1&#xff09;Locale2&#xff09;ResourceBundle3&#xff09;MessageFormat 3.例子1&#xff09;准备资源文件2&#xff09;加载资源文件3&#xff09;格式化消息&#xff08;非必须&#xff09; 总结 在全球化的今天&#xff0c;开发支持多语言的应用变…

STM32F1的TIM输出比较(PWM)

目录 1. OC&#xff08;Output Compare&#xff09;输出比较 2. PWM简介 3. 输出比较通道(高级) 4. 输出比较通道(通用) 5. PWM基本结构 6. 配置介绍 6.1 输出比较模块配置 6.2 给输出比较结构体赋一个默认值 6.3 配置强制输出模式 6.4 配置CRR寄存器的预装…

【文件上传系列】No.1 大文件分片、进度图展示(原生前端 + Node 后端 Koa)

分片&#xff08;500MB&#xff09;进度效果展示 效果展示&#xff0c;一个分片是 500MB 的 分片&#xff08;10MB&#xff09;进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页…

低代码与MES:智能制造的新篇章

一、引言 随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接计划层与控制层的关键信息系统&#xff0c;在提升生产效率、优化资源配置、保障产品质量等方面发挥着重要作用。然而&#…

AIGC实战——WGAN(Wasserstein GAN)

AIGC实战——WGAN 0. 前言1. WGAN-GP1.1 Wasserstein 损失1.2 Lipschitz 约束1.3 强制 Lipschitz 约束1.4 梯度惩罚损失1.5 训练 WGAN-GP 2. GAN 与 WGAN-GP 的关键区别3. WGAN-GP 模型分析小结系列链接 0. 前言 原始的生成对抗网络 (Generative Adversarial Network, GAN) 在…

深入探索C语言中的二叉树:数据结构之旅

引言 在计算机科学领域&#xff0c;数据结构是基础中的基础。在众多数据结构中&#xff0c;二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构&#xff0c;每个节点最多有两个子节点&#xff1a;左子节点和右子节点。这种结构使得搜索、插入、删除等操作…

【React Hooks】useReducer()

useReducer 的三个参数是可选的&#xff0c;默认就是initialState&#xff0c;如果在调用的时候传递第三个参数那么他就会改变为你传递的参数&#xff0c;实际开发不建议这样写。会增加代码的不可读性。 使用方法&#xff1a; 必须将 useReducer 的第一个参数&#xff08;函数…

MySQL - 并发控制与事务的隔离级别

目录 第1关&#xff1a;并发控制与事务的隔离级别 第2关&#xff1a;读脏 第3关&#xff1a;不可重复读 第4关&#xff1a;幻读 第5关&#xff1a;主动加锁保证可重复读 第6关&#xff1a;可串行化 第1关&#xff1a;并发控制与事务的隔离级别 任务描述 本关任务&#…

JS/jQuery 获取 HTTPRequest 请求标头?

场景&#xff1a;在jquery封装的ajax请求中&#xff0c;默认是异步请求。 需要定一个秘钥进行解密&#xff0c;所以只能存放在请求头中。然后需要值的时候去请求头中读取。 注意&#xff1a;dataType设置&#xff0c;根据请求参数的格式设置&#xff0c;如果是加密字符串&…

(C#)使用sharpcompress压缩解压文件(.rar,.zip,tar.bz2,.7z,.tar.gz)

sharpcompress安装方法 使用Nuget搜索sharpcompress,点击安装即可 1、.rar文件解压代码(不支持rar压缩) using (Stream stream File.OpenRead("C:\Code\sharpcompress.rar")) {var reader ReaderFactory.Open(stream);while (reader.MoveToNextEntry()){if (!re…