自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (3)
  • 收藏
  • 关注

原创 PUN搭建大厅与网络同步

要同步的脚本继承接口并实现。实现方法,用它接收发送数据要把要同步的脚本(发送信息、接收信息的脚本)赋值进同步组件{//脚本判断自己是发送方还是接收方//写法有规范,要怎样发,怎样接收。{// 我们拥有这个角色:把我们的数据发送给其他人}else{// 网络角色,接收数据}}

2022-10-23 11:42:19 1512 1

原创 C++数据结构-高效排序算法

对于基本的几种排序方法:插入,选择,冒泡。他们的复杂度均为O(n2)。算法运行所需时间增加的速度通常比数组本身增加的速度要快。希尔排序通过将原数组分为及几个子数组,先分别将这几个子数组排序,再把排序好的子数组进行排序,可以大大提高效率,排序方法可使用任意简单排序,这里使用插入排序用伪代码来表示对于h的值的把控,是需要思考的问题。如果h过大,子数组就会过多,即使子数组已经排序好,也无法显著提高效率;反之,如果h过小,子数组的元素就会过多,算法效率也会降低。

2022-09-10 10:58:18 846

原创 【Unity】编辑器扩展-04-拓展Scene视图

借助Gizmo绘制。

2022-07-29 10:05:21 1000

原创 【Unity】编辑器扩展-03-拓展Inspector视图

CustomEditor()表示自定义哪个组件,OnInspectorGUI()可以对该组件元素进行绘制,base.OnInspectorGUI()表示绘制父类原有元素。

2022-07-28 17:44:20 784

原创 【Unity】编辑器扩展-02-拓展Hierarchy视图

创建Image组件时,会自动勾选RaycastTarget。如果图片不需要处理点击事件,则带来了额外开销。我们还可以重写系统自带的菜单行为。例如,我觉得Unity创建的Image组件不好,那么可以复写他的行为。我们已经知道了可以在原有菜单的基础上进行扩展,那么我们也可以完全抛弃原有菜单,完全自定义自己的菜单。基本原理就是判断情况并陈列自己的菜单。...

2022-07-28 17:43:01 404

原创 【Unity】编辑器扩展-01-拓展Project视图

编辑器使用的代码应该仅限编辑模式下,也就是说正式的游戏包不应该包含这些代码。Unity提供了一个规则如果属于编辑模式下的代码,需要放在Editor文件夹下;如果属于运行时执行的代码,放在任意非Editor文件夹下即可。此外,Editor文件夹的位置比较灵活,他可以作为多个目录下的子文件夹存在,这样开发者就可以根据功能来划分,将不同功能的编辑代码放在不同的Editor目录下。...

2022-07-28 17:41:56 699

原创 【Unity】动作游戏开发实战详细分析-26-组合攻击

在游戏中,有些攻击方法必须要等待条件触发后才可以执行,并且根据情况的不同会发挥不同的效果,这是一种有前置条件要求的组合攻击方式。

2022-07-25 16:55:29 746

原创 【Unity】动作游戏开发实战详细分析-25-角色残影效果的实现

Unity中的蒙皮网格组件提供了一个接口BakeMesh,允许我们拿到当前动画帧的网格数据,借此可对烘焙网格使用半透明的边缘泛光Shader,以达到残影效果。

2022-07-24 16:23:07 832

原创 【Unity】动作游戏开发实战详细分析-24-流血喷溅程序

利用对象池的代码设计思路,通过随机性来实现随机的溅落血迹效果。

2022-07-24 15:53:53 937

原创 【Unity】动作游戏开发实战详细分析-17-滑轨相机

使用插件可以帮助构建贝塞尔曲线,我们通过它来构建相机滑轨路径,我们这里主要使用UnityExtensions开源工具包。

2022-07-20 17:36:45 528

原创 【Unity】动作游戏开发实战详细分析-16-敌人AI设计

本文来实现简单的敌人AI,使用协程来开发AI。如果想要使用行为树插件可自行学习使用。

2022-07-19 18:04:54 1581

原创 【Unity】动作游戏开发实战详细分析-15-可扩展的战斗系统

通常情况下,伤害、属性、判定都会被封装到类中,在触发动画事件后将战斗信息发送给受击者。我们可以结合Unity碰撞/触发,在发生事件后获取对应信息,而非主动将战斗信息发送给目标,这有利于后期受击判定的调试。...

2022-07-18 20:13:31 2230

原创 【Unity】动作游戏开发实战详细分析-14-动画事件

我们可以在动画组件中为动画添加事件,事件函数名会调用在该游戏对象下所有脚本中的同名同参数的无返回值函数,本篇主要介绍通过资源配置来对动画的事件资源进行生成控制。

2022-07-17 16:57:11 396

原创 【Unity】动作游戏开发实战详细分析-11-关卡的序列化

对关卡内容进行序列化是一项十分有必要的操作。关卡的检查点重置,存档等功能都依赖于序列化接口。在游戏中可通过外部模块主动调用关卡模块序列化、反序列化接口,以完成关卡部分存档、读档功能的实现。关卡序列化的主要问题是如何控制场景内不同组件的序列化顺序,因为有些游戏对象会在编辑器内被不断的删改,而另一些游戏对象则被动态创建。...

2022-07-16 16:08:49 382

原创 【Unity】动作游戏开发实战详细分析-10-对象池编写

对象池,常用于缓存一定数量实例对象,并进行简单的隐藏操作,当需要它使用时显示即可。它可以避免频繁的创建与销毁对象。相信大多数开发者对其都不会陌生。由于它涉及对象的创建逻辑,因此会与其他模块产生相当程度的耦合。单个池可以管理对象的取出及取回状态不同类型的对象需要不同类型的池,但它们的共有逻辑是可以提炼的,我们可以给池赋予ID号,并在池管理器中注册与获取他们。进入关卡后,首先会进行脚本配置,用以配置当前关卡中对不同池的缓存数量及不同策略,这样的脚本配置在每个关卡中都会出现。存放在池中的对象在放回和取出时,需要得

2022-07-14 18:16:57 268

原创 【Unity】动作游戏开发实战详细分析-09-SpawnPoint

在关卡编辑时,我们通常不会将敌人或者NPC直接放在场景中,为了能够循环使用角色对象,为了能够便于管理,我们可以使用SpawnPoint作为创建点来动态的创建他们。对于创建对象,我们需要考虑几个比较重要的问题第一个问题可以使用一个枚举字段来进行选择,第二个时序问题也一样。不过主角的SpawnPoint应当优先创建;第三个场景依赖问题可以给SpawnPoint提供一个获取对象的接口,这样场景中的脚本就能通过它来获取已创建完成的对象。根据上述几点,开始编写脚本基本字段首先就是最基本的层级,实例化源,时序然后就是对

2022-07-14 16:06:32 771

原创 【Unity】动作游戏开发实战详细分析-08-场景互动

在游戏场景中操控机关,物件,进行攀爬,使用钩索等等行为,都是与环境的互动行为,这些都被归纳为场景交互的范畴。我们需要对这些重复性和操控性较强的部分进行系统设计角色冻结逻辑比较简单,禁用动画状态机,并设置刚体属性,停用动画状态机的瞬间角色会瞬间停止在动作的瞬间可以起到冻结的作用。其次,可以根据需要进行角色冻结外观的修改场景互动组件场景可交互组件接口ID属性初始化函数获得控制权柄强制退出组件该接口的作用是,所有可交互的场景组件都需要实现它我们列举一个例子来更好的理解这个接口,现在我们有一个可交互组件:La

2022-07-13 19:05:38 792

原创 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计

在一些动作游戏中,存在着连续技这一功能,具体来说就是连续按下规定的按键会触发能力的功能,或者是长按触发等等。这是命令结构体,它代表单个连续技命令我们来逐一分析他的代码,首先,我们要明确,我们对于命令的监听基于协程,因此该命令类需要有最基本的两个方法,那就是重置和更新。重置方法很简单,就是重置长按倒计时与限制倒计时我们通过委托从外部输入检测条件以及时间帧长我们来看重点的更新函数首先他会输出一个整形变量state,用于表示当前的命令状况每次更新时,默认初始值为等待值。如果监听条件成立,则进行时间判定,并减少长

2022-07-13 10:20:50 730 1

原创 【Unity】动作游戏开发实战详细分析-06-技能系统设计

不同的技能可以设计为技能模版,当角色释放技能时,会通过模版ID将它进行实例化,这个实例技能类可以是一个挂载的MonoBehaviour组件或者通过上下文传入的独立对象其次,考虑技能是否共用的问题,如果一个技能,玩家和敌人都可以使用,是否需要设计更为严谨的上下文接口?在动作游戏中,真正需要共用技能的情况相对比价多见。我们首先设计技能基本接口它包含了:其中序列化恢复需要传入技能上下文,它是一个结构体,定义如下,它存储了该技能的技能释放者以及使用按键然后,我们继续设计技能接口新增接口包含:最后,定义我们的抽

2022-07-12 15:59:32 1446

原创 Unity-行为树原理与框架实现

Unity-行为树原理与框架实现基本元素BTNode:所有节点的base class。定义了一些节点的基本功能,并提供一些可继承的函数。BTAction:行为节点,继承于BTNode。具体的游戏逻辑应该放在这个节点里面。BTPrecondition:节点的准入条件,每一个BTNode都会有一个。具体的游戏逻辑判断可以继承于它。BTPrioritySelector:Priority Selector逻辑节点,继承于BTNode。每次执行,先有序地遍历子节点,然后执行符合准入条件的第一个子结点。可以看

2022-05-18 15:47:54 2308

原创 Unity-Behavior Designer详解

Unity-Behavior Designer详解理论基本概念行为树是一个包含逻辑节点和行为节点的树结构,每次需要找出一个行为的时候,会从树的根节点出发,遍历各个节点,找出第一个和当前数据相符合的行为。如下图,就是一个简单的行为树当我们要决策一个AI要做什么样的行为的时候, 我们就会自顶向下的,通过一些条件来搜索这颗树,最终确定需要做的行为(叶节点),并且执行它,这就是行为树的基本原理。Task&Status有四种不同类型的 task(任务): 包括 action(行为),comp

2022-05-17 19:18:43 5765 1

原创 Unity-可编辑的星星特效

Unity-可编辑的星星特效阅前须知本文前置知识:CustomData与CustomList绘制星星创建一个名为Star的普通脚本,定义以下字段,然后将这个脚本挂在一个空对象上//网格private Mesh mesh;//顶点private Vector3[] vertices;//颜色private Color[] colors;//三角形(顶点索引)private int[] triangles;顶点网格思路首先,我们要绘制顶点网格。以vertices[0]为中心点。

2022-05-13 19:48:16 934

原创 物理模拟-更加真实的动态水面

物理模拟-更加真实的动态水面书接上回在上一篇中,我们讨论了简单的动态水面,并使用了正弦波去模拟了水面,但是,显然我们还有东西被遗漏了。那就是,我们实际上没有计算水面的法向量。看过代码的读者应该知道,我直接使用了网格坐标来代替法线,虽然效果看起好像还行,但终究是错误的。本节,我们将讨论如何计算动态水面的法向量,切向量,次法向量在那之前,我们首先需要用到高等数学中的计算公式,这里我们不展开讲解,具体细节请翻阅高等数学-多元函数微积分的几何应用计算法向量隐式曲面方程:F(x,y,z) = 0在点

2022-04-28 20:19:02 691

原创 物理模拟-动态水面

物理模拟-动态水面OpenGL模拟水面顶点网格顶点数组顶点数组,我的设想是一个正方形区域(x[-l,l],z[-l,l]),也就是说边长为l而对于每一行的网格数,我们定义为n,网格数量代表了水面的精度大小,n越大,精度越大,性能消耗也就越大。我们以一行一行的方式给顶点数组赋值,每次完成一行就移动到下一行请注意:因为每个顶点有三个坐标,因此顶点数组的长度应为:n*n*3代码如下://坐标范围是X轴(-l,l),Z轴(-l,l)float valueX = -waterLength;fl

2022-04-28 11:10:17 440

原创 3D数学-动力学

3D数学-11-动力学旋转运动学二维旋转动力学首先我们考虑最简单的情况:我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上图中:F为我们施加的力,O是枢轴原点。通过基本的运算,我们可以得到F'= F*sinθ那么切向加速度a = F'/ m切向加速度是线性速度的加速度,我们通过除以半径获得角加速度α = a / r现在,我们换一种方式,那就是通过杠杆臂的方式去施加力为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩他的理解类似于力矩,公式如下τ = Flsi

2022-04-26 10:38:58 1549

原创 3D数学-裁剪空间与透视投影矩阵的推导

3D数学-裁剪空间与透视投影矩阵的推导透视投影矩阵的变换本质,是将视锥体变换到裁剪空间中视锥体的具有六个面,近裁剪面,远裁剪面,左裁剪面,右裁剪面,上裁剪面,下裁剪面所有超出视锥体的都会被舍弃,也就是被裁剪,我们之后的操作都是对视锥体内部进行计算接下来我们来分析并解析,如何推导透视投影矩阵注意:这里我们对于坐标的矢量使用的是行矢量,如果你使用的是列矢量,那么透视投影矩阵要进行转置在之前的章节中,我们已经知道了:将点p投影到z=d的平面上,通过相似三角形的比例关系,可以获得p'p[x,y,z

2022-04-22 12:35:41 2327

原创 MAC—M1—CLion—配置FreeType

MAC—M1—CLion—配置FreeType通过brew下载FreeType第一步下载好brew后,在终端输入brew install freetype下载好freetype第二步将freetype导入,找到文件的地址通过下面两行代码导入include_directories(/opt/homebrew/Cellar/freetype/2.11.1/include/freetype2)link_directories(/opt/homebrew/Cellar/freetype/

2022-04-11 10:53:13 1033 1

原创 OpenGL-36-01SSAO

OpenGL-36-01SSAO个人理解总结思路解读首先还是正常渲染场景,按照延迟渲染的方式将所有数据传入G缓冲中,然后在将所有数据传入ssao缓冲中,对齐进行ssao处理,然后在传入到模糊缓冲中,进行模糊处理,最后在通过光线渲染,将其渲染到平面上。显然,我们需要四个着色器程序。SSAO处理设置采样核心简单的不多说了,这里是说明最重要的ssao处理我们想要对于每个顶点去采样它的法线半球,但是对于每个顶点单独生成法线半球的采样核心是十分困难的。因此我们采用切线空间,在切线空间中,所有顶点的采样核

2022-04-08 16:04:39 634

原创 OpenGL-17-01-模版测试

OpenGL-17-01-模版测试基本说明模版测试执行时机:当片段着色器处理完一个一个片段后,模版测试就会进行。模版测试和深度测试一样,是有可能丢弃片段的。模版测试是根据模版缓冲进行的。如何使用模版测试通过这行代码启动模版测试glEnable(GL_STENCIL_TEST);注意,和颜色和深度缓冲一样,你也需要在每次迭代之前清除模板缓冲。glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

2022-03-28 15:02:21 214

原创 OpenGL-07-01摄像机

OpenGL-07-01摄像机当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机,我们需要它在世界空间中的位置、观察的方向、一个指向它右侧的向量以及一个指向它上方的向量创建一个摄像机我们想要创建一个摄像机,并通过WASD来进行水平移动,步骤如下很简单,创建一个摄像机位置,方向向量,摄像机上轴,注意,这三个是全局变量glm::vec3 cam

2022-03-24 19:46:57 360

原创 OpenGL-06-02练习题

OpenGL-06-02练习题一、对GLM的projection函数中的FoV和aspect-ratio参数进行实验。看能否搞懂它们是如何影响透视平截头体的。projection = glm::perspective(glm::radians(45f), (float)SCR_WIDTH / SCR_HEIGHT, 0.1f, 100.0f);主要对第一个参数和第二个参数进行测试首先测试第一个参数45度时70度时30度时显然,我们可以直观的感受到,这个参数控制的是视野大小,视野小的时

2022-03-24 15:21:59 690

原创 OpenGL-05-02练习题

OpenGL-05-02练习题一、使用应用在箱子上的最后一个变换,尝试将其改变为先旋转,后位移。看看发生了什么,试着想想为什么会发生这样的事情glm::mat4 trans;trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0, 0.0, 1.0));trans = glm::translate(trans, glm::vec3(1, 0, 0));ourShader.setMatrix("transform",trans);

2022-03-24 11:30:11 217

原创 OpenGL-04-02练习题

OpenGL-04-02练习题一、修改片段着色器,仅让笑脸图案朝另一个方向看#version 330 coreout vec4 FragColor;in vec3 ourColor;in vec2 TexCoord;// texture sampleruniform sampler2D texture1;uniform sampler2D texture2;void main(){ FragColor = mix(texture(texture1, TexCoord), tex

2022-03-23 19:09:13 230

原创 OpenGL-04-01纹理

OpenGL-04-01纹理原文:https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/#_5本文只是对原文的个人总结与简化在程序最前端加上这两行代码#define STB_IMAGE_IMPLEMENTATION#include <stb_image.h>接下来我们创建纹理对象,为了方便解释,我们创建两个纹理对象创建纹理创建第一个纹理对象和之前的OpenGL对象一样,纹理也是使用ID引用的

2022-03-23 19:08:46 598

原创 OpenGL-03-练习题

OpenGL-03-练习题一、修改顶点着色器让三角形上下颠倒#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec3 aColor;out vec3 ourColor;uniform float xOffset;uniform float colorOffset;void main(){ gl_Position = vec4(aPos.x, -aPos.y, aPos.z,

2022-03-23 14:04:41 287

原创 OpenGL-03-着色器

OpenGL-03-着色器前文的文本来自:https://learnopengl-cn.github.io/01%20Getting%20started/05%20Shaders/本文主要做个人总结与简化GLSL着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量

2022-03-23 13:49:34 607 1

原创 OpenGL-02-练习题

OpenGL-02-练习题一、添加更多顶点到数据中,使用glDrawArrays,尝试绘制两个彼此相连的三角形仍然继续使用索引,只需要更改顶点坐标以及索引顺序即可#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height);void proce

2022-03-23 09:28:02 237

原创 OpenGL-02-创建三角形,矩形

OpenGL-02-创建三角形/矩形逐步解析原文:https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/#_3本篇,主要对此文做个人总结以及思路简化这里首先要讲解一些基本知识对于OpenGL,我们需要至少设置一个顶点着色器和一个片段着色器。通过他们我们才能绘制三角形此外,OpenGL着色器使用GLSL语言这是一段十分基础的GLSL顶点着色器源代码#version 330 corelayou

2022-03-22 22:28:19 161

原创 C++笔记-16-委托机制的实现

C++笔记-16-委托机制的实现在C#中,有完善的委托可以存储成员函数。但是在C++中,我们需要自己利用C++特性去实现委托。首先,我们要解决的问题就是如何存储成员函数指针,此外,对于每一个成员函数指针,他都需要一个类对象去调用它此外,考虑到全局函数,他的存储方法又和成员函数不同,因此我们需要通过抽象类实现类型存储的多态化。思路解读委托抽象类第一步,我们需要一个抽象类,作为任意委托类型的基类class IDelegate{public: virtual ~IDelegate() {

2022-03-21 21:57:59 1984

原创 Unity笔记-34-FSM(有限状态机)

Unity笔记-34-FSM(有限状态机)前言模仿Unity动画状态机写一个简易的状态机框架,用于状态管理思路分析状态对于每一个状态,它都有以下属性:状态名称当前是否在运行状态转换的目标状态与转化条件一二两点很容易 //状态名称 public string StateName { get; set; } /// <summary> /// 标记当前状态是否正在运行 /// </summar

2022-03-09 20:36:58 3792

行为树框架源码(自制)

行为树框架源码(自制)

2022-05-18

行为树插件以及Movement包

行为树插件以及Movement包

2022-05-17

动态水波完整代码以及资源

动态水波博文:https://blog.csdn.net/qq_52324195/article/details/124469478

2022-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除