UE小白学习日记

Level

UE中的Level(关卡)和Unity中的Scene(场景)在概念和用途上非常相似,都是用来组织和管理3D环境的基本单位。让我为您详细对比一下:

相似之处:

  1. 它们都是游戏世界的容器,可以包含游戏对象、光照、地形等元素
  2. 都支持场景/关卡的切换和加载
  3. 都可以用来划分游戏内容,比如不同关卡或者不同区域

主要区别:

  1. 命名习惯不同 - UE使用"Level"这个术语,而Unity用"Scene"
  2. Level的组织方式 - UE支持多Level同时加载和显示(比如通过Level Streaming),而Unity的Scene虽然也支持叠加模式,但没有UE的层级管理那么灵活
  3. 子关卡系统 - UE有特殊的子关卡(Sub-Level)概念,可以更好地组织大型场景

Actor

UE中的Actor(演员)确实和Unity中的GameObject(游戏对象)有很多相似之处,它们都是场景中可放置对象的基类。不过还是有一些细微的区别:

相似之处:

  1. 都是场景中所有对象的基础类
  2. 都可以附加组件/组件(Unity用Component,UE用Component)
  3. 都支持父子层级关系
  4. 都有位置、旋转、缩放等变换属性

主要区别:

  1. Actor有更多专门的子类 - 比如Pawn(可被控制的角色)、Character(角色)等,而GameObject更倾向于通过组件来实现功能
  2. 组件管理方式不同 - UE中Actor必须有一个Root Component(根组件),其他组件都依附于此,而Unity的GameObject可以自由添加多个并列的Component
  3. 网络同步处理 - UE的Actor内置了网络复制功能,而Unity需要另外添加组件实现
  4. 生命周期 - UE的Actor有BeginPlay、Tick等生命周期函数,而Unity使用Start、Update等

从编程角度看,如果您习惯了Unity的开发方式,可以这样理解转换:

  • Unity的 GameObject.Find() → UE的 GetActorOfClass()
  • Unity的 Instantiate() → UE的 SpawnActor()
  • Unity的 transform组件 → UE的 RootComponent

说白了,Actor和Unity中的Empty Gameobject差不多,就是一个空的物体然后可以放很多的东西 

Mobility

UE中的Mobility(可移动性)是用来定义场景中物体或光源的移动属性的设置,它有三种状态:

  1. Static(静态)
  • 完全不能在游戏运行时移动或改变
  • 性能最好,因为引擎可以预先计算光照等效果
  • 适用于建筑物、岩石等永远不会移动的物体
  • 被烘焙进光照贴图中
  1. Stationary(固定)
  • 可以改变一些属性(比如光源的颜色和强度)
  • 但不能改变位置和旋转
  • 是静态和可移动之间的折中选择
  • 适用于需要改变强度的光源,如日光系统
  1. Movable(可移动)
  • 可以完全自由移动和改变
  • 性能消耗最大,因为需要实时计算
  • 适用于角色、车辆等需要移动的物体
  • 使用动态光照

从Unity的角度来理解:

  • Static类似于Unity中勾选了Static选项的物体
  • Movable类似于Unity中没有勾选Static的普通物体
  • Stationary在Unity中没有直接对应,但概念类似于Mixed lighting模式

Physics Asse

在UE中确实也有类似Unity的Rigidbody的功能,它叫做Physics Asset(物理资产),主要通过以下几种方式实现:

  1. 物理模拟组件:
  • Physics Constraint Component (物理约束组件)
  • Physics Handle Component (物理句柄组件)
  • Physics Spring Component (物理弹簧组件)
  1. 主要设置方式:
  • Simulate Physics (模拟物理) - 在Mesh Component中启用
  • 可以设置质量、是否受重力影响等物理属性
  • 可以通过Physical Material设置摩擦力、弹性等

从Unity转过来可以这样理解:

  • Unity的Rigidbody → UE的Simulate Physics
  • Unity的Collider → UE的Collision组件
  • Unity的Physics Material → UE的Physical Material

Geometry和Shapes的区别

UE中的Geometry和Shapes都是用于创建基础3D形状的,但它们的用途和特点不同:

Geometry(几何体):

  • 用于可见的视觉展示
  • 实际会被渲染出来
  • 包含完整的网格数据
  • 常用于临时的视觉原型或简单的游戏物体
  • 默认带有碰撞体积

Shapes(形状):

  • 主要用于碰撞检测
  • 默认是不可见的
  • 比Geometry更轻量
  • 专门用作触发器或碰撞体积
  • 计算性能更好

举个例子:

  • 如果你需要一个可见的立方体作为游戏中的箱子 → 使用Cube Geometry
  • 如果你只需要一个不可见的碰撞区域来触发事件 → 使用Box Shape

Shapes更像是Unity中的Collider组件,而Geometry更像是带有Mesh Filter和Mesh Renderer的基础3D物体。

虚幻引擎的标准目录结构 

虚幻引擎项目的标准目录结构:

Config/

  • 包含引擎和游戏的配置文件
  • 存放输入设置、引擎设置等

Content/

  • 游戏的主要内容文件夹
  • 包含所有资源(模型、材质、蓝图等)
  • 建议在Content下建立良好的子文件夹结构,如:
    • Blueprints/ (蓝图类)
    • Maps/ (关卡文件)
    • Materials/ (材质)
    • Meshes/ (3D模型)
    • Textures/ (贴图)

Source/

  • 包含所有C++源代码
  • 通常包含两个子文件夹:
    • ProjectName/ (项目主要代码)
    • ProjectNameEditor/ (编辑器相关代码)

Saved/

  • 临时生成的文件
  • 包含日志、配置缓存等
  • 通常不需要提交到版本控制

Intermediate/

  • 中间文件目录
  • 存放编译过程的临时文件
  • 不需要提交到版本控制

Binaries/

  • 编译后的二进制文件
  • 包含.exe和.dll文件
  • 通常不需要提交到版本控制

.uproject文件

  • 项目定义文件
  • 包含项目的基本信息和设置

蓝图中的变量

主要功能:

  1. 基础设置部分:
  • 变量命名(Variable Name): 当前设为"delay Time",用于在蓝图中引用这个变量
  • 变量类型: 选择为浮点数(float),适合存储带小数点的数值
  • 可编辑实例: 允许在对象实例上修改该变量的值
  • 私有/公开设置: 控制变量的访问权限
  • 类别(Category): 可以对变量进行分类管理,方便在大型项目中组织变量
  1. 高级设置中的CPF标记:
  • CPF_Edit: 允许在编辑器中修改该变量
  • CPF_BlueprintVisible: 使该变量在蓝图编辑器中可见和可访问
  • CPF_ZeroConstructor: 创建变量时使用零初始化
  • CPF_DisableEditOnInstance: 禁止在实例上修改这个变量
  • CPF_IsPlainOldData: 标记为简单数据类型,可以优化性能
  • CPF_NoDestructor: 不需要析构函数,用于简单类型
  • CPF_HasGetValueTypeHash: 支持哈希值计算,用于容器等数据结构
  1. 配置变量(Config Variable):
  • 允许变量值存储在配置文件中,这样可以在不重新编译的情况下修改值
  1. 临时(Transient):
  • 标记变量为临时的,意味着该变量不会被保存或加载
  • 通常用于运行时临时数据,不需要持久化存储
  1. 保存游戏(SaveGame):
  • 标记该变量可以在保存游戏时被序列化和存储
  • 当玩家加载存档时,这些变量的值会被恢复
  1. 高级显示(Advanced Display):
  • 将变量在属性面板中移到"高级"分类下
  • 用于隐藏不常用的设置,使界面更整洁
  1. 已废弃(Deprecated):
  • 标记变量为已废弃
  • 提醒其他开发者这个变量将在未来版本中移除
  • 通常会在废弃消息中说明替代方案
  1. 废弃消息(Deprecation Message):
  • 当变量被标记为已废弃时,可以在这里输入提示信息
  • 解释为什么废弃以及应该使用什么替代方案
  1. 已定义的属性标记: 这部分显示了所有应用到这个变量的CPF(Core Property Flags)标记,是一个只读的列表,显示当前变量的所有属性标记。

让我用具体的例子解释SaveGame这个选项:

想象你在玩一个RPG游戏:

  • 你的角色等级是50级
  • 背包里有100金币
  • 当前在森林地图

如果这些变量设置了SaveGame标记:

  • 当你点击"保存游戏"时,这些数据会被写入存档文件
  • 当你下次加载游戏时,这些数据会从存档文件中读取出来
  • 你的角色会恢复到:
    • 50级
    • 100金币
    • 森林地图位置

如果没有设置SaveGame标记:

  • 这些数据不会被保存到存档文件中
  • 加载游戏时会使用变量的默认值
  • 比如可能回到:
    • 1级(默认等级)
    • 0金币(默认金币)
    • 起始地图(默认位置)

所以SaveGame标记非常重要,它决定了哪些数据需要在玩家存档中保留。通常用于:

  • 角色属性(等级、生命值、经验值等)
  • 游戏进度(已完成的任务、解锁的成就等)
  • 玩家资源(金币、道具、装备等)
  • 游戏状态(当前位置、剧情阶段等)

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

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

相关文章

cmake - build MS STL project

文章目录 cmake - build MS STL project概述笔记END cmake - build MS STL project 概述 MS在github上开源了VS IDE 用的STL实现。 想看看微软的测试用例中怎么用STL. 想先用CMake编译一个MS STL发布版出来。 笔记 CMake需要3.30以上, 拟采用 cmake-3.30.6-windows-x86_64.…

pyside6,让界面窗口在屏幕中间显示

有一些窗口需要剧中显示,比如登录窗口、消息窗口等。 def center(self):screen QApplication.primaryScreen().geometry()size self.geometry()self.move((screen.width() - size.width()) // 2,(screen.height() - size.height()) // 2) 首先,通过 “…

MCU 和 PSK

在加密和认证领域,MCU 和 PSK 是两个不同的概念,分别涉及硬件和密钥管理。下面是它们的含义和相关解释: 1. MCU 全称:Microcontroller Unit(微控制单元) 用途: MCU 是一种集成了 CPU、内存&am…

微信小程序之历史上的今天

微信小程序之历史上的今天 需求描述 今天我们再来做一个小程序,主要是搜索历史上的今天发生了哪些大事,结果如下 当天的历史事件或者根据事件选择的历史事件的列表: 点击某个详细的历史事件以后看到详细信息: API申请和小程序…

错误修改系列---基于RNN模型的心脏病预测(pytorch实现)

前言 前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方 一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病…

vue.js+vite搭建一个简单的新春祈福活动网站

vue.jsvite搭建一个简单的新春祈福活动网站&#xff01;使用canvas技术&#xff0c;绘制视觉特效。 功能有&#xff1a;燃放烟花&#xff0c;和撞钟祈福。祈福撞钟我设计了是按钮事件&#xff0c;播放一个mp4动画&#xff0c;配上播放一段撞钟的生效文件mp3. <template>&…

vue3Class 与 Style 绑定

绑定 HTML class 1. 绑定对象 <div :class"{ active: isActive }"></div><divclass"static":class"{ active: isActive, text-danger: hasError }" ></div> //<div class"static active"></div>…

在 Ubuntu 下通过 Docker 部署 MySQL 服务器

引言 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用及其依赖打包成一个标准化的单元。MySQL 是一个广泛使用的关系型数据库管理系统&#xff0c;因其高性能、可靠性和易用性&#xff0c;成为许多应用的首选数据库。结合 Docker 和 MySQL&#xff0c;可以轻松地创…

有机物谱图信息的速查技巧有哪些?

谱图信息是化学家解读分子世界的“语言”&#xff0c;它们在化学研究的各个领域都发挥着不可或缺的作用。它们是理解和确定分子结构的关键&#xff0c;对化学家来说极为重要&#xff0c;每一种谱学技术都提供了不同的视角来观察分子&#xff0c;从而揭示其独特的化学和物理特性…

C++指针类型的基本理论和使用方式-学习记录

一、指针简概 &#xff08;一&#xff09;指针定义 指针&#xff08;pointer&#xff09;是“指向&#xff08;point to&#xff09;”另外一种类型的复合类型。与引用类似&#xff0c;指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同点。其一&#xff0c;…

视频转码对画质有影响吗?视频融合平台EasyCVR支持哪些转码格式?

视频转码过程是将视频文件从一种编码格式转换为另一种格式的过程&#xff0c;这一过程在现代数字媒体中扮演着至关重要的角色。众所周知&#xff0c;视频转码不仅仅是简单的格式转换&#xff0c;它涉及多个关键参数的改变&#xff0c;例如视频编码格式、比特率、分辨率以及帧率…

微信小程序防止重复点击事件

直接写在app.wpy里面&#xff0c;全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…

STM32-WWDG/IWDG看门狗

WWDG/IWDG一旦开启不能关闭&#xff0c;可通过选项字节在上电时启动硬件看门狗&#xff0c;看门狗计数只能写入不能读取。看门狗启用时&#xff0c;T6bit必须置1&#xff0c;防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗&#xff08;重置计数器&#xff0c;…

【计算机网络】什么是AC和AP?

在现代的无线网络中&#xff0c;AC&#xff08;Access Controller&#xff0c;接入控制器&#xff09;和AP&#xff08;Access Point&#xff0c;无线接入点&#xff09;是两个至关重要的设备&#xff0c;它们在网络的管理、连接和优化中扮演着重要角色。理解它们的功能和区别&…

C++初阶—CC++内存管理

第一章&#xff1a;C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(si…

排序的本质、数据类型及算法选择

排序的本质、数据类型及算法选择 一、排序的本质二、排序的数据类型三、排序算法的选择依据 前两天老金写了篇 “十大排序简介”&#xff0c;有点意犹未尽&#xff0c;这一回老金想把排序连根拔起&#xff0c;从排序的本质说道说道。 一、排序的本质 从字面上理解&#xff0c…

arcgisPro加载天地图(CGCS2000)影像

1、注册天地图账号&#xff1b; 2、申请key&#xff1b; 3、添加WMTS服务器。 这里已经办好了前两步&#xff0c;下面详细介绍最后一步。 添加WMTS服务器。 在天地图网站&#xff0c;找到如下页面&#xff0c; 复制网址&#xff0c;如&#xff1a;http://t0.tianditu.gov.cn…

【测试】持续集成CI/CD

近期更新完毕&#xff0c;建议关注收藏点赞&#xff5e; 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…

Three.js 性能优化:打造流畅高效的3D应用

文章目录 前言一、减少几何体复杂度&#xff08;Reduce Geometry Complexity&#xff09;二、合并几何体&#xff08;Merge Geometries&#xff09;三、使用缓冲区几何体&#xff08;Use BufferGeometries&#xff09;四、纹理压缩与管理&#xff08;Texture Compression and M…