unreal蓝图完全学习_unreal 4 蓝图完全学习 - CSDN
  • 官方 官方文档 中文版 http://api.unrealengine.com/CHN/ 英文版 https://docs.unrealengine.com/en-us/ 虚幻学院(英文教程,未来可能有汉化) https://academy.unrealengine.com/ 官方B站 ...【吕鑫】【VS20...

    官方

    官方文档

    虚幻学院(英文教程,未来可能有汉化)

    https://academy.unrealengine.com/

    官方B站

    https://space.bilibili.com/138827797/#/

    C++

    • 【侯捷】《C++系统工程师》课程
    • 【吕鑫】【VS2015】C/C++/数据结构教程(推荐有选择的看)http://class.qq.com/class/22124.html
    • 书籍推荐
      《C++ Primer Plus》或《Essential C++》或《C++ Primer》
      《大话数据结构》或《C++数据结构与算法(目前第4版)》
      《Effective C++》
      《More Effective C++》
      《Effective STL》或《STL源码剖析》
      《设计模式》、《游戏编程模式》
      《C++沉思录》
      《深度探索C++对象模型》

    UE4教程

    基础操作

    蓝图编程基础

    蓝图编程简介

    蓝图的类型 注:此处的种类只说直接实现游戏逻辑的蓝图,动画蓝图等暂不谈

    变量类型

    UE4的组件

    【官方文档】

    【猎梦虚幻研究社】

    事件节点

    事件调度器(事件分配器)

    【官方文档】事件调度器的使用

    事件分配器

    • 【官方文档】 UE4的蓝图编程中,所有游戏逻辑的函数都需要通过事件来驱动,而自定义事件可以当做函数来驱动,同时也可以通过事件调度器进行驱动,通过事件调度器,可以让蓝图实现的游戏逻辑更加灵活

    流程控制

    蓝图的函数

    枚举类型

    蓝图的数组

    【官方文档】

    【大神博客】

    蓝图的结构体

    【官方文档】

    【大神博客】 结构体的使用(包含部分关于枚举类型的操作)

    【大神博客】结构体数组及多维数组

    【猎梦虚幻研究社】

    HitResult

    蓝图的容器

    Map

    【官方文档】

    Set

    【官方文档】

    蓝图宏

    【官方文档】

    【大神博客】

    Timeline(时间轴)

    随机流

    数学表达式

    蓝图的面向对象

    构建脚本(蓝图相对于C++的构造函数)

    面向对象特性

    继承
    多态
    • 重写父类函数:在MyBlueprint栏的Function组上方,有一个Override菜单,下拉并选择要重写的函数,派生类中重写的函数会覆盖基类的函数
    • 调用重写后的父类函数:右键重写后的函数节点,选择“Add call to parent function”选项
    抽象
    • 如果了解面向对象思想中的抽象概念,自主按照需求定制蓝图类即可
    封装
    • 蓝图类中的变量的细节面板中的“Instance Editable”如果打对号(或者MyBlueprint栏中让变量对应的眼睛睁开,即暴露蓝图变量),则当蓝图在关卡中被实例化后,可以通过实例的细节面板进行修改相应变量的值
    • 蓝图类中的变量和函数在细节面板中都有Private选项,如果Private打钩,则该变量或函数无法被蓝图类的派生类继承

    蓝图通信 注:蓝图通信可以理解为不同蓝图间的信息传递和共享

    【官方文档】 蓝图通信方法(没有提GetAllActorOfClass)

    【大神博客】 https://www.cnblogs.com/songiveideas/p/learnmore2.html

    1、直接蓝图

    2、事件调度器

    • 参考上方“事件节点”

    3、蓝图投射(CastTo节点)

    4、蓝图接口

    实现蓝图接口 http://api.unrealengine.com/CHN/Engine/Blueprints/UserGuide/Types/Interface/UsingInterfaces/index.html
    使用蓝图接口 http://api.unrealengine.com/CHN/Engine/Blueprints/BP_HowTo/Interfaces/index.html
    蓝图接口迁移 http://api.unrealengine.com/CHN/Engine/Blueprints/UserGuide/BlueprintComms/InterfaceMigration/index.html

    5、GetAllActorOfClass

    • 这种方式并不能算是严格意义上的蓝图通信,其作用是通过该节点直接操作某一个类在关卡中所有的实例对象

    视频教程

    B站

    人人素材

    ABOUTCG在线课堂

    SiKi学院

    我的联系方式:

    QQ:2161044579
    邮箱:mogoostudio@outlook.com
    Github:https://github.com/MogooStudio

    展开全文
  • Unreal Engine 4 初学者教程:开始 原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是一个游戏开发工具集,能够开发从 2D 手机游戏到 3A ...

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started
    作者:Tommy Tran
    译者:kmyhy

    Unreal Engine 4 是一个游戏开发工具集,能够开发从 2D 手机游戏到 3A 级主机游戏的一切。“方舟:生存进化”、“泰克肯7”和“王国之心 III”这些游戏背后使用的引擎就是它。

    对于初学者来首,用 Unreal Engine 4 开发是很简单的。通过蓝图可视化脚本系统,你可以不写一行代码就创建出整个游戏。再加上一个易于使用的界面,你就可以获得一个可以运行的游戏原型。

    本教程主要是让初学者入门。它涉及以下几个知识点:

    • 安装引擎
    • 导入资源
    • 创建材质
    • 用蓝图(Blueprint)创建具有基本功能的对象

    为了学习这些知识,你会创建一个用于展示一只香蕉的旋转转盘。

    注:本教程属于 Unreal Engine 教程系列,这个系列共 10 个部分:

    安装 Unreal Engin 4

    Unreal Engine 4 使用 Epic Games Launcher 进行安装。进入 Unreal Engine 网站 并点击 Get Unreal 按钮(右上角)。

    下载这个安装器需要创建一个账号。创建账号之后,选择下载和你的操作系统对应的版本。

    下载并安装完安装器之后,运行安装器。会显示一个窗口:

    输入 email 和密码,点击 sign in。登录之后会显示这个窗口:

    在左上角,点击 Install Engine,安装器会让你选择要安装的组件:

    注:Epic Games 经常升级 Unreal Engine,因此你的引擎版本会与此不同。例如我写第一稿时,版本已经升级到 4.14.3! 只要你的版本不低于 4.14, 你就可以使用本教程。

    默认选中的是 Starter Content、Templates and Feature Packs 和 Engine Source。就保持这样的选择不变。它们分别是:

    • Starter Content: 这是你可以在自己项目中免费使用的资源集。它包含了一些模型和材质。你可以在你的游戏中临时使用它们。
    • Templates and Feature Packs: 模板可以根据你的选择来创建基本功能。例如,Side Scroller 模板会创建一个项目,项目中包含一个角色、基本动作和一个固定的水平相机。
    • Engine Source: Epic 提供了源码,这样任何人都可以修改这个引擎。例如,如果你想为编辑器添加自定义功能,你可以通过修改源码来实现。

    拖动这个列表,还有几种不同的平台。如果你不打算支持某个平台,请让它反选。

    选好组件之后,点击 Install。安装完成后,引擎会在 library 中显示。接下来我们创建项目。

    创建项目

    点击 Launch 按钮打开项目浏览器。在项目浏览器中,点击 New Project 标签页。

    点击 Blueprint 标签页。这里,你可以选择一个模板。但是,因为我们想从空白开始,所以选择了 Blank template。

    在下面,你会发现有更多的设置。

    分别有这几个选项:

    • Target Hardware: 选择 Mobile/Tablet 会关闭一些后期处理效果。还会用鼠标模拟触摸。设置为 Desktop/Console。
    • Graphical Target: 选择 Scalable 3D or 2D 会关闭一些后期处理特效。请设置为 Maximum Quality。
    • Starter Content: 使用这个选项可以包含一些开始内容。为了简单起见,这里将它设为 No Starter Content。

    最后一部分设置是指定项目文件夹地址和项目名称。

    点击 Folder 栏右边的 3 个小点,可以改变项目文件夹地址。

    项目名称不代表游戏名称,因此不用担心后期可以修改这个名称。选择 Name 栏的文本框,输入 BananaTurntable。

    最后,点击 Create Project.

    认识界面

    创建完项目,编辑器会打开。编辑器分成了几个区域:

    1. 内容浏览器: 这里显示所有项目文件。用它创建文件夹并组织文件。可以在搜索栏中查找文件或者过滤文件。
    2. Modes: 这里可以选用各种工具比如 Landscape 工具和 Foliage 工具。默认工具是 Place 工具。它允许将各种对象比如灯光和相机放到游戏关卡中。
    3. 世界大纲编辑器: 显示当前关卡中的所有对象。你可以通过将相关的对象放入文件夹中来组织整个列表。它也可以搜索或者通过类型来过滤。
    4. 详情: 你选中的对象会在这里显示出属性。这里可以编辑对象的设置。这里进行的修改只会影响这个对象的实例。例如,如果你有两个球体,如果你改变了其中一个的大小,那么只会对你选中的对象有效。
    5. 工具栏: 包含各种功能。你用得最多的一个就是 Play。
    6. 视口: 关卡视图。按下右键拖动鼠标可以查看四周。按下右键,用 WASD 键进行移动。

    导入 Assets

    光有一个圆桌却没有要陈列的东西有什么用?请下载香蕉模型。里面有两个文件 Banana_Model.fbx 和 Banana_Texture.jpg。当然,你可以用自己的模型。但你怎么来使用这个该死的香蕉呢?

    在 Unreal 能够使用一个文件之前,你必须导入它。在内容浏览器,点击 Import。

    通过文件浏览器,找到 Banana_Model.fbx 和 Banana_Texture.jpg。框选住两个文件,然后点击 Open。

    对于 .fbx 文件,Unreal 会提供几个导入选项。确保 Import Materials 未选中,因为你会创建自己的材质。其它设置保持不变。

    点击 Import。这两个文件就显示到内容浏览器中了。

    在导入文件时,实际上它是不会保存到项目中的,除非你明确地这样做。你可以用右键点击这个文件,选择 Save 就可以保存它们了。还可以选择 File\Save All 来一次性保存所有文件。确保经常使用保存功能。

    注意在 Unreal 中模型被称为网格。选择你已经有一个香蕉的网格了,可以将它放到关卡中了。

    添加网格到关卡

    选择关卡看起来空空的,让我们放点东西。
    要添加网格,左键将 Banana_Model 从内容浏览器中拖到视口。放开鼠标左键,就可以将网格放下。

    关卡中的对象是可以移动、旋转和缩放的。它们的快捷键分别是 W、E 和 R。然后使用操纵杆:

    材质

    如果你近距离查看香蕉,你会发现它根本不是黄的。事实上,它是灰色的。要给香蕉一些颜色和细节,你必须创建材质。

    材质是什么?

    材质决定了某件东西的表面外观。在一个基本的关卡中,材质定义了 4 个方面:

    • 基本色: 一个表面的颜色或纹理。常用于添加细节和色彩的变化。
    • 金属化:表面和金属的相似度。通常,纯粹的金属拥有的金属化值是最大的,而织物的金属化值为 0。
    • 高光:控制非金属表面的发光。例如,陶瓷拥有较高的高光值,而黏土则相反。
    • 粗糙度:粗糙度最大时,没有任何高光。用于岩石或木头的表面。

    下面是 3 种材质的例子。它们颜色相同但属性不同。每种材质都有在对应的属性上设置为较高值。另外的属性则设为 0。

    创建材质

    要创建材质,请进入内容浏览器,点击绿色的 Add New 按钮。会弹出一个菜单显示你可以创建的 assets。点击 Material。

    将材质取名为 Banana_Material 然后双击文件打开材质编辑器。

    材质编辑器

    材质编辑器由 5 部分组成:

    1. 图(graph): 这个区域包含所有节点和结果节点。按下鼠标右键并移动鼠标可以平移。滚动鼠标滚轮可以进行缩放。
    2. 详情: 这里显示选中节点的属性。如果没有选择任何节点,这里会显示材质的属性。
    3. 视口: 包含一个预览的网格,显示你的材质。要转动相机可以按住鼠标左键并移动鼠标。要缩放可以用鼠标滚轮。
    4. 调色板:一个列表,列出材质所有节点变量。

    什么是节点?

    在开始编辑材质前,你必须知道节点是什么。

    节点构成了材质的主体。有许多不同的节点,提供了不同的功能。

    节点可以有输入和输出,用一个圆圈+一个箭头来表示。输入位于左边,输出位于右边。

    材质有一个特殊的节点,就是结果节点,在 Banana_Material 中它是现成的。它是所有节点的终点。一旦你接通这个节点,就可以决定材质的最终显示。

    添加材质

    要为一个模型添加颜色和细节,你需要一个纹理。一个纹理就是一张 2D 图片。通常,它们会投射到 3D 模型上,让它具有颜色和细节。

    为了给香蕉贴图,你需要使用到 Banana_Texture.jpg。TextureSample 节点允许你在材质上使用贴图。

    找到调色板,找到 TextureSample。按下鼠标左键,将它拖到“graph”窗口。

    要选择纹理,首先需要选中这个 TextureSample 节点。找到详情面板,点击 Texture 右边的下拉按钮。

    列表中列出项目中所有纹理。选择 Banana_Texture.

    要在预览网格上查看贴图,需要将它插进结果节点中。左键点击 TextureSample 节点的白色输出按钮上,将它拖到结果节点的 Base Color 输入按钮上。

    回到视口,在预览网格上查看纹理。旋转它(按下鼠标左键并拖动)查看其它细节。

    点击工具栏上的 Apply 按钮,应用你的材质。然后关闭材质编辑器——这部分的工作结束了。

    使用材质

    要将材质应用到香蕉上,你需要指定它。回到内容浏览器,双击 Banana_Model 打开它。这会显示一个编辑器:

    找到详情面板 Materials 一节。点击 Element 0 右边的下拉按钮,选择Banana_Material.

    关闭网格编辑器,回到主编辑器,看一下视口。你将看到香蕉现在已经贴图了。恭喜,你已经成为了一个关卡设计师了!

    注:如果光线太暗,你可以在世界大纲编辑器中点击 Light Source 来改变它。在详情面板中,找到 Intensity,设置为更高的值。

    蓝图

    香蕉看起来很好,但如果将它放到圆桌上旋转就更好了。用蓝图来创建一个圆桌很轻松。

    简单讲,一个蓝图(Blueprint)表示一件”东西“。蓝图允许你为对象创建自定义行为。对象可以是某种物体(比如圆桌),也可以是某些抽象的东西比如生命系统。

    想制作一辆会动的车吗?构建一个蓝图。一只会飞的猪呢?使用蓝图。一只在碰撞中爆炸的小猫?还是蓝图。

    就像材质一样,蓝图使用了节点系统。这意味着你只需要创建节点然后将它们连接起来,不需要编写代码!

    注:如果你更喜欢写代码,你可以用 C++。蓝图易于使用,但它们无法做到和 c++ 代码一样快。如果你不得不用到大量计算的东西,比如复杂算法,你应当使用 c++。
    当然虽然你喜欢 c++,但很多时候用蓝图其实是个好主意。蓝图有这些优点:

    • 通常,蓝图比 c++ 的开发速度更快。
    • 易于组织。你可以将节点分成不同的模块,比如功能和图形。
    • 如果你和非编程人员一起工作,修改蓝图更容易,因为它的可视化和直观性。

    将对象用蓝图来创建是一种好办法。当需要提升性能时,将它们转换成 c++。

    创建蓝图

    在内容浏览器,点击 Add New。在列表中选择 Blueprint Class。

    弹出一个窗口,让你选择父类。你的蓝图会从父类继承所有的变量、函数和组件。花点时间了解每个类能做什么。

    注:Pawn 和 Character 也是 Actor 类,因为你可以放置和生成它们。

    因为圆桌只会待在一个地方不动,Actor 类最适合。选择 Actor 然后给文件命名为 Banana_Blueprint。

    最后,双击 Banana_Blueprint 打开它。当窗口弹出时,点击 Open Full Blueprint Editor :

    蓝图编辑器

    首先,在蓝图编辑器中,选择 Event Graph 标签页。

    蓝图编辑器有 5 个主要的窗口:

    1. 组件窗口:当前组件的列表。
    2. 我的蓝图:用于管理你的图形、功能和变量。
    3. 详情窗口:显示当前选中对象的属性。
    4. 图形窗口:这是关键。所有节点和逻辑都在这里。按下右键并拖动鼠标进行平移。滚动鼠标滚轮进行缩放。
    5. 视口:任何拥有可视化元素的组件都在这里显示。你可以用主编辑器一样的方式移动和旋转。

    创建圆桌

    要创建圆桌,需要两个东西:一个基座和一个陈列品。你可以通过组件来创建这两个东西。

    什么是组件?

    如果一个蓝图是一辆车,那么组件就是组成车辆的构件。例如,车门、轮胎、引擎都是组件。

    但是,组件不仅仅限于物理对象。

    例如,要让车动起来,你需要添加一个移动组件,你甚至可以为它添加一个飞行组件让它飞起来。

    添加组件

    在你看到任何组件之前,你需要切换到视口视图。点击 Viewport 标签页即可切换到它。它看起来像这个样子:

    注:DefaultSceneRoot 组件在玩游戏时不会显示。它只在编辑器中显示。

    这个圆桌用到了两个组件:

    • Cylinder: 一个简单的白色圆柱体。这是放置香蕉的底座。
    • Static Mesh: 这个组件用于显示香蕉网格。

    要添加底座,找到组件面板。点击 Add Component 并选择 Cylindar。

    最好让底座变得更短一点。按下 R 键,显示缩放操作杆,然后将它缩短(不要管真实大小,你可以在后面修改它)。

    然后来添加网格。回到组件面板,在空白地方点击左键,清除对圆柱体的选中状态。这能保证接下来的组件不会附加在圆柱体组件上。

    注:如果不这样做,接下来的组件会附加在圆柱体上。这意味着它会继承圆柱体的 scale 属性。因为你缩短了圆柱体,那么接下来的组件也会被缩短。

    然后。点击 Add Component,选择 Static Mesh。

    要显示香蕉,选择这个静态网格组件,然后点击 Details 标签页。点击 Static Mesh 右边的下拉按钮,选择 Banana_Model。

    如果它的位置不对,请移动香蕉。按 W 激活操作杆,移动它的位置。

    蓝图节点

    接下来让圆桌旋转。这就要用到蓝图节点了。

    和材质节点不同,蓝图节点拥有特殊的 pin 叫做 Execution pin。位于左边的 pin 是输入,位于右边的则是输出。所有节点至少有一个输入/输出。

    如果节点有一个输入 pin,它前边必定有一个连接才能执行。如果有一个节点没连接,那么后续的任何节点都不会执行。

    举一个例子:

    节点 A 和节点 B 会执行,因为他们的输入 pin 已经有连接。节点 C 和节点 D 不会执行,因为节点 C 的输入 pin 是断开的。

    转动圆桌

    在开始之前,看一眼组件面板。你会看到 Cylindar 和 Static Mesh 有缩进而 DefaultSceneRoot 没有缩进。这是因为前者是附加到 DefaultSceneRoot 上的。

    如果你移动、旋转或缩放 root 组件,那么它包含的组件也会有同样动作。通过这种方式,你可以让 Cylinder 和 Static Mesh 一起旋转,而不是分别旋转。

    创建节点

    要开始编写脚本,需要进入 Event Graph 标签页。

    让某个对象旋转非常简单,只需要创建一个节点。在 graph 视图空白地方右键,打开有效的节点菜单。搜索 AddLocalRotation。因为你需要旋转底座和香蕉,你只需要旋转 root 组件即可。选择 AddLocalRotation(DefaultSceneRoot)。

    注:如果没有列出这个节点,请反选菜单右上角的 Context Sensitive 选项。

    在 graph 窗口中会多出一个 AddLocalRotation 节点。Target 输入会自动连接到你选择的组件。

    要设置旋转角度,找到 Delta Rotation 输入,然后修改 Z 值为 1.0。这将导致蓝图沿 Z 轴旋转。值越大,转速越快。

    要不断地旋转,你必须逐帧调用 AddLocalRotation。要逐帧调用,需要使用 Event Tick 节点。它已经在你的 graph 视图中了。如果没有,用前面一样的方法创建一个。

    将 Event Tick 节点的输出 pin 拖到 AddLocalRotation 节点的输入 pin。

    注:用这种方法,旋转速度取决于帧率。这意味着机器越慢圆桌的转速越慢,反之亦然。这对于本教程来说是可以的,因为我让事情简单化了,但在后面的教程中我会介绍如何解决这个问题。

    最后,点击工具栏上的 Compile 按钮,更新你的蓝图,然后关闭蓝图编辑器。

    将蓝图添加到关卡

    在添加蓝图之前,在主编辑器的视口中,删除香蕉的模型。选择该模型,点击 Edit\Delete 菜单或者按 Delete 键。

    添加蓝图和添加网格一样。在文件上按住左键,将它拖到视口中。

    点击工具栏上 的 Play 按钮,看看效果!

    注:如果你没有删除原有的香蕉模型,你可能会被警告”灯光需要重建“。如果删掉模型,则错误不再显示。

    接下来去哪里?

    在这里下载完成后的项目。

    你已经学完这篇教程,但那只是 Unreal 中极小的一部分。如果你想继续学习,请阅读本系列的下一篇教程,我将介绍 Unreal 引擎更多关于蓝图的内容。

    展开全文
  • Unreal+Engine+4+AI+Programming+Essential....pdf Kindle 电子书文件: Unreal+Engine+4+AI+Programming+Essential....rar VR热门内容: 实时演算: 根据已知设备 头盔,两个手柄。 外加玩家的...

    PDF文件:

    Unreal+Engine+4+AI+Programming+Essential....pdf

    Kindle 电子书文件:

    Unreal+Engine+4+AI+Programming+Essential....rar


    VR热门内容:

    实时演算:

    根据已知设备 头盔,两个手柄。 外加玩家的几个测量参数 实时演算 玩家手,手臂,手肘,动作。

    如可以增加一些外设,如鞋子,腰带。可对玩家的四肢,腰部进行准确的实时演算。

    由此可以对游戏角色进行准确控制。

    真实的材质模型 + AI:

    不用说,模拟的就是人类。

    VR网络多人:

    与人沟通很重要。

    展开全文
  • 教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞 想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com 目录 第一章 常见的物理现象及分析 1蓝图模板中的物理现象 2创建子弹抛射 3自动追踪 4碰撞事件...

    教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞

    想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com

    目录

    第一章 常见的物理现象及分析

    1蓝图模板中的物理现象

    2创建子弹抛射

    3自动追踪

    4碰撞事件

    5纯物理模拟子弹

    第二章 碰撞体

    1简易碰撞体

    2DOP碰撞体

    3凸面碰撞体

    4567UBX导入碰撞体

    8从其他模型复制碰撞体

    9碰撞体积

    第三章 物理刚体

    1物理刚体

    2质量

    3质心

    4运动衰减

    6运动空间锁定

    第四章 碰撞通道

    1类型、反馈、通道

    2UE4中的碰撞设置

    3碰撞案例测试

    4类型与反馈案例

    5添加自定义碰撞

    第五章 碰撞事件

    1ACTOR交叉触发

    2OnComponent触发

    3击中

    4击伤事件

    5伤害类型

    6点伤害

    7范围伤害规则

    8完全伤害

    第六章 射线检测

    1零粗细(很细)射线检测

    2零检测返回结果

    4球体非零粗细检测

    5调试检测结果

    6多重零粗细检测

    7盒子、胶囊体检测

    8逐多边形检测


     

    第一章 常见的物理现象及分析

    1蓝图模板中的物理现象

    分析了第一人称射击模板中的物理现象,比如子弹飞行、碰撞、产生力的效果与消失。

    2创建子弹抛射

    1.给子弹击中物体施加一个同方向的冲击力——子弹蓝图

     

    2.子弹模型添加Projectile Movement Component组件,引擎自带的子弹模拟,可设置子弹参数

     

    3.控制生成的子弹位置、播放角色动画

    3自动追踪

    1.设置子弹反弹参数

     

    2.设置子弹追踪导航功能

    蓝图中设置追踪目标

     

    4碰撞事件

    1.Overlap重叠事件(类似Unity里的触发器,又不同)两者均需要勾选Generate Overlap

    5纯物理模拟子弹

    1.删除projectile组件,更改Sphere Mesh的碰撞预设,给小球生成时添加Physics Linear Velocity,更改发射方向。

    2.选中Actor,修改生命周期

    第二章 碰撞体

    1简易碰撞体

    2DOP碰撞体

    10DOP分别沿着X Y Z轴创建更复杂的碰撞体

    3凸面碰撞体

     

    4567UBX导入碰撞体

    3DMAX中制作碰撞体的命名规则:盒型UBX、球形USP、不规则UCX,紧跟其中一个模型的名称。不规则时,每个内角要小于180°,是一个凸边形。

     

    8从其他模型复制碰撞体

    选中其他已有碰撞体的相同模型,在无碰撞体的模型中选择Copy

    9碰撞体积

    Blocking Volume通常当作场景的边界碰撞盒,可同BSP模型一样进行编辑修改

    第三章 物理刚体

    1物理刚体

    2质量

    3质心

    4运动衰减

    6运动空间锁定

    第四章 碰撞通道

    1类型、反馈、通道

    Object Type ——> Response ——> Channel

    2UE4中的碰撞设置

    3碰撞案例测试

    1.阴影烘培效果,Movable是实时的,Static需要构建

    2.可破坏物体 设置碰撞时可破碎

    3.各种Object Response设置

    4类型与反馈案例

    5添加自定义碰撞

     

    第五章 碰撞事件

    1ACTOR交叉触发

    Event ActorBeginOverlap——碰撞物体触发

    Event ActorEndOverlap

    2OnComponent触发

    Add On Component Begin Overlap——碰撞组件触发

    Add On Component End Overlap

    3击中

    Event Hit

    开启Hit事件 碰撞响应要设置为Block

    4击伤事件

    1.应用伤害Apply Damage

    2.接受伤害

    Event AnyDamage

    Event PointDamage

    Event RadialDamage

    5伤害类型

    1.DamageType的预设类别

    2.创建一个继承DamageType的自定义DamageType蓝图

     

    3.代替Add Impulse产生冲击力,设置Damage Type中的Damage Impulse为80。但Apply Damage无法触发代码Add Impluse At Location(Apply Point/Radial Damage可以)。

    AnyDamage连接下的

    6点伤害

    1.子弹蓝图里触发Damage

    7范围伤害规则

    1.球形范围伤害

    2.由于Damage Prevention Channel的原因,侧面和后面的方块受到的爆破力被阻碍

    8完全伤害

    1.C++引擎源码中的ApplyRadialDamge蓝图节点信息

    h头文件

    /** Hurt locally authoritative actors within the radius. Will only hit components that block the Visibility channel.
    	 * @param BaseDamage - The base damage to apply, i.e. the damage at the origin.
    	 * @param Origin - Epicenter of the damage area.
    	 * @param DamageRadius - Radius of the damage area, from Origin
    	 * @param DamageTypeClass - Class that describes the damage that was done.
    	 * @param DamageCauser - Actor that actually caused the damage (e.g. the grenade that exploded).  This actor will not be damaged and it will not block damage.
    	 * @param InstigatedByController - Controller that was responsible for causing this damage (e.g. player who threw the grenade)
    	 * @param bFullDamage - if true, damage not scaled based on distance from Origin
    	 * @param DamagePreventionChannel - Damage will not be applied to victim if there is something between the origin and the victim which blocks traces on this channel
    	 * @return true if damage was applied to at least one actor.
    	 */
    	UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category="Game|Damage", meta=(WorldContext="WorldContextObject", AutoCreateRefTerm="IgnoreActors"))
    	static bool ApplyRadialDamage(const UObject* WorldContextObject, float BaseDamage, const FVector& Origin, float DamageRadius, TSubclassOf<class UDamageType> DamageTypeClass, const TArray<AActor*>& IgnoreActors, AActor* DamageCauser = NULL, AController* InstigatedByController = NULL, bool bDoFullDamage = false, ECollisionChannel DamagePreventionChannel = ECC_Visibility);
    	
    	/** Hurt locally authoritative actors within the radius. Will only hit components that block the Visibility channel.
    	 * @param BaseDamage - The base damage to apply, i.e. the damage at the origin.
    	 * @param Origin - Epicenter of the damage area.
    	 * @param DamageInnerRadius - Radius of the full damage area, from Origin
    	 * @param DamageOuterRadius - Radius of the minimum damage area, from Origin
    	 * @param DamageFalloff - Falloff exponent of damage from DamageInnerRadius to DamageOuterRadius
    	 * @param DamageTypeClass - Class that describes the damage that was done.
    	 * @param DamageCauser - Actor that actually caused the damage (e.g. the grenade that exploded)
    	 * @param InstigatedByController - Controller that was responsible for causing this damage (e.g. player who threw the grenade)
    	 * @param bFullDamage - if true, damage not scaled based on distance from Origin
    	 * @param DamagePreventionChannel - Damage will not be applied to victim if there is something between the origin and the victim which blocks traces on this channel
    	 * @return true if damage was applied to at least one actor.
    	 */
    	UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category="Game|Damage", meta=(WorldContext="WorldContextObject", AutoCreateRefTerm="IgnoreActors"))
    	static bool ApplyRadialDamageWithFalloff(const UObject* WorldContextObject, float BaseDamage, float MinimumDamage, const FVector& Origin, float DamageInnerRadius, float DamageOuterRadius, float DamageFalloff, TSubclassOf<class UDamageType> DamageTypeClass, const TArray<AActor*>& IgnoreActors, AActor* DamageCauser = NULL, AController* InstigatedByController = NULL, ECollisionChannel DamagePreventionChannel = ECC_Visibility);

    cpp实现

    bool UGameplayStatics::ApplyRadialDamage(const UObject* WorldContextObject, float BaseDamage, const FVector& Origin, float DamageRadius, TSubclassOf<UDamageType> DamageTypeClass, const TArray<AActor*>& IgnoreActors, AActor* DamageCauser, AController* InstigatedByController, bool bDoFullDamage, ECollisionChannel DamagePreventionChannel )
    {
    	float DamageFalloff = bDoFullDamage ? 0.f : 1.f;
    	return ApplyRadialDamageWithFalloff(WorldContextObject, BaseDamage, 0.f, Origin, 0.f, DamageRadius, DamageFalloff, DamageTypeClass, IgnoreActors, DamageCauser, InstigatedByController, DamagePreventionChannel);
    }
    
    bool UGameplayStatics::ApplyRadialDamageWithFalloff(const UObject* WorldContextObject, float BaseDamage, float MinimumDamage, const FVector& Origin, float DamageInnerRadius, float DamageOuterRadius, float DamageFalloff, TSubclassOf<class UDamageType> DamageTypeClass, const TArray<AActor*>& IgnoreActors, AActor* DamageCauser, AController* InstigatedByController, ECollisionChannel DamagePreventionChannel)
    {
    	FCollisionQueryParams SphereParams(SCENE_QUERY_STAT(ApplyRadialDamage),  false, DamageCauser);
    
    	SphereParams.AddIgnoredActors(IgnoreActors);
    
    	// query scene to see what we hit
    	TArray<FOverlapResult> Overlaps;
    	if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
    	{
    	World->OverlapMultiByObjectType(Overlaps, Origin, FQuat::Identity, FCollisionObjectQueryParams(FCollisionObjectQueryParams::InitType::AllDynamicObjects), FCollisionShape::MakeSphere(DamageOuterRadius), SphereParams);
    	}
    
    	// collate into per-actor list of hit components
    	TMap<AActor*, TArray<FHitResult> > OverlapComponentMap;
    	for (int32 Idx=0; Idx<Overlaps.Num(); ++Idx)
    	{
    		FOverlapResult const& Overlap = Overlaps[Idx];
    		AActor* const OverlapActor = Overlap.GetActor();
    
    		if ( OverlapActor && 
    			OverlapActor->bCanBeDamaged && 
    			OverlapActor != DamageCauser &&
    			Overlap.Component.IsValid() )
    		{
    			FHitResult Hit;
    			if (DamagePreventionChannel == ECC_MAX || ComponentIsDamageableFrom(Overlap.Component.Get(), Origin, DamageCauser, IgnoreActors, DamagePreventionChannel, Hit))
    			{
    				TArray<FHitResult>& HitList = OverlapComponentMap.FindOrAdd(OverlapActor);
    				HitList.Add(Hit);
    			}
    		}
    	}
    
    	bool bAppliedDamage = false;
    
    	if (OverlapComponentMap.Num() > 0)
    	{
    	// make sure we have a good damage type
    	TSubclassOf<UDamageType> const ValidDamageTypeClass = DamageTypeClass ? DamageTypeClass : TSubclassOf<UDamageType>(UDamageType::StaticClass());
    
    		FRadialDamageEvent DmgEvent;
    		DmgEvent.DamageTypeClass = ValidDamageTypeClass;
    		DmgEvent.Origin = Origin;
    		DmgEvent.Params = FRadialDamageParams(BaseDamage, MinimumDamage, DamageInnerRadius, DamageOuterRadius, DamageFalloff);
    
    	// call damage function on each affected actors
    	for (TMap<AActor*, TArray<FHitResult> >::TIterator It(OverlapComponentMap); It; ++It)
    	{
    		AActor* const Victim = It.Key();
    		TArray<FHitResult> const& ComponentHits = It.Value();
    		DmgEvent.ComponentHits = ComponentHits;
    
    		Victim->TakeDamage(BaseDamage, DmgEvent, InstigatedByController, DamageCauser);
    
    		bAppliedDamage = true;
    	}
    	}
    
    	return bAppliedDamage;
    }
    

    2.Apply Radial Damage with Falloff (falloff为0不衰减,越大衰减越快

    第六章 射线检测

    1零粗细(很细)射线检测

     

    射线通道TraceChannel

    Visibility——适用于两点之间,存在障碍物时触发

    Camera——适用于从相机发出射线

    TraceComplex——针对复杂物体,检测复杂碰撞体还是简单的碰撞体,一般不开启

     

    Note设置Start End Position

    绘制射线的持续时间

    2零检测返回结果

    法线

    测试

     

    4球体非零粗细检测

    5调试检测结果

    蓝图

    预测

    实际

    6多重零粗细检测

    1.立方体 碰撞预设设置由BlockAll变为OverlapAll

    Blocking Hit 绿色为false,红色为true

    7盒子、胶囊体检测

    Orientation——方向

     

    8逐多边形检测

    Trace Complex 不勾选——检测碰撞体

    勾选——检测多边形模型

    同时,模型选择Use Complex Collision As Simple Collision

     

     

    展开全文
  • 蓝图艺术系列翻译中文PDF教程蓝图艺术系列翻译中文PDF教程
  • 虚幻4(UE4) 蓝图从入门讲解到进阶的小案例。 讲解很细致。
  • 简介:十篇文章介绍虚幻4引擎的入门和基本内容,蓝图、材质、粒子效果、UI界面等 系列目录 准备篇 基本操作 材质入门 初步运行 简易交互门 多种开门方式 相对坐标、绝对坐标、世界坐标的含义 UI 粒子...
  • UE4蓝图编程,与传统的代码编程区别多,共同点更多,不急不躁,厚积薄发会有所进步。
  • Unreal Engine 4 简称UE4,后续文中都使用简称。 本文知识来源:UE4游戏关卡制作 旨在记录一些重要的知识点。 添加关卡 添加关卡的两种方式: 这种方式,添加的关卡,位置需要保存时指定。 另一种方式: 进入maps...
  • Unreal学习心得
  • unreal4特性介绍

    2017-09-12 10:44:31
    原文地址: https://www.unrealengine.com/products/unreal-engine-4  unreal enginer介绍 我的UE4学习(一) 你曾想过用连线的形式来编写程序么; 你曾想过通过编辑工具就可以来创建类,并在vs中...
  • 作者:谭草头乙链接:...什么是游戏引擎,什么是虚幻引擎(Unreal Engin 4)?游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节,是游戏开发的流程核心。 UE(Unreal...
  • 一位程序员网友小保哥分享自己的UE4快速上手过程,只是笔记,52VR做了一点更加适合阅读的修改,整理给大家。
  • Unreal的初步探索,进行了对引擎的大致了解、发展状况及应用领域及引擎功能的资料搜索、引擎的安装与项目的建立、编程语言的简单认识、官方文档的简单阅读了解等一系列初步认识
  • 国产游戏 失落之魂 (英文名 Lost Soul Aside ) 是由杨冰先生独自一人花费3年左右的时间开发的一款动作游戏,目前还处于并不完整的demo阶段。前不久杨冰先生在网上上传了一个宣传视频,网友纷纷点赞,很快就...
  • 声明:转载说明出处! unreal4特性介绍网址:...我的UE4学习(一) 你曾想过用连线的形式来编写程序么; 你曾想过通过编辑工具就可以来创建类,并在vs中自动生成类和函数,头文件和cpp文件么; 你曾想过粒子效果
  • Unreal Engine 4 书籍翻译 Building an RPG with Unreal 三 第3章 探索和战斗 创建角色 接口 PlayerController The Pawn 游戏模式类 Unreal Engine 4 书籍翻译 Building an RPG with Unreal (三)好记性不如...
  • 本文系笔者的实习生分享会内容预备兼...参考资料:https://wiki.unrealengine.com/GameplayAbilities_and_You#Introduction 简介(用有道词典机器翻译得到的简介,原文是上面的连接): 那么,什么是GameplayAbil...
  • 实现此功能很简单,有两种方式,一种是通过代码定义事件接口,实现逻辑完全放在蓝图中,代码中没有默认实现逻辑;另外一种是在代码中有默认实现逻辑,但在蓝图中可以重写。 针对第一种方式,可以直接参考最常用的...
1 2 3 4 5 ... 7
收藏数 131
精华内容 52
关键字:

unreal蓝图完全学习