虚幻引擎学习笔记——Month1 Week2

Day1

学习程序的方法:
  1. 先模仿课堂案例,再将其灵活运用到作业中
  2. 把每次遇到的问题和错误及相应的解决方法记录下来
程序基础:
  • 变量:程序运行时存储数据的手段(计算机内存中开辟一块存储空间,当程序用到该数据时就到此处“取数据 ”)
  • 声明(又称“创建”):当计算机程序需要内存空间时,发出的“占位”命令
  • 初始化:为声明的变量赋默认值
  • 基本数据类型只有四个:布尔型、字节型、整型、浮点型
  • 字节型:是最小的整型数据值,用来描述一个值域范围在0~255的整数,所以其占用的内存很小
  • 数据类型的意义:
    • 数据类型描述了数据在内存中占用的空间大小,如果没有数据类型,则计算机将无法进行内存申请,那么程序将无法运行
    • 数据类型的出现就是为了把数据根据需求分配空间(eg.给瘦子分配单人床,给胖子 分配双人床)
  • 关系运算符的结果都是布尔型——TRUE / FALSE
  • SET——设置;GET——获取
  • 节点“SetActorLocation”:设置蓝图对象在世界中的位置
  • 节点“EvenTick”:每帧执行一次
  • 节点“GetActorLocation”:获得对象在世界中的位置,用的是世界坐标系
  • 世界坐标(x,y,z)是绝对坐标,永远不变
  • 节点“GetActorForward / Right / Up Vector”,用的是本地坐标系,按照对象的前/右/上方运动

虚幻蓝图

虚幻蓝图入门小知识:
  1. 是一种可视化编程语言
  2. 种类有很多(eg.关卡蓝图、对象蓝图、动画蓝图…)
  3. 创建了蓝图后,要将其放入场景中(此过程成为“蓝图的实例化”,即,由一级蓝图复制生成无数个二级蓝图)
  4. 蓝图的运行方式为:从左到右,线性运行(节点之间的连线称为“逻辑线”)
  5. 逻辑线箭头显示:编辑 ——> 编辑器偏好设置 ——> 搜索:arrow ——> 打开:在蓝图中绘制中点箭头
  6. 打开输出日志:窗口 ——> 开发者工具 ——> 输出日志(在虚幻中所有的操作、错误等都会被记录在日志中)
  7. 蓝图中红色的节点为官方提供的,会自动运行。所以,蓝图左侧的第一个节点必须为红色节点
  8. “打印”节点为:PrintString
  9. 蓝图中只有三处可以写中文:注释、UI界面、PrintString节点的打印内容
5月29号案例:
  1. 蓝图方盒子向前移动1CM

虚幻引擎学习笔记——Month1 Week2_第1张图片

  1. 蓝图方盒子一直向前运动虚幻引擎学习笔记——Month1 Week2_第2张图片
  2. 蓝图方盒子向前移动900CM后停止
    虚幻引擎学习笔记——Month1 Week2_第3张图片
  3. 按下键盘“1”,蓝图球体向前移动100CM(此案例中,仅可移动一次100CM)
    虚幻引擎学习笔记——Month1 Week2_第4张图片

Day2

类型转换节点:Cast To …

虚幻引擎学习笔记——Month1 Week2_第5张图片

设置项目默认打开的地图:

编辑 ——> 项目设置 ——> 地图和模式 ——> 默认贴图 ——> 游戏默认地图
虚幻引擎学习笔记——Month1 Week2_第6张图片

拿到美术资源后先进行检测:
  • 烘焙文件,看一下输出日志是否有错误
    虚幻引擎学习笔记——Month1 Week2_第7张图片
  • 打包成.exe文件
    虚幻引擎学习笔记——Month1 Week2_第8张图片
蓝图类之Pawn与Character:
  • Pawn类是Character类的父类(父子类关系为:Actor ——> Pawn ——> Character)
  • 在Pawn中,没有走跑跳等功能,Character中有
  • 需要使用人物运动时,用Character,只需要展示用途用Pawn
    虚幻引擎学习笔记——Month1 Week2_第9张图片
3dsMax的前视图Y轴方向,UE的模型的前方是X轴方向。故,导入模型到UE蓝图中后需要进行方向的旋转

调出人物模型:

按下键盘1或2,可实现向前移动100CM或200CM
玩家遇到“碰撞体”是,发生90°转向
  • 首先在碰撞体中添加变量“IsRotation”,用于存储与玩家相碰后的布尔值虚幻引擎学习笔记——Month1 Week2_第10张图片
  • 接着在玩家蓝图中进行逻辑的书写虚幻引擎学习笔记——Month1 Week2_第11张图片
绑定WASD键控制玩家蓝图进行移动

虚幻引擎学习笔记——Month1 Week2_第12张图片

虚幻引擎学习笔记——Month1 Week2_第13张图片

玩家蓝图的抬头、低头效果需要用相机承接角色的Rotation,因为不能将抬低头做成整个角色上仰、下躺的效果

要想使用自己制作的蓝图,需要将他们在“游戏模式中”进行绑定

Day3

键盘WSAD控制移动,鼠标控制上下左右蓝图:

虚幻引擎学习笔记——Month1 Week2_第14张图片

利用TimeLine时间线节点制作:玩家遇到门模型,门2秒钟缓缓打开效果

所用节点:

  • SetRelativeRotation:设置相对坐标旋转
  • addTimeLine:时间轴节点,用于制作一段物体时间内的运动变化(相当于EvenTick中的一段)
  • Lerp:从一个值(A)变化到另一个值(B)
  • make Rotator:可以方便的控制Z轴运动(Yaw)
  • Flip Flop:开关节点
  • Custom Event:用户自定义节点,为红色系统节点,但该节点不会自动运行,需要别的节点传入信号告诉它该开始了。即,可用于接受信号。
  • Is Valid:判断变量是否“有效”,即,判断变量值是否不为“空”
    虚幻引擎学习笔记——Month1 Week2_第15张图片
    虚幻引擎学习笔记——Month1 Week2_第16张图片
升级版:添加碰撞体,实现当玩家靠近门时门开,离开门时门关

虚幻引擎学习笔记——Month1 Week2_第17张图片

升级版:添加碰撞体,实现玩家按下F键可实现开、关门

虚幻引擎学习笔记——Month1 Week2_第18张图片

对象与对象之间的消息传递——玩家分别走到三扇门前,可以实现分别将门打开
  • 需要一个玩家蓝图:BP_Character;一个门蓝图:BP_Door

  • 用户自定义节点(CustomEvent):
    是一个特殊的红色官方节点。一般官方给出的红色节点只能接受系统默认的通知,而用户自定义节点用于接收其他调用该节点的对象发来的通知

  • 实现思路:
    1、在BP_Door中创建自定义事件
    2、在BP_Character中调用自定义事件
    3、在BP_Door中实现,当人进入门的碰撞体范围内时,门将自己的信息存入BP_Character的变量DoorActor中(DoorActor类型为BP_Door)。

BP_Character蓝图:
虚幻引擎学习笔记——Month1 Week2_第19张图片
BP_Door蓝图:虚幻引擎学习笔记——Month1 Week2_第20张图片

Day4

电梯上升案例
  • 按下键1~4可实现电梯上升/下降到相应楼层
    虚幻引擎学习笔记——Month1 Week2_第21张图片
  • 当电梯到达每一层时,电梯门自动开关一次
    虚幻引擎学习笔记——Month1 Week2_第22张图片
  • 在每层楼都添加一个电梯外门,当电梯到达相应楼层时,外门与电梯门同时打卡:
    1、首先创建新的电梯外门蓝图,单独控制电梯外门
    2、在电梯外门蓝图中,创建自定义事件。为判断那一层外门开,需要对每一层外门进行编号(1、2、3、4),然后用此标号与当前电梯所在楼层(1、2、3、4)进行比较,若数值相同,则将相应编号门打开虚幻引擎学习笔记——Month1 Week2_第23张图片
    虚幻引擎学习笔记——Month1 Week2_第24张图片
    虚幻引擎学习笔记——Month1 Week2_第25张图片
    3、在调用自定义事件(OpenElevatorDoor)前,要先对场景中的外门进行搜索,将外门全部找到。然后才能将“当前电梯所在楼层数”与“外门所在楼层数”进行比较,进而决定开哪一扇门。
    虚幻引擎学习笔记——Month1 Week2_第26张图片

初识“类的继承”

  • 继承:即,将众多蓝图所共用到的功能提取出来,将其写在父类中。这样,由父类创建出的子类会自动继承父类中已经写好的功能,无需再将重复性的代码写一遍
  • 父类创建的“自定义事件(CustomEvent)”只能给自己及子类使用,其他的蓝图无法使用。
    - 所以我们通常不在父类中创建 “自定义事件”,而是将所有的“自定义功能”集中放在一个蓝图文件中,任何蓝图需要时,直接从这个 “功能蓝图” 中调用就好了。这个“功能蓝图”就是我们俗称的 “接口(Interface)”
    - 用 “蓝图接口” 做 “自定义事件” 的创建,然后将创建的文件给到父类,这样父类身上就有了 “自定义事件”,在其子类中就可以直接使用了。
    - 在案例中,我们为了让角色(Player)能发出一个命令,一开始我们采用的时自定义事件(CustomEvent),但为了加强通用性和拓展性,我们采用了“接口(Interface)”
室内案例
准备工作:

1、将四个框架文件放入世界场景设置中

2、在项目控制器中绑定操作逻辑
虚幻引擎学习笔记——Month1 Week2_第27张图片
虚幻引擎学习笔记——Month1 Week2_第28张图片
3、在玩家模型的头部添加一个相机,并用相机承接胶囊提的Rotation
虚幻引擎学习笔记——Month1 Week2_第29张图片

  • 首先在BluePrints中创建一个父类蓝图,在其中创建“碰撞体事件”,继承给所有的子类使用
    虚幻引擎学习笔记——Month1 Week2_第30张图片
    虚幻引擎学习笔记——Month1 Week2_第31张图片
    这里创建变量的的目的就是让门告诉Player:“我是谁,我是哪一扇门”

  • 蓝图接口

    • 创建“蓝图接口文件” —— BP_Interface
      虚幻引擎学习笔记——Month1 Week2_第32张图片
    1. 在蓝图接口中新建一个函数
      虚幻引擎学习笔记——Month1 Week2_第33张图片
    2. 父类调用蓝图接口中的函数
      虚幻引擎学习笔记——Month1 Week2_第34张图片
    3. 子类调用蓝图接口中的函数(从父类获得)
      虚幻引擎学习笔记——Month1 Week2_第35张图片
    4. 当Player在“门碰撞体”范围内按下F键,门会将信息存入BaseActor,此时从BP_BaseActor中得到的碰撞信息会经由“开关接口(OpenAndClose)”传递给BP_BaseActor_Door实现开门
      虚幻引擎学习笔记——Month1 Week2_第36张图片
歪招:在UE中重新调整模型中心点
  • 创建一个空白的新蓝图,将要调整的模型导入空白蓝图

  • 手动调节,尽可能调整到在3dsMax中的效果,保存蓝图

  • 将上述蓝图模型放在场景中,右键转为静态网格体,保存在Meshes文件夹下
    虚幻引擎学习笔记——Month1 Week2_第37张图片

  • 按下F键,实现相框中的图片切换
    虚幻引擎学习笔记——Month1 Week2_第38张图片

  • 按下F键,实现控制灯的开关
    虚幻引擎学习笔记——Month1 Week2_第39张图片

Day5

  • 在虚幻引擎中,视频流的东西被称为“媒体(Media)”;音频流的东西被称为“声音”

  • 媒体(Media)最佳格式为:.mp4

  • 声音(MediaSound)最佳格式为:.wav (注意:.mp3格式在虚幻引擎中被视为媒体)

  • 媒体文件是虚幻引擎唯一不能导入的文件

  • 媒体文件必须放在内容文件夹(Content)下面,且文件夹名必须为“Movies”,并将媒体文件放在该文件夹内
    虚幻引擎学习笔记——Month1 Week2_第40张图片
    虚幻引擎学习笔记——Month1 Week2_第41张图片

  • 媒体文件导入UE的Movies文件夹后,还需要创建一个媒体播放器才能播放媒体。
    虚幻引擎学习笔记——Month1 Week2_第42张图片

  • 图片无法直接拖拽贴在模型上,需要右键——>创建材质,以材质的形式附着在模型上
    虚幻引擎学习笔记——Month1 Week2_第43张图片

  • 创建屏幕蓝图,将原来的屏幕模型替换掉

  • 播放器进入蓝图的唯一手段是通过“变量”:即,声明一个变量,让这个变量与播放器关联,此时操作变量就相当于操作播放器。
    虚幻引擎学习笔记——Month1 Week2_第44张图片
    (屏幕的材质最好连接上自发光)
    虚幻引擎学习笔记——Month1 Week2_第45张图片
    将点视屏幕的材质更换为动态视频的材质

媒体播放蓝图:
  • 首先明确一点“你控制的是谁?”——答:控制的是媒体的播放,即变量“MediaPlayer”。不是模型,也不是材质,是由于媒体的播放造成了图片材质的变化从而形成了视频。
  • 节点Play,不是“播放”,是“继续播放”。此节点用于已经打开,正在播放的视频。节点OpenSource是播放(打开媒体源文件)。
  • 屏幕播放声音只需在屏幕蓝图下添加声音组件(MediaSound),然后将声音组件的媒体绑定到与相应视频的同一个媒体播放器即可。
    虚幻引擎学习笔记——Month1 Week2_第46张图片
    虚幻引擎学习笔记——Month1 Week2_第47张图片
  • 运行播放时,发现视频材质是反的,需要绕X轴进行镜像
    虚幻引擎学习笔记——Month1 Week2_第48张图片

你可能感兴趣的:(虚幻,学习,ue4)