UE4学习笔记

1.UE4概述

UE4,全称为Unreal Engine 4,是由Epic Games开发的一款游戏引擎。该引擎被广泛应用于游戏开发、虚拟现实(VR)和增强现实(AR)应用程序,以及影视制作、建筑可视化、虚拟培训等领域。UE4提供了丰富的功能和工具,包括场景编辑器、材质编辑器、动画编辑器、蓝图系统、物理引擎等,使开发者能够创建高质量、逼真的游戏体验。

UE4的特点包括:

  1. 易上手:UE4具有直观的用户界面和易于理解的工作流程,使得初学者也能快速上手。
  2. 免费与开源:UE4提供了免费的版本,并且支持开源,这意味着开发者可以免费使用并修改引擎的代码。
  3. 多领域实用性:UE4不仅适用于游戏开发,还广泛应用于影视动画、虚拟演播、建筑设计、室内设计、三维仿真城市建设等领域。
  4. 强大的内置工具与插件:UE4自带了许多实用的工具和插件,如实时渲染、粒子系统、动画系统等,可以大大提高开发效率。
  5. 良好的开发者社区:UE4拥有庞大的开发者社区,开发者可以在社区中交流经验、分享技巧,并获得技术支持。

自2012年首次展示以来,UE4经过不断的发展和完善,已经成为了一款功能强大的游戏开发引擎。它支持多平台开发,包括PC、主机、移动设备等,并且支持多种编程语言,如C++、蓝图等。此外,UE4还提供了丰富的资源和资产库,包括模型、贴图、音频等,可以帮助开发者快速构建游戏世界。

学习了UE4后,可以从事UE4地编师、UE4开发工程师、UE4引擎开发、UE4游戏开发等工作。例如,UE4开发的游戏有很多,如《堡垒之夜》、《绝地求生》、《虚幻争霸》等。此外,UE4还在影视动画、虚拟演播、建筑设计等领域得到了广泛应用。

为了学习UE4,可以阅读相关的书籍,如《Unreal Engine 4从入门到精通》、《Unreal Engine 4特效设计必修课》等。这些书籍详细介绍了UE4的各种命令和工具的功能与使用方法,以及在项目开发中的具体应用。

2.UE4应用场景有哪些

UE4(Unreal Engine 4)是一款功能强大的游戏引擎,不仅在游戏开发领域有着广泛的应用,还涉足了影视制作、建筑可视化、虚拟现实(VR)和增强现实(AR)等多个领域。以下是UE4的一些主要应用场景:

  1. 游戏开发:UE4是游戏开发领域中的佼佼者,提供了丰富的游戏开发工具和资源,包括图形、音频、人物动画等方面的制作和处理。开发者可以利用UE4轻松实现多种类型的游戏,如3D角色扮演、第一人称射击等。
  2. 影视动画制作:UE4的光线追踪技术和渲染技术使得它在影视动画制作领域有着广泛的应用。通过使用UE4,制作者可以创建逼真的材质、光效结合、现场调制天空、实时灯光渲染等效果,为影视制作带来更加逼真的视觉效果。
  3. 建筑可视化:UE4在建筑行业中也得到了广泛的应用。建筑师可以将建筑模型导入到UE4引擎中进行操作和渲染,实现建筑可视化和空间模拟。这种技术可以帮助客户、投资者和其他相关方更直观地理解和评估建筑设计。
  4. 虚拟现实(VR)和增强现实(AR):UE4提供了AR/VR相关的技术支持,可以将其应用于虚拟现实和增强现实领域,实现沉浸式的互动体验。这种技术可以在游戏、教育、医疗等多个领域中得到应用。
  5. 三维仿真城市建设:UE4的渲染技术和场景搭建功能使得它在三维仿真城市建设领域有着广泛的应用。通过使用UE4,开发者可以创建逼真的城市环境,为城市规划、建筑设计等领域提供有力的支持。
  6. 军事、景观等领域:除了上述领域外,UE4还涉足了军事、景观等领域。在军事领域,UE4可以用于战略演练和模拟;在景观领域,UE4可以创建逼真的自然环境,为景观设计提供有力的支持。

总之,UE4是一个功能强大、应用广泛的游戏引擎软件,主要用于游戏开发、影视动画制作、建筑可视化、虚拟现实和增强现实等领域。随着技术的不断发展和完善,UE4的应用场景也将不断拓展。

3.UE4c#应用举例

UE4(Unreal Engine 4)本身主要是用C++编写的,但UE4也支持使用C#进行某些开发任务,尤其是当涉及到插件或跨语言交互时。下面是一些关于UE4中C#应用的举例:

  1. 插件开发
    • 如果你想为UE4开发一个自定义的插件,并且你熟悉C#,那么你可以使用C#编写该插件的部分或全部代码。这可以通过将C#代码编译为DLL(动态链接库)并在UE4中调用它来实现。
  2. 跨语言交互
    • 在某些情况下,你可能需要将UE4的C++代码与外部的C#代码进行交互。例如,你可能有一个用C#编写的语音识别库,并希望将其集成到UE4项目中。在这种情况下,你可以使用C++/CLI(公共语言基础设施)或P/Invoke等技术来实现C++和C#之间的互操作。
  3. 蓝图系统
    • 虽然蓝图系统本身是用C++编写的,但你可以使用C#来扩展或与其交互。蓝图系统是UE4中一种可视化编程工具,允许开发者在不编写C++代码的情况下创建游戏逻辑。然而,对于更复杂的交互或特定的功能,你可能需要使用C#来编写自定义脚本或插件。
  4. 外部工具
    • 你可以使用C#编写与UE4项目交互的外部工具或应用程序。例如,你可以创建一个C#应用程序来自动化UE4中的某些任务(如导入资产、设置场景参数等)。这可以通过UE4提供的命令行工具或API来实现。
  5. 插件包装
    • 如果你有一个现有的C#库或插件,并且希望将其用于UE4项目,你可能需要将其包装为UE4可以理解的格式。这通常涉及将C#代码编译为DLL,并使用适当的桥接代码或技术来确保UE4可以调用它。
  6. UE4与Unity的交互
    • 虽然UE4和Unity是两个不同的游戏引擎,但你可以使用C#作为它们之间的桥梁。例如,你可以使用C#编写一个中间件层,该层可以接收来自UE4的数据并将其传递给Unity,或者从Unity接收数据并将其传递给UE4。这可以用于实现跨引擎的协作或集成。

请注意,虽然C#可以在UE4项目中发挥重要作用,但UE4的主要开发语言仍然是C++。因此,对于大多数UE4项目来说,熟悉C++仍然是非常重要的。

4.c++UE4画一个立方体

在Unreal Engine 4 (UE4) 中,使用C++来画一个立方体(或更准确地说是创建一个立方体网格并添加到场景中)是一个常见的任务。以下是一个基本的步骤和示例代码,说明如何在UE4中使用C++来创建一个立方体。

步骤

  1. 创建一个新的UE4项目:使用UE4编辑器创建一个新的项目。
  2. 打开C++源代码:在UE4编辑器中,你可以通过“File” -> “Open Visual Studio”来打开与你的项目关联的Visual Studio项目。
  3. 编写C++代码:在Visual Studio中,找到你的游戏逻辑代码(通常是GameModeBasePlayerController或你自定义的类),并添加代码来创建和添加立方体。

示例代码

以下是一个简单的示例,展示如何在UE4的C++代码中创建一个立方体并将其添加到场景中:

// 假设你在一个继承自AActor的类中  
#include "YourActor.h"  
#include "UObject/ConstructorHelpers.h"  
#include "Components/StaticMeshComponent.h"  
#include "Engine/StaticMesh.h"  
  
// ...  
  
// 在你的类的某个函数中(如BeginPlay)  
void AYourActor::BeginPlay()  
{  
    Super::BeginPlay();  
  
    // 创建一个StaticMeshComponent来显示立方体  
    UStaticMeshComponent* cubeComponent = GetComponent<UStaticMeshComponent>();  
    if (!cubeComponent)  
    {  
        // 如果Actor没有StaticMeshComponent,则创建一个  
        cubeComponent = NewObject<UStaticMeshComponent>(this);  
        cubeComponent->SetupAttachment(this->GetRootComponent()); // 附加到根组件  
    }  
  
    // 获取或加载一个立方体网格(这里假设你已经有了一个名为"Cube"的网格)  
    // 注意:在实际项目中,你可能需要从内容浏览器加载网格  
    TSubclassOf<UStaticMesh> cubeMeshClass = StaticLoadClass<UStaticMesh>(NULL, "Cube"); // "Cube"是你的网格资源的名称  
    if (cubeMeshClass != NULL)  
    {  
        UStaticMesh* cubeMesh = cubeMeshClass.LoadObject<UStaticMesh>(NULL, NULL, RF_Public | RF_StandaloneObject);  
        if (cubeMesh)  
        {  
            cubeComponent->SetStaticMesh(cubeMesh); // 设置网格到组件  
            cubeComponent->SetWorldScale3D(FVector(100.f, 100.f, 100.f)); // 设置立方体的大小  
            cubeComponent->SetGenerateOverlapEvents(true); // 如果需要的话,设置重叠事件  
            cubeComponent->CreateRenderState_Concurrent(); // 创建渲染状态  
            cubeComponent->MarkRenderStateDirty(); // 标记渲染状态为脏,以便更新  
        }  
    }  
}  
  
// ...

注意

  • 上面的代码假设你已经在内容浏览器中有一个名为"Cube"的静态网格资源。在实际项目中,你可能需要根据你的项目设置来调整资源名称和加载方式。
  • 如果你还没有立方体网格,你可以使用UE4的Blender或Maya插件来创建一个,然后将其导入到UE4中。
  • 确保你的Actor在场景中可见,并且其位置在相机视图中,以便你可以看到立方体。

5.UE4的开发工具有哪些 

 

UE4(Unreal Engine 4)的开发工具主要包括以下几种:

  1. Visual Studio:这是UE4官方推荐的主要集成开发环境(IDE)。Visual Studio功能强大,为开发者提供了代码编辑、调试、版本控制等一系列开发工具。Visual Studio与UE4的集成度很高,可以方便地访问UE4的API和进行项目管理。
  2. JetBrains Rider:这是一款跨平台的.NET IDE,也支持UE4的开发。Rider提供了智能代码编辑、快速导航、实时错误检查等功能,帮助开发者提高开发效率。
  3. AssetDeveTool:这是一款UE5和UE4的插件工具,支持自动化批量展UV、快速选择功能、自动化批量减面、自动化批量LOD、自动化批量修改查找替换材质等功能,可以大大提高游戏开发的效率。
  4. UE4 LLM工具:这是一款为游戏开发者带来的革命性创新工具,可以即刻调用文心一言能力,开通百度智能云千帆大模型平台服务,自动获取大量免费tokens,为游戏开发提供强大的AI支持。
  5. Editor命令和自定义Commandlet:UE4的编辑器支持使用Editor命令和自定义Commandlet来运行特定的功能或脚本。这允许开发者通过编写自定义的脚本或命令来扩展编辑器的功能,实现更复杂的操作或自动化流程。

此外,UE4还提供了许多其他的工具和资源,如蓝图系统、材质编辑器、粒子系统等,帮助开发者创建高质量的游戏体验。这些工具和功能共同构成了UE4强大的开发环境,使得开发者能够高效地创建出令人惊叹的游戏作品。

6.使用UE4创建一个角色 

在Unreal Engine 4 (UE4) 中使用 C++ 创建一个角色涉及到多个步骤,包括创建 Actor 类、添加组件(如 StaticMeshComponent)、设置物理属性等。以下是一个简化的步骤概述和示例代码,说明如何使用 C++ 在 UE4 中创建一个基本的角色。

步骤概述

  1. 创建 Actor 类
    • 继承自 AActor 或其子类(如 APawn),创建一个新的 Actor 类。
    • 在这个类中,你可以添加自定义的逻辑和变量。
  2. 添加组件
    • 使用 CreateDefaultSubobject 或 GetComponent 方法为你的 Actor 添加必要的组件,如 UStaticMeshComponent(用于显示3D模型)。
  3. 设置角色属性
    • 设置角色的物理属性,如碰撞、移动方式等。
    • 如果需要,可以添加动画组件(如 USkeletalMeshComponent)和动画状态机。
  4. 初始化角色
    • 在 BeginPlay 或其他适当的生命周期函数中初始化角色的状态。
  5. 控制角色
    • 实现输入处理逻辑来控制角色的移动和动作。
    • 可以使用蓝图或 C++ 代码来处理输入。

示例代码

以下是一个简单的示例,展示如何在 C++ 中创建一个具有静态网格组件的 Actor:

 
// Player.h  
#pragma once  
  
#include "CoreMinimal.h"  
#include "GameFramework/Pawn.h"  
#include "Components/CapsuleComponent.h"  
#include "Components/InputComponent.h"  
#include "Components/StaticMeshComponent.h"  
  
class APlayer : public APawn  
{  
    GENERATED_BODY()  
  
public:  
    // Sets default values for this pawn's properties  
    APlayer();  
  
    // Called when the game starts or when spawned  
    virtual void BeginPlay() override;  
  
    // Called to bind functionality to input  
    virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;  
  
    // Handlers for input  
    void MoveForward(float Value);  
    void MoveRight(float Value);  
    // ... Add more input handlers for other actions like shooting, jumping, etc.  
  
protected:  
    // Called for bound keys when they are pressed  
    void OnFirePressed();  
  
    // Components  
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")  
    UStaticMeshComponent* MeshComponent;  
  
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")  
    UCapsuleComponent* CapsuleComponent;  
  
    // ... Add more components if needed (e.g., for animations, weapons, etc.)  
};

注意

  • 在上面的示例中,你需要将 "PathToYourMesh" 替换为你的3D模型的实际路径。
  • 你还需要加载和设置模型的材质、碰撞等属性。
  • 如果你想要让角色动起来,你需要在 Tick 函数中添加移动逻辑,或者使用蓝图来处理输入和移动。
  • 对于更复杂的角色(如带有骨骼动画的角色),你可能需要使用 USkeletalMeshComponent 而不是 UStaticMeshComponent,并设置动画蓝图或动画状态机。

 7.C++UE4游戏开发举例

 

在Unreal Engine 4 (UE4) 中使用C++进行游戏开发是一个常见的做法,特别是对于需要更高级别控制和优化的项目。以下是一个简化的C++ UE4游戏开发示例,演示了如何创建一个基本的角色(Player)类,并添加一些基本的功能,如移动和射击。

1. 创建新的Actor类(Player)

首先,你需要创建一个新的C++类,继承自AActor或其子类(例如APawnACharacter,如果你使用的是UE4的Character模板)。

// Player.h  
#pragma once  
  
#include "CoreMinimal.h"  
#include "GameFramework/Pawn.h"  
#include "Components/CapsuleComponent.h"  
#include "Components/InputComponent.h"  
#include "Components/StaticMeshComponent.h"  
  
class APlayer : public APawn  
{  
    GENERATED_BODY()  
  
public:  
    // Sets default values for this pawn's properties  
    APlayer();  
  
    // Called when the game starts or when spawned  
    virtual void BeginPlay() override;  
  
    // Called to bind functionality to input  
    virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;  
  
    // Handlers for input  
    void MoveForward(float Value);  
    void MoveRight(float Value);  
    // ... Add more input handlers for other actions like shooting, jumping, etc.  
  
protected:  
    // Called for bound keys when they are pressed  
    void OnFirePressed();  
  
    // Components  
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")  
    UStaticMeshComponent* MeshComponent;  
  
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")  
    UCapsuleComponent* CapsuleComponent;  
  
    // ... Add more components if needed (e.g., for animations, weapons, etc.)  
};

 

2. 实现Player类

.cpp文件中实现APlayer类的函数。

// Player.cpp  
#include "Player.h"  
  
// Sets default values  
APlayer::APlayer()  
{  
    // Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.  
    PrimaryActorTick.bCanEverTick = true;  
  
    // Create mesh and collision components  
    MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));  
    CapsuleComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent"));  
  
    // ... Initialize other components here  
}  
  
// Called when the game starts or when spawned  
void APlayer::BeginPlay()  
{  
    Super::BeginPlay();  
    // Initialize player state here  
}  
  
// Called to bind functionality to input  
void APlayer::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)  
{  
    Super::SetupPlayerInputComponent(PlayerInputComponent);  
  
    // Bind axis movements to SetAxisValue on the movement component  
    PlayerInputComponent->BindAxis("MoveForward", this, &APlayer::MoveForward);  
    PlayerInputComponent->BindAxis("MoveRight", this, &APlayer::MoveRight);  
  
    // Bind actions to functions on this pawn  
    PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &APlayer::OnFirePressed);  
    // ... Bind more actions here  
}  
  
// Called for bound keys when they are pressed  
void APlayer::OnFirePressed()  
{  
    // Implement firing logic here  
    // For example, spawn a projectile at the player's position  
}  
  
// Handlers for input  
void APlayer::MoveForward(float Value)  
{  
    // Use the value to move the pawn forward/backward  
    // You might have a movement component to handle this  
}  
  
void APlayer::MoveRight(float Value)  
{  
    // Use the value to move the pawn left/right  
    // ...  
}  
  
// ... Implement other functions and handlers here

3. 在游戏中使用Player类

在UE4编辑器中,你需要创建一个蓝图或C++派生类来实例化APlayer类,并将其添加到场景中。你也可以通过蓝图或C++代码来控制角色的行为。

4. 注意事项

  • 确保你已经正确设置了项目的构建路径和依赖项,以便能够编译和运行C++代码。
  • 在UE4中,许多常见的游戏逻辑(如移动、射击等)可以通过蓝图系统来实现,而无需编写C++代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow的学习

0.基础概念 术语表&#xff1a; https://developers.google.cn/machine-learning/glossary?hlzh-cn#logits 1.快速入门 https://tensorflow.google.cn/tutorials/quickstart/beginner?hlzh-cn 2.基于Keras进行图像分类 https://tensorflow.google.cn/tutorials/keras/cl…

哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

roscore启动报错的解决方法【将环境变量配置于最后】

今天在启动rviz时发生一个很奇怪的报错&#xff1a; rviz: error while loading shared libraries: librviz.so: cannot open shared object file: No such file or directory 我感觉很纳闷&#xff01;再试着启动一下roscore&#xff0c;发现如下报错&#xff1a; [rosout-1…

代码随想录——填充每个节点的下一个右侧节点指针 II(Leetcode117)

题目链接 层序遍历 /* // Definition for a Node. class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val _val;}public Node(int _val, Node _left, Node _right, Node _next) {val _val;left _l…

白话机器学习7:五种降维方法的原理即Python代码实现

一、主成分分析法&#xff08;PCA&#xff09; PCA是一种常用的线性降维技术&#xff0c;它可以将高维数据投影到低维空间&#xff0c;同时保留数据中的主要变异方向。 你可以选择保留的主成分数量&#xff0c;这取决于你的具体应用和数据集。通常&#xff0c;你可以通…

flutter开发实战-JSON和序列化数据

flutter开发实战-JSON和序列化数据 大多数移动应用都需要与 web 服务器通信&#xff0c;同时在某些时候轻松地存储结构化数据。当创造需要网络连接的应用时&#xff0c;它迟早需要处理一些常见的 JSON。使用Json时候&#xff0c;可以使用json_serializable 一、引入json_anno…

安泰ATA-7015高压放大器在材料极化中的应用研究

材料极化是材料科学中一个重要的研究领域&#xff0c;它涉及到材料内部电荷和极化性质的调控和分析。高压放大器在材料极化研究中起着至关重要的作用&#xff0c;通过提供高压力和高电场条件&#xff0c;研究人员可以深入探讨材料的电子结构、相变行为以及许多其他关键性质。 材…

监控 Apache Web 服务器性能指标

Apache Web 服务器以其可靠性、灵活性和强大的功能而闻名&#xff0c;几十年来一直是互联网的支柱&#xff0c;从小型个人博客到大型电子商务平台&#xff0c;Apache 的多功能性使其能够轻松处理各种 Web 应用程序。 Apache 的 Web 服务器是如何工作的 尽管 Web 服务器涉及复…

【PB案例学习笔记】-03用户名密码校验

写在前面 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git 需要源代码的小伙伴们可以自行…

企业OA办公系统开发笔记:1、搭建后端环境

文章目录 企业办公系统&#xff1a;搭建环境一、项目介绍1、介绍2、技术栈3、项目模块4、数据库 二、搭建环境1、搭建后端1.1、搭建父工程clfwzx-oa-parent1.2、搭建工具类父模块common1.3、搭建工具类common的子模块1.4、搭建实体类模块model和项目模块service-oa 2、配置依赖…

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 AB路线

//bfs 1000100010不会超时 #include<bits/stdc.h> using namespace std; #define int long long const int n1e311; int a,b,c,h[n][n][12],k[4][2]{0,1,0,-1,1,0,-1,0}; char t[n][n]; struct s {int x,y,z,w; }; signed main() {ios::sync_with_stdio(false);cin.t…

ASP.NET在线毕业论文提交系统的设计与实现

摘 要 本设计就很好的解决了上面的问题&#xff0c;它不但能实现毕业生论文的在线提交&#xff1b;还能给教师一定的权限&#xff0c;以在线的方式对自己指导的学生的论文进行审核&#xff1b;并且管理员还可以方便的将每个学生的论文信息按统一的论文排版本格式导出成word文…

Qt---TCP文件传输服务器

文件传输流程&#xff1a; 服务器端&#xff1a; serverwidget.ui serverwidget.h #ifndef SERVERWIDGET_H #define SERVERWIDGET_H#include <QWidget> #include<QTcpServer>//监听套接字 #include<QTcpSocket>//通信套接字 #include<QFile> #includ…

线上虚拟展厅需要具备哪些技术特点?

虚拟展厅需要具备三维建模与渲染技术、虚拟现实技术、交互技术、多媒体展示技术、网络传输技术、大数据分析与反馈技术、跨平台兼容性等技术特点。这些技术特点共同构成了虚拟展厅的核心竞争力&#xff0c;使其能够为用户提供逼真、生动、互动的参观体验。 虚拟展厅的技术特点主…

17.高并发场景下CAS效率的优化

文章目录 高并发场景下CAS效率的优化1.空间换时间&#xff08;LongAdder&#xff09;2.对比LongAdder和AtomicLong执行效率2.1.AtmoictLong2.2.LongAdder2.3.比对 3.LongAdder原理3.1.基类Striped64内部的三个重要成员3.2.LongAdder.add()方法3.3.LongAdder中longAccumulate()方…

【网络安全】【Frida实战案例】某图xx付费功能逆向分析(一)

文章目录 一、目标应用二、环境三、步骤1、查看布局id2、用到的Log日志类信息3、尝试hook VIP判断方法 四、总结五、相关源码 1、【网络安全】【Frida实践案例】某图xx付费功能逆向分析&#xff08;一&#xff09; 2、【网络安全】【Frida实践案例】某图xx付费功能逆向分析&…

MySQL基础--SQL优化

插入数据 insert 优化 批量插入 手动提交事务 主键顺序插入 大批量插入数据 如果一次性需要大批量插入数据&#xff0c;使用 insert 语句插入性能较低&#xff0c;此时可以使用 MySQL 数据库提供的 load 指令插入&#xff0c;操作如下&#xff1a; 主键优化 在 InnoDB 存储引擎…

QT:QML与C++交互

目录 一.介绍 二.pro文件添加模块 三.h文件 四.cpp文件 五.注册 六.调用 七.展示效果 八.代码 1.qmlandc.h 2.qmlandc.cpp 3.main.cpp 4.qml 一.介绍 在 Qt 中&#xff0c;QML 与 C 交互是非常重要的&#xff0c;因为它允许开发人员充分利用 QML 和 C 各自的优势&…

软考--试题六--策略模式(Strategy)

策略模式(strategy) 意图 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化 结构 适用性 1、许多相关的类仅仅是行为有异。“策略”提供了一种多个行为中的一个行为来配置一个类的方法…

虚拟化技术 使用vSphere Web Client管理ESXi主机

一、实验内容 通过vSphere Web Client将ESXi主机连接到iSCSI共享存储通过vSphere Web Client&#xff0c;使用共享存储创建虚拟机并安装windows 2008 R2操作系统通过vSphere Web Client&#xff0c;为虚拟机创建快照 二、、实验主要仪器设备及材料 安装有64位Windows操作系统…