引擎:主程渲染

一、引擎发展  

二、引擎使用

1.游戏渲染流程

 

2.3D场景编辑器操作与快捷键

3.节点的脚本组件

脚本介绍

引擎执行流程

物体节点、声音组件\物理组件\UI组件、脚本组件


暴露变量到面板 

4.节点的查找

基本查找

this.node:挂载当前脚本的节点A;

this.node.parent:获取A节点的父节点;

this.node.children:获取A节点的所有子节点;

this.node.getChildrenByName/this.node.getChildrenByPath:获取A节点的指定子节点;

find:查找场景中的节点;

 ​​

其它查找 

添加节点

5.节点的事件

新版事件

    start () {input.on(Input.EventType.TOUCH_START, this.loadPlayingScenes, this)input.on(Input.EventType.TOUCH_START, this.loadMainScenes, this)}

触摸事件

  • TOUCH_START:触摸开始;
  • TOUCH_END:触摸结束;
  • TOUCH_MOVE:触摸滑动;
  • TOUCH_CANCEL:触摸撤销

 

键盘事件 

  • KEY_DOWN:按下;
  • KEY_UP:抬起;
  • 根据keyCode得到按下的值对应的键盘按键值

其它知识

 

6.节点的MashRender组件使用

预制体简介

  • 再“资源管理器中”创建预制体,然后拖到场景中就可以克隆使用,切记不能修改预制体,否者其它引用了当前预制体的地方就会跟着发生变化;
  • 如果要给预制体绑定事件则必须将其变为普通节点才能添加脚本;

代码方式创建预制体到场景

给当前节点的父节点添加一个预制体,即在摄像机的父节点是场景,在场景下创建一个新的预制体;

 

代码方式更换物体材质

下面是手动方式创建了一个材质球赋予红色,最后通过代码方式更换材质球样式;

开启节点的阴影

  • 默认情况下引擎为了性能所以没开启阴影;
  • 开启步骤:开启场景的阴影 -> 给需要产生阴影的物体开启cast

 

7.节点的动画

动画效果分为实时计算和烘培两种模式,前者效果好但性能消耗大,后者快但效果没得实时渲染的好;

动画切割与使用 

脚本控制动画播放

让其它物体与动画模型的某个骨节点一起摇动:

8.摄像机使用与分组管理

游戏场景中一般有两个摄像机,一种是透视投影用来展示游戏物体,另一种是正交投影用来展示ui物体;

 

 

9.UI界面

Button按钮

创建一个按钮

按钮禁用

精灵模式

颜色模式

缩放模式 

绑定点击事件

EditBox输入框

Layout布局

支持水平排列、垂直排列、背包排列

PageView页面视图

ProgressBar进度条

RichText富文本

 绑定点击事件

事件可以被其它标签包裹

图文混排

ScrollView滚动视图

content大小不要调整,加个layout布局组件让其自动撑开即可

案例1

案例2

Slider滑动器

Toggle复选框

ToggleGroup单选框

VidoPlayer播放器

WebView网页视图

Widget对齐

 在不同的设备屏幕上让内容一直靠右上角进行适配

Mask遮罩

托头像到空节点中 

给父组件添加遮罩组件

效果

材质球

创建

使用

10.Json格式

11.网络请求

12.自定义Animation

如果系统的动画组件播放动画有问题,那么可以考虑自定义动画组件来实现对应的效果;原理是在update中更换图片帧即可

原理

代码

启用

测试

13.粒子系统

Cocos Creator 3D的粒子系统真心非常强大,理论上可以实现各式各样的牛逼效果。

官网详见说明文档

简单火焰效果

  1. 首先,我请UI小姐姐做了一张火焰的图片,是这样的

 

  1. 新建材质,取名叫FireMaterial

可以看到,可供粒子系统使用的 Effect 有红框中的三种,这里我们要使用的就是builtin-particle。

  • builtin-particle:提供给粒子系统的 渲染模块(Renderer) 中的 ParticleMaterial 使用,当使用cpu渲染时,必须使用此Effect,这个也是默认选项。
  • builtin-particle-gpu:提供给粒子系统的 渲染模块(Renderer) 中的 ParticleMaterial 使用,当使用gpu渲染时,必须使用此Effect。
  • builtin-particle-trail:提供给粒子系统的 渲染模块(Renderer) 中的 TrailMaterial 使用。
  1. 然后,我们把美术小姐姐准备好的图片拖到 MainTexture 上,别忘记保存哦。

 

  1. 新建一个粒子系统,取名Fire2,展开 渲染模块(Renderer) ,将材质 FireMaterial 拖入到 ParticleMaterial 中。

 

  1. 我们想要的效果是,固定显示四个序列图中的随机一张,
  • 勾选 贴图动画模块(TextureAnimationModule),通过对材质的观察,我们可以看到图片是2*2的序列图。
  • 将 横向贴图帧数(NumTilesX) 设置为2。
  • 将 纵向贴图帧数(NumTilesY) 设置为2。
  • 将 **一个生命周期内播放几次循环(CycleCount)**设置为1,默认值0.
  • 将 一个周期内动画播放的帧与时间变化曲线(FrameOverTime) 选择两个常数的方式,设置为0~3,这样初始帧就会在4个序列中随机。 

 贴图动画模块(TextureAnimationModule)设置

 

  1. 展开 发射器模块(ShapeModule) ,将 粒子发射器半径(Radius) 设置为0,因为我们希望火焰从一个点内产生,而不是一个大的范围。
  2. 接下来对 主模块 进行设置。
  • 将 粒子系统运行时间(Duration) 设置为1,默认值是5。火焰是不断循环的,不需要那么久的运行时间。
  • 将 粒子系统所能生成的最大粒子数量(Capacity) 设置为30,默认值是100。
  • 将 每秒发射的粒子数(RateOverTime) 设置为30,默认值是10.粒子数量太多太少了都达不到预期的效果。
  • 将 粒子生命周期(StartLifetime) 选择两个常数的方式,设置为0.3~0.4,火焰的粒子不需要运行太久。
  • 将 粒子初始速度(StartSpeed) 设置为0.1,默认值为5,让火焰有微微跳动的感觉。
  • 将 粒子初始大小(StartSize) 选择两个常数的方式,设置为0.50.8,这样粒子的大小就会在0.50.8这个范围内随机。
  • 将 StartRotation(StartRotation) 选择两个常数的方式,设置为-30~308,给粒子添加随机不同的旋转角度。
  • 将 粒子受重力影响的系数(GravityModifier) 设置为-1,火焰应该是向上漂浮的,所以我们给他一个向上的重力系数。

 此时可以看到,现在有点像火焰的感觉了,不过火焰并不是向上运动的,而是在自己的坐标系内向着Y轴正方向运动的,这显然不是我们想要的效果。

  • ​ 将 控制粒子坐标计算所在的坐标系(SimulationSpace) 设置为World,默认是Local,这样火焰的运动就就在使用世界坐标系了。

来,看看疗效

 主模块参数设置

  1. 最后一步,给火焰上上色,勾选 颜色模块(ColorOverLifetimeModule),调节一个你需要的颜色。

 

  1. 通过,调节不同的颜色参数,可以达到很多不同的火焰特效。

 热情洋溢

 冷冽冰焰

要想把火焰效果做的完美,我们还需要,做一些锦上添花的优化,比如不断升起的火星,忽明忽暗的火光,这样才会更逼真。

不断升起的火星

  1. 新建粒子系统,命名为Spark。
  2. 展开 发射器模块(ShapeModule) 。
  • 将 粒子发射器半径(Radius) 设置为0.2,让发射器的半径和火焰的半径差不多就可以了。
  • 将 开合角度(Angle) 设置为0,让圆锥形的发射器变成圆柱形的发射器。

 

  1. 主模块设置
  • 将 粒子系统运行时间(Duration) 设置为1,保持和火焰一致就好。
  • 将 粒子系统所能生成的最大粒子数量(Capacity) 设置为20,火星的数量不宜过多。
  • 将 每秒发射的粒子数(RateOverTime) 设置为20.
  • 将 粒子生命周期(StartLifetime) 选择两个常数的方式,设置为0.30.5,火星生成之后大概0.30.5秒就会消失。
  • 将 粒子初始大小(StartSize) 选择两个常数的方式,设置为0.08~0.12,火星的尺寸可以设置的小一点。
  • 将 粒子初始速度(StartSpeed) 设置为8,默认值为7,让火星能达到的最大高度稍微高过火焰就好。

 

  1. 最后一步,调节一下火星的颜色,勾选 颜色模块(ColorOverLifetimeModule),具体颜色可根据实际情况随意调节。

 由黄变红的渐变色

  1. 看一下火星的效果

 火星效果

  1. 结合火焰一起的效果。

 配合上火星的火焰效果

 配合上火星的火焰效果

忽明忽暗的火光

  1. 新建粒子系统,命名为Light。

  2. 展开 发射器模块(ShapeModule) 。

​ 将 粒子发射器半径(Radius) 设置为0.01,火光和火星不同,只需要让它在很小的方位内生成就行了。

  1. 主模块 设置。
  • 将 粒子系统运行时间(Duration) 设置为1。
  • 将 粒子系统所能生成的最大粒子数量(Capacity) 设置为5,火光只需要很少的数量不断生成就可以了。
  • 将 每秒发射的粒子数(RateOverTime) 设置为5。
  • 将 粒子初始速度(StartSpeed) 设置为0,火光不需要运动,只需要在原地就好。
  • 将 粒子生命周期(StartLifetime) 选择两个常数的方式,设置为0.2~0.5,让粒子最长的生命周期比最短的还要大一倍,能最大程度感觉到闪动的效果。
  • 将 粒子初始大小(StartSize) 选择两个常数的方式,设置为1~2,以生成不同大小的火光。
  • 将 粒子初始颜色(StartColor) 设置为接近火焰的颜色。

 

 

  1. 火光成品效果

 闪动的火光效果

 最终效果

14.物理组件

给地形加上​MeshCollider碰撞体组件然后给角色加上RigidBody刚体组件和BoxCollide或CapsuleCollider等基础碰撞体组件即可实现这里碰撞感应并防止角色落入地下。

三、Shader渲染

1.shader渲染原理

创建Shader脚本,创建材质球,将物体的的渲染效果Shader脚本挂载到材质球,最后把材质球挂到3d物体上面从而实现渲染。

2.模型边缘发光案例

原理:正对着摄像机的模型三角面边缘光最弱垂直于摄像机的模型三角面边缘光最强。利用顶点法线,正对着摄像机的面边缘光因子为0,垂直于摄像机的面边缘光因子为1。

 

四、实战案例

1.聊天

使聊天框的内容跟随文字显示

2.动画效果

创建动画片段

制作动画正向

 绑定动画播放完毕后要执行的脚本和传入的参数

制作反向动画

绑定使用动画

脚本控制动画

控制动画播放和显示对应图标

注意事项

默认不勾选

绑定脚本

五、开发技巧

1.修改ts默认模板,自定义模板

2.设置其它编辑器

3.将摄像机对准当前界面

选中摄像机后,按ctrl shift f实现定位当前视角到摄像机

4.消息机制

原理介绍

运用场景:可以把各个节点脚本给管理起来让其相互调用时看上去不杂乱无章

编写源码

消息类,用于节点脚本/消息中心之间传递数据消息,比如NPC的铁匠要UI刷新血量

接收消息基类,用于节点脚本继承后拥有接收消息的统一能力 

管理类,用于管理下级节点脚本,如UI管理类、NPC管理类 

消息中心类,用于管理下面的管理类,如管理UI管理类、NPC管理类

实际运用

其实玩家可以直接操作血条控件的,这里做了一层转换目的是为了防止以后各个组件网状调用很难维护很乱,但是如果只有几个脚本的游戏无需用套模式

角色

UI控件

玩家类脚本(消息发生者)

下面是源码

UI管理类脚本(消息传递者)

下面是源码

UI子脚本(消息接收者)

测试

5.状态机制

原理介绍

运用场景是:有很多个状态,并且同一个时间点只有一个任务在执行,用状态机制可以把状态封装到内部,外面直接调用状态机的方法即可切换,提高代码阅读性和可扩展性;

编写源码

状态基类

状态管理器

实际运用

飞行状态

死亡状态

控制状态的物体(绑定死亡和飞的事件)

六、打包发布

1.发布到WX平台

好像需要具备云函数能力的appid。

报错:app.json。参考

2.发布到Android平台

下载AndroidStudio

下载AndroidSDK

在android studio的sdk manager中安装sdk

选择安装位置后一路下一步安装 

下载AndroidNDK

 配置SDK和NDK

sdk是开发包,ndk是编译包

 

下载C++库

Windows 下需要安装 Visual Studio 2017/2019 社区版。在安装 Visual Studio 时,请勾选 使用 C++ 的桌面开发 和 使用 C++ 的游戏开发 两个模块。注意修改安装位置到其它盘符。

 配置环境变量

配置jdk、android sdk、android ndk环境变量

 构建发布

项目名称游戏名称不能含有中文,否则可能会打包失败。配置参数参见cocos官网

 

  

  

七、其它

1.安装插件

2.设置浏览器或开发工具

3.Webstorm整合Cocos

ECMAScript 6配置,见下图:

配置上Cocos Creator的源码路径,可以进一步提高Webstorm代码提示精度,见下图:

点击Add…按钮,添加Cocos Creator源码路径:

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

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

相关文章

一、精准化测试介绍

精准化测试介绍 一、精准化测试是什么?二、什么是代码插桩?三、两种插桩方式Offine模式:On-the-fly插桩: 四、jacoco覆盖率报告展示五、增量代码覆盖率监控原理六、精准测试系统架构图七、全量与增量覆盖率报告包维度对比八、全量与增量覆盖率…

牛客NC343 和大于等于K的最短子数组【困难 前缀和 Java/Go】

题目 题目链接: https://www.nowcoder.com/practice/3e1fd3d19fb0479d94652d49c7e1ead1 思路 本答案利用前缀和解答,Java,Go答案通过,但是同样的代码用PHP的话有一个测试用例超时 应该还有更优秀的答案,后面找到更优…

2022——蓝桥杯十三届2022国赛大学B组真题

问题分析 看到这个问题的同学很容易想到用十层循环暴力计算&#xff0c;反正是道填空题&#xff0c;一直算总能算得出来的&#xff0c;还有些同学可能觉得十层循环太恐怖了&#xff0c;写成回溯更简洁一点。像下面这样 #include <bits/stdc.h> using namespace std; in…

apk反编译修改教程系列-----反编译apk 去除软件强制更新的八种方式步骤解析【十七】

安卓有的apk 软件会不断更新。但有些用户需要旧版的有些功能或者新版功能增减原因等等。需要不更新继续使用。这类问题有的可以简单修改版本号来跳过更新。或者有的软件可以忽略。但对于某些无法跳过更新界面等等的apk。就需要深度反编译来去除软件的强制更新。 通过课程可以了…

wsl安装Xfce桌面并设置系统语言和输入法

一、安装xfce &#xff08;有相关的依赖都会安装&#xff09; sudo apt -y install xfce4 二、 安装远程连接组件 sudo apt install xrdp -y 并重新启动 Xrdp 服务&#xff1a; sudo systemctl restart xrdp 本地windows系统中请按 winR 键 呼出运行 在运行中输入 mstsc…

1067: 有向图的邻接表存储强连通判断

解法&#xff1a; 定理&#xff1a;有向图G是强连通图的充分必要条件是G中存在一条经过所有节点的回路 跟上道题一样 这是错误代码 #include<iostream> #include<vector> using namespace std; int arr[100][100]; void dfs(vector<bool>& a,int u) {a…

唤醒手腕 Go 语言 并发编程、Channel通道、Context 详细教程(更新中)

并发编程概述 ​ 一个进程可以包含多个线程&#xff0c;这些线程运行的一定是同一个程序&#xff08;进程程序&#xff09;&#xff0c;且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位&#xff0c;线程是调度运行的基本单位&#xff0c…

【JAVA进阶篇教学】第十二篇:Java中ReentrantReadWriteLock锁讲解

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十二篇&#xff1a;Java中ReentrantReadWriteLock锁讲解。 在并发编程中&#xff0c;读写锁&#xff08;ReadWriteLock&#xff09;是一种用于管理对共享资源的访问的锁机制&#xff0c;它提供了比传统的互斥锁更高的…

栈的讲解

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底&#xff08;因为先进后出&#xff09;。栈中的数据元素遵守后进先出LIFO&#xff08;Last In Firs…

数据结构与算法===回溯法

文章目录 原理使用场景括号生成代码 小结 原理 回溯法是采用试错的思想&#xff0c;它尝试分步骤的去解决一个问题。在分步骤解决问题的过程中&#xff0c;当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候&#xff0c;它将取消上一步甚至是上几步的计算&#x…

函数模板底层本质

#include<iostream> using namespace std;template<typename T1> T1 ave(T1 a, T1 b) { return a b; }int main() {ave(100, 200);ave(short(100), short(200));return 0; }反汇编代码 模板本质是编译器帮忙生成了不同的函数 就算非类型参数值不一样编译器也重新…

HCIP(BGP综合实验)--8

一&#xff1a;实验要求 二&#xff1a;实现过程 &#xff08;一&#xff09;配置IP地址&#xff1a; AR1: [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [AR1-GigabitEthernet0/0/0]int l0 [AR1-LoopBack0]ip add 172.16.0.1 32 [AR1-LoopBack0]int l1 […

TM1650 并联在I2C 信号线的处理方法

目的是可以并联多个TM1650 在标准I2C 总线上&#xff0c;并且不影响其他标准I2C 器件。思路就是拿个额外的开关控制每一片TM1650 的使能&#xff0c;就像SPI 的CS 信号那样。 协议 TM1650 的通信协议虽说不是标准I2C&#xff0c;但也算是比较兼容的&#xff0c;比方说&#x…

springboot实现Aop

一、原理 AOP&#xff08;Aspect Oriented Programming&#xff09;的意思是&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可对业务逻辑进行增强&#xff0c;在不改变原有逻辑的基础上&#xff0c;在其前后进…

YOLOv8独家原创改进: AKConv(可改变核卷积)

1.AKConv原理介绍 地址:2311.11587 (arxiv.org) 摘要:基于卷积运算的神经网络在深度学习领域取得了令人瞩目的成果,但标准卷积运算存在两个固有的缺陷。一方面,卷积运算仅限于局部窗口,无法捕获其他位置的信息, 并且它的采样形状是固定的。 另一方面,卷积核的大小固定为…

基于yolov8+gradio目标检测演示系统设计

YOLOv8与Gradio&#xff1a;开启目标检测的可视化新篇章 随着人工智能技术的飞速发展&#xff0c;目标检测作为计算机视觉领域的重要分支&#xff0c;已经广泛应用于安防监控、自动驾驶、医疗影像等多个领域。而YOLO&#xff08;You Only Look Once&#xff09;系列算法作为目…

Maven多环境与SpringBoot多环境配置

1. Maven多环境配置与应用 1.1 多环境开发 我们平常都是在自己的开发环境进行开发&#xff0c; 当开发完成后&#xff0c;需要把开发的功能部署到测试环境供测试人员进行测试使用&#xff0c; 等测试人员测试通过后&#xff0c;我们会将项目部署到生成环境上线使用。 这个时…

Unity曲线插件Dreamteck Splines生成曲线Mesh

一、需求 脱离编辑器&#xff0c;运行时添加点&#xff0c;动态生成管道、线缆等曲线Mesh。 二、Dreamteck Splines简单运用 这方面资料不多&#xff0c;只有官方文档全英参考&#xff0c;而且又介绍得不详细。 2个重要组件介绍&#xff1a; SplineComputer&#xff1a; 最…

yum、rpm相关命令-工具手册

1.rpm文件: 1.1安装rpm文件: rpm -ivh kde-select.rpm23 #--nodeps强制安装,无视环境缺少依赖的检查 rpm -ivh --nodeps kde-select.rpm #--force --replacefiles可以无视rpm的冲突去强制替换(如两个rpm的安装路径相同了会有冲突) rpm -ivh --nodeps --force --replacef…

springboot中mybatisplus注意事项

使用代码生成工具CodeGenerator 需要修改的内容 dsc.setUsername(“root”); mysql账号dsc.setPassword(“root”); mysql密码strategy.setInclude(“crm_edu”); 表名pc.setModuleName(“eduservice”); //模块名 package com.test.demo;import com.baomidou.mybatisplus.a…