自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(418)
  • 资源 (1)
  • 收藏
  • 关注

原创 unreal-c++教程-第十一章:Unlua-SpawnActor并实现动态绑定

unlua 动态生成Actor并绑定lua脚本

2022-10-06 19:39:56 868 2

原创 unreal-c++教程-第十章:c++和Unlua的交互

c++和UnLua的交互

2022-07-08 21:54:34 1369

原创 unreal-c++教程-第九章:c++发送消息给蓝图

c++发送消息给蓝图

2022-07-08 19:51:05 614

原创 unreal-c++教程-第八章:TCP Socket

unreal socket

2022-06-23 21:18:50 1194

原创 unreal-c++教程-第七章:控制你角色的动画

控制你角色的动画

2022-06-21 23:59:35 390

原创 unreal-c++教程-第六章:控制你的角色

c++ unreal 控制你的角色!

2022-06-21 23:01:45 745

原创 unreal-c++教程-第五章:创建你的角色

创建角色

2022-06-15 23:51:11 1002

原创 unreal-c++教程-第四章:PlayerController

PlayerController 的获取和常见操作

2022-06-15 19:12:28 1402

原创 unreal-c++教程-第三章:用c++在场景中创建一个Cube与UWorld

c++ 创建 Cube 和UWorld

2022-06-14 22:34:59 845

原创 unreal-c++教程-第二章:Actor和Component

创建Actor和Component

2022-06-14 19:48:26 1436 1

原创 unreal-c++教程-第一章:第一个c++脚本

1.创建第一个Unreal c++ 脚本2.1 FirstActor.h和FirstActor.cpp2.2 Unreal宏(macros)2.2.1 宏UCLASS()和宏GENERATED_BODY()UCLASS()用于指示该c++类为Unreal 反射系统中的一部分。并且使用UCLASS(),你可以直接使用unreal提供的内存管理(垃圾回收),不需要自己去处理c++复杂的垃圾回收机制。unreal c++编译过程由两个阶段组成。第一个阶段,由UnrealHeadTool 读

2022-06-09 00:19:17 2915 1

原创 unreal-教程-第十八章:UI跟随的基本原理(c++)

UI跟随的基本原理1.世界坐标转屏幕坐标1.世界坐标转屏幕坐标可以使用函数:ProjectWorldLocationToScreen此时获得的是世界坐标对应屏幕坐标的二维坐标如果我们将屏幕转化为完全分别率的全屏模式,我们会发现结果是对的但是,如果我们将屏幕缩小我相信你应该能看出问题这个时候,ui的坐标就不对了这是因为,我们的视口坐标系和屏幕坐标系发生了缩放,我们需要将屏幕的绝对坐标转移到视口坐标可以使用函数:GetViewportWidgetGeometry此时我们再看这个效果

2022-05-26 19:30:11 619

原创 unreal-教程-第十七章:上半身动画和下半身动画的混合

半身动画混合演示效果1. 基本原理1.1 怎么创建动画缓存1.2 怎么实现基于骨骼的动画混合1.2.1 使用动画缓存1.2.2 动画缓存混合1.3 最终效果演示效果略.1. 基本原理1. 创建默认的运动混合树AnimSpace_12. 将AnimSpace+蒙太奇动画合并,此时,蒙太奇动画会覆盖掉AnimSpace,我们将这部分称为AnimSpace_23. 分别创建AnimSpace_1和AnimSpace_2的动画缓存:AnimSpace_1_Cache,AnimSpace_2_Cac

2022-05-26 09:18:03 1196

原创 unreal-教程-第十六章:行为树进阶(使用条件节点Decorator,怪物追踪)

条件节点Decorator,怪物追踪演示效果1. 完整的行为树截图1.1 参数介绍1.2 行为树逻辑介绍1.2.1 实时赋值PlayerPos和PreVec1.2.2 判断是否超过攻击范围1.2.3 怪物的追踪逻辑演示效果传送门1. 完整的行为树截图1.1 参数介绍首先,怪物拥有一个黑板,用于缓存一些数据用于条件比较。如图所示Pos:怪物前往的目标位置,我们通过选择玩家半径1000cm的距离随机取得SeePlayer:怪物是否看到玩家,当怪物离玩家距离<400cm时,则怪物看到玩家

2022-04-20 20:54:48 851

原创 unreal-教程-第十五章:近战武器碰撞检测

近战武器碰撞检测演示效果1. 创建AnimNotifyState2. 定义检测的两个Socket锚点3. 在AnimNotifyState中定义检测逻辑演示效果传送门1. 创建AnimNotifyState2. 定义检测的两个Socket锚点3. 在AnimNotifyState中定义检测逻辑函数的ReturnValue是当发生碰撞时,该值为True,并且碰撞信息会组成一个数组,然后通过Outhits传出来我们可以打印OutHits的所有信息此时的结果就和视频中的结果一样啦~~

2022-04-20 16:17:28 459

原创 unreal-教程-第十四章:行为树进阶(使用Task节点,角色跟随)

行为树进阶1. 使用TASK节点1.1. 创建task节点1.2. 编辑Task节点1.3. 使用Task节点2. 角色跟随1. 使用TASK节点1.1. 创建task节点我们现在的资源为:双击进入NPC_BT创建 NewTask1.2. 编辑Task节点1.3. 使用Task节点双击进入NPC_BT此时,行为树会更加的漂亮!2. 角色跟随重置下RandomPosition的函数...

2022-04-20 14:12:40 321

原创 unreal-教程-第十三章:AI进阶(行为树)

AI进阶1. 创建行为树2. 创建一个基本服务3. 编辑行为树3.1 行为树测试节点3.2 添加Service3.3 给行为树添加黑板3.4 给黑板创建变量3.5 行为树调用黑板的变量4. 编辑NPC_SETPOS5. 运行行为树6. 调试行为树1. 创建行为树2. 创建一个基本服务双击NPC_BT进入行为树编辑界面3. 编辑行为树3.1 行为树测试节点双击NPC_BT进入行为树编辑界面3.2 添加Service3.3 给行为树添加黑板3.4 给黑板创建变量双击黑板,进

2022-04-20 11:26:48 597

原创 unreal-教程-第十二章:AI初步(NPC随机移动)

AI演示效果1.建立NPC子类2. 创建AI蓝图2.1 绑定AI蓝图到NPC2.2 在NPC_AI中完成随机寻路的逻辑2.3 添加寻路范围3. 常见问题3.1 角色不移动3.2 角色动画不播放演示效果传送门1.建立NPC子类继承自Role这个类就是我们的NPC了。2. 创建AI蓝图2.1 绑定AI蓝图到NPC2.2 在NPC_AI中完成随机寻路的逻辑2.3 添加寻路范围3. 常见问题3.1 角色不移动此时你可能需要将NavMeshBoundsVolume的区域调的更大一些

2022-04-19 20:12:51 770

原创 unreal-教程-第十一章:蒙太奇操作:动作切换,连击

蒙太奇实现连击效果演示通道1.蒙太奇实现动作切换2.蒙太奇实现连击2.1 延迟连续操作2.2 完整的实现方案效果演示通道传送门1.蒙太奇实现动作切换准备两个攻击蒙太奇动画2.蒙太奇实现连击2.1 延迟连续操作我们希望在砍出atk1动作的同时,再次按下不是重复atk1的动作,而是进行二段动作,所以需要一个延迟操作2.2 完整的实现方案...

2022-04-19 16:46:54 486

原创 unreal-教程-第十章:蒙太奇实现拔剑动作

蒙太奇实现拔剑动作1. 制作蒙太奇动画2. 在骨骼中插入剑鞘Socket和手持Socket3. 添加剑的Mesh以及两个SceneNode3.1 SceneNode绑定Socket3.2 添加剑![的静态网格](https://img-blog.csdnimg.cn/06f5122f0bcf46ff8f0f97e4aa2de603.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2c6Iul,siz

2022-04-19 12:46:47 700

原创 unreal-教程-第九章:动画状态机(触发动画)

动画状态机1. 问题分析2. 动画状态机的使用2.1 创建动画状态机2.2 添加节点2.3 编辑条件2.4 动态设置跳跃条件参数1. 问题分析现在,我们希望存在多个动画(挥砍,跳跃等触发动画),并且能够很好的控制,我们需要引入动画状态机2. 动画状态机的使用2.1 创建动画状态机2.2 添加节点2.3 编辑条件2.4 动态设置跳跃条件参数跳跃有个浮空时间,基本逻辑是我们按下Space键,然后,让跳跃时间为0.6s根据动画时长来,然后在tick中,让0.6-deltaTim

2022-04-17 20:30:35 933

原创 unreal-教程-第八章:动画平滑

动画平稳衔接1.问题分析1.1 Veocity1.2 代码实现1.问题分析当我们直接用鼠标输入的信号作为混合树的输入,就会导致动画播放过程中没有任何斜街,也就是将混合平滑过程完美的忽视了。那么如果我们要手动去写这个平滑过程,也不是不行,逻辑页简单,就是代码有点多,尤其是使用蓝图之后,就比较复杂。如果有同学在Unity中实现过动画平滑,那么肯定深有体会。那么,我们是不是有更好的办法呢?我们可以直接利用Unreal中第三人称已经写好的角色运动的相关参数实现动画平滑。1.1 Veocity我们可以

2022-04-17 18:37:32 423

原创 unreal-教程-第七章:动画混合树

动画混合树1.资源网站介绍2. 混合树介绍2.1 资源的导入2.2 建立混合树2.3 编辑混合树2.3.1 混合树编辑界面介绍2.4 自定义第三人称的角色2.4.1 创建角色2.4.2 创建角色摄像机2.5 将混合树绑定给角色2.6输入控制混合树2.6.1 动画代理2.6.2 混合树绑定给代理2.6.3 角色绑定代理2.7 新的蓝图通信方式实现动画控制1.资源网站介绍现在,你们可以通过https://www.mixamo.com/获取一些动画和角色资源2. 混合树介绍现在,新建一个第三人称项目,并

2022-04-17 16:58:09 542

原创 unreal-教程-第六章:蓝图通信初步

蓝图通信初步1. 接口的使用1.1 创建接口1.2 定义接口函数1.3 实现接口函数1.4 调用函数接口1. 接口的使用蓝图接口是基于GameObject的接口。哎,希望你能理解吧。简单的来讲,接口是抽象一组方法的集合。在蓝图中,我们希望我们设置的任意对象能够拥有该函数,并使得该函数能够被其它对象调用。假设,我们有A对象,B对象,我们有接口C,有函数C.TestCall我们让B对象实现C,并定义C.TestCall:输出指定对象的位置,然后在A对象中调用,从而实现A和B的通信。1.1 创建

2022-04-13 20:22:11 754

原创 unreal-教程-第五章:GameMode初识与摄像机放置

摄像机跟随1. 创建摄像机1.1 创建摄像机蓝图1.2 放置摄像机1.2.1 配置GameMode1. 创建摄像机1.1 创建摄像机蓝图创建摄像机略微麻烦,在第三人称游戏里面,摄像机默认为主要的玩家视角,所以一般定义为Pawn类型。1.2 放置摄像机Unreal比较扯淡的就是多了一个GameMode现在,我们有一个摄像机,而原本TPC版本中也有一个自己的摄像机,那么我们应该以哪个摄像机为准呢?使用GameMode配置1.2.1 配置GameMode在TPC的默认资源中就已经存在

2022-04-13 20:03:39 3447

原创 unreal-教程-第四章:输入拦截与对象控制

输入拦截与对象控制1. 输入拦截1.1 拦截配置1.2 指定对象拦截输入1.3 实现W,S键控制Cube沿Y轴的运动2. 问题与分析2.1 两个蓝图分别调用InputAxis MoveForward,只有一个有效2.2 如何动态的(在蓝图)允许对象接受输入2.3 怎么将Vector转化成三个float数据1. 输入拦截来自键盘的信号会被计算机程序拦截。UE的底层逻辑自动完成了这一操作,我们可以直接获取到拦截的键盘输入。1.1 拦截配置Unreal的有些地方是挺扯淡的,它是配置文件+代码,也就是说

2022-04-13 15:41:16 873

原创 unreal-教程-第三章:实现动态水平移动

unreal-教程-第三章:基本移动1. SetActorLocation函数1.1第一次使用蓝图实现位置变换2. Tick函数2.1 实现Move对象沿X轴移动2.1.1 定义变量2.1.2 基本累加策略2.1.3 实现水平移动1. SetActorLocation函数该函数可以设置输入Target对象的位置1.1第一次使用蓝图实现位置变换从(-1120,-30,190)->(-1120,250,190)运行结果2. Tick函数"Ticking" refers to ru

2022-04-12 17:09:51 482

原创 unreal-教程-第二章:Hello World

1.第一行代码使用蓝图输出一行Hello World1.1蓝图区1.2 Event BeginPlay介绍当游戏运行时,会依次回调整个场景中所有GameObject的BeginPlay事件1.3 屏幕输出函数

2022-04-12 15:49:03 2668

原创 unreal-教程-第一章:初见Unreal

第一章:初见Unreal创建第三人称项目运行游戏控制人物移动GameObject定义一个GameObject创建资源文件夹创建蓝图文件夹与蓝图Move修改Move对象的Mesh为Cube创建第三人称项目运行游戏控制人物移动GameObject我们称所有在场景中实例化出来的对象为GameObject比如下图中箭头指示的我们可以直接从左侧菜单栏拖拽GameObject到场景中定义一个GameObjectUE中定义GameObject的方式有两种:基于c++和基于蓝图(blue p

2022-04-12 00:15:03 3963

原创 opengl-第9章:坐标系

引擎1.81版本更新1.增加了MVP变换2.增加了一个Cube模型#位置,颜色,纹理坐标vertices 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,#第一个点的数据 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, -0.5f, 0.5f,

2021-10-05 21:32:13 90

原创 opengl-第8章:移动,缩放,旋转

新版本1.8的特性1. 加入了复合模型Model对象模型对象直接拥有贴图,绘制数据,Shader复合而成现在定义的模型可以直接指定贴图,数据,并且有默认的shader,同时添加了两个函数initAppendOp:指定初始化的一些操作drawAppendOp:在渲染过程中的一些操作另外,Model对象直接提供了move,scale,rotate操作Transform操作Transform矩阵在opengl里面,使用Transform矩阵进行变换所谓的Transform矩阵就是一个4

2021-10-05 19:25:53 1130

原创 opengl-第7章:多张Texture的使用

目录1. 版本1.7 QKEnging介绍1. 增加了静态初始化函数2. 增加了动态元素3. 增加了Element初始化附加操作的lambda表达测试代码2. 实现多张Texture的使用1. 将texture绑定gl状态机不同的TextureCode2. 在调用shader之后,设置shader虚拟机里面的纹理符号 为对应纹理槽产生纹理shader纹理符号设置操作一个简单的证明1. 版本1.7 QKEnging介绍1. 增加了静态初始化函数现在Shader,Texture 元素将不会被循环call

2021-10-04 23:57:54 510

原创 opengl-第六章:加入纹理Texture和纹理数据TextureData

目录新版本的QKEngine特性介绍系统架构图测试结果新的数据文件.dtexture纹理的绘制机制新的数据结构绑定EBO数据指定数据属性绘制数据纹理的绑定绑定到ID使用Shader的设置在顶点着色器获取CPU压进去的纹理坐标将纹理坐标从顶点着色器传给片元着色器![在这里插入图片描述](https://img-blog.csdnimg.cn/07b6bbf9fbc146beaa687127100da8f9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZ

2021-10-04 22:21:29 858

原创 opengl-第五章:加入Shader对象和SimpleData对象

过去三个月的一些总结过去三个月发生了很多事情,找到了工作,也完成了其他重要的事情,没有意外的话,会签约某个头部游戏大厂,也不枉过去对游戏的一往情深吧。接下来的日子里面,或许是未来的五年,我都会在客户端,尤其是引擎上下很大的功夫,大家可以继续关注这个博客,另外就是,如果有人对克苏鲁相关的元素感兴趣可以私我.新版本的QKEngine我们现在有两种对象,分别是Shader对象和SimpleData对象这让调用开始变得简单地址:https://github.com/SkadyCat/QKEngine#

2021-10-04 17:57:21 258

原创 opengl-第四章:glsl入门

GLSL入门1. 一个简单的引擎框架一个示例程序2. glsl的基本格式2.1 main函数1. 一个简单的引擎框架目前我们的QKEngine的调用方式如下:#include <BaseWindow.h>int main(int argc, char *argv[]){ BaseWindow window; float*res = new float[3 * 4]{ 0.5f, 0.5f, 0.0f, // top right 0.5f, -0.5f, 0

2021-07-13 16:58:02 743

原创 opengl-第三章:提供cmake版本[QKEngine]

QKEngin介绍概述(吐槽)下载源码概述(吐槽)我实在是无法忍受vstudio几百年前的项目管理方案,还是决定使用cmake项目,具体的部署本章不做介绍,涉及到一部分cmake的东西,感兴趣可以看一下我写的关于cmake 代码。本章仅仅只是介绍如何使用这个项目。下载源码...

2021-07-10 14:14:02 152

原创 opengl-第二章:无shader的2D绘制

opengl-第二章:2D绘制绘制教程1.opengl的绘制策略1.1 opengl的图像渲染过程(渲染流水线)顶点数据VBO和VAO如何定义顶点数据绘制教程1.opengl的绘制策略推荐阅读:https://learnopengl.com/Getting-started/Hello-Triangle1.1 opengl的图像渲染过程(渲染流水线)也称:graphics pipeline在opengl里面,将整个绘制流程当做是一个状态机,你可以理解为显卡本身是一个黑板,当我们向里面填顶点数据时

2021-07-10 00:18:18 1376 2

原创 opengl-第一章:入门

入门教程环境安装1.下载opengl源码2. 创建c++空项目2.1 编译环境安装1.下载opengl源码github地址:https://github.com/glfw/glfw2. 创建c++空项目如果这一步搞不定的话,建议去学一下c++…2.1 编译使用cmake进行编译,如果不会cmake的话,建议学一下cmake基础点开GLFW.sln进入项目然后生成项目就可以了看输出信息:发现生成了很多exe随便点开一个exe显然这是一个写好的例子当然,其实那些并不重要现

2021-07-07 23:48:12 1015 5

原创 c++Lab-左值引用和右值引用

c++Lab系列1.左值与右值1.1 左值1.2 右值2. 左值引用和右值引用3. 绑定左值或者左值引用的值->右值引用4. 右值引用有什么用4.1 左值引用的用处4.2 右值引用的用处4.2.1 移动语义4.2.2 右值引用的总结1.左值与右值1.1 左值既可以出现在左边也可以出现在右边 int a = 10; int b = a; //此时a可以出现在左边,也出现在右边,所以它是左值1.2 右值只能出现在右边,或者称为临时变量 4 = a a+b = c //显然的

2021-06-24 15:44:18 108 1

原创 c++Lab-虚函数

c++Lab-虚函数里氏转换原则c++的虚函数虚函数的实现机制去掉virtual关键字获取普通函数和虚函数的地址机制里氏转换原则原文是派生的子类可以用于直接替代其基类这个是一个很有意思也很常用的原则,当然也很重要,一般在面向对象设计里面我们最常看到的就是策略模式//c#interface IMonster{ void run()}class Skeleton: IMonster{ override void run(){ Console.WriteLine("im Skeleton"

2021-06-22 00:49:30 452

当你使用Maven时主要是用于netty配置的pom.xml

嗯...就是netty的配置文件咯!

2019-07-29

空空如也

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

TA关注的人

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