UE 5.3.2 知识记录
这里记载了UE中常用的知识和编码笔记。
C++ 编码
Exposing C++ inherited vars \& funcs to Blueprint
Template Function
Components in C++
Pawn class in C++
Unreal Engine Blueprint
Target Effects
Damped Effect
Circular Movements
UE Basic Knowledge
HEADS UP!
Components
Unreal Property System (Reflection System)
UE Self-study resources 自学资料
C++ 编码Exposing C++ inherited vars & funcs to BlueprintExposing Variable to Blueprint using UPROPERTY(), 这样可以在编辑器中更快地在蓝图中修改调试。12345678910111213141516171819class SWORDSLA ...
UE 5.3.2 错误解决合集
在跟随Udemy课程《Unreal Engine 5 C++ The Ultimate Game Developer Course》的过程中,碰到了各种因为UE本身或者版本问题导致即使步骤一致,但执行一直出错的情况,遂列举出来,希望对同样碰到这些问题的伙伴有所帮助。
Tick 失效每帧无改变
Build报错function override error
Tick 失效每帧无改变在课程中原本代码为PrimaryActorTick.bCanEverTick = true;但这个并没用,即使更改了 void AItem::Tick(float DeltaTime)函数,里面的内容在UE运行后没有任何显示。应该更改的是bStartWithTickEnabled参数:12345678910111213141516AItem::AItem(){ // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. / ...
AI论文阅读记录
AI论文记录
Thread的join函数方法
当在多线程任务中,你需要等待一个线程结束后再进行操作,就可以用thread.joinable()来确保它正在运行,同时用thread.join()来等待线程结束并清理它的资源(这个会block跑这个函数的进程/线程,在这里就是会block这个stopThread函数的进程/线程),例子如下:12345678910#include <thread>int stopThread(){ // assume threre is a running thread threadA if (threadA.joinable()) // check if threadA is running { threadA.join(); // join threadA. It waits and blocks the calling thread and waits until threadA finishes. It will also clear all the resourses used by threadA in the end. ...
5.3.2 UE build报错
在升级完Unreal Engine到版本5.3.2之后,发现即使用UE自带的空Actor Class进行编译都有俩项如下报错:123========== Build: 46 succeeded, 2 failed, 0 up-to-date, 1 skipped ==========Done building project “BuildGraph.Automation.csproj” – FAILED.Done building project “AutomationScripts.Automation.csproj” – FAILED.
解决办法为修改UE的源文件:
找到安装Unreal Engine Machine的文件夹,我的是D:\App\UnrealEngine Machines\UE_5.3\
到Engine\Source\Programs\AutomationTool\BuildGraph\BgScriptReader.cs中将1640行改为:12 if (users != null)report.NotifyUsers.UnionWith(users);
到Engi ...
DFS和BFS
特征
DFS
BFS
数据结构
stack
queue
储存空间
只用储存一条路的数值,所以跟高度或者路的长度有关 O(h),使用空间较少
每次储存一层的数值,所以是指数增长 O(2^h),使用空间较多
常用场景
不具有最短性
因为是一层一层地搜索,所以可以最快搜索到最短路径(特别是权重为1的时候)
深度优先搜索 DFS一条路一直搜索下去,然后后退。
题目例子:排列数字
给一个数n,将1~n排成一排,按字典顺序输出所有的排列方法。
12345678Input: 3Output:1 2 31 3 22 1 32 3 13 1 23 2 1
DFS代码:123456789101112131415161718192021222324252627282930313233343536373839#include <iostream>#include <vector>using namespace std;const int N = 10;int n;int path[N];bool used[N];void dfs(int level) ...
C++面试准备
这里是自己搜罗准备的C++面试八股文常用题目,持续更新。
Static关键字作用
基本概念
静态数据成员
静态成员函数
Extern关键字作用
指针和引用
动态库和静态库的区别
虚函数和纯虚函数的区别
虚函数
纯虚函数
友元的应用
友元函数
友元类
BFS与DFS的实现
BFS Bread-First Search 广度优先搜索
DFS
STL常用容器和算法
List和Set
红黑树
二叉搜索数
HashMap的原理
堆和栈的区别
如何解决死锁
Static关键字作用基本概念
使用目的:
在 C++ 中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。
存放位置
DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
使用 ...
C++常用设计模式
工厂模式(Factory)简单工厂只有一个工厂,即一个类负责创建不同类的实例。通常使用static静态方法来创建对象,不需要传递工厂类来创建实例。
优点:
单一工厂类,实现简单
缺点:
扩展性差,添加新类,新产品时,需要修改工厂类代码
代码实现:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include <iostream>using namespace std;class Car{public: virtual void drive() = 0; // 创建纯虚函数,让每个子类实现 virtual ~Car() {} // 析构虚函数,保证子类析构时能正确调用子类析构函数};class BydCar : public Car{public: void drive() override { cout << " ...
SFML C++ 项目
项目简介
项目Setup
项目代码
项目简介这是一个跟着COMP4300的课程记录制作的项目,因不公开提供代码资料,所以我自己整理了一份方便其他人使用,放在网页上的代码和文档都test过,请放心使用。
这个项目利用SFML来制作一个含有各种图形四处悬动的窗口,示例如下:
要求从config.txt文件中读取窗口大小,生成要求的图形(positionX, positionY, speedX, speedY, r, g, b, (height, width) or radius),图形需要根据自身的速度在窗口中移动,当碰到边框时进行反弹(速度变成相反的),图形需要在正中间显示图形名字:12345678Window 1280 720Font fonts/KillerTech.ttf 36 128 128 255Circle CGreen 100 100 -3 2 0 255 0 50Circle CBlue 200 200 2 4 0 0 255 100Circle CPurple 300 300 -2 -1 255 0 255 75Rectangle RRed 200 200 4 4 ...
函数指针
函数指针是指向函数的指针,跟指向变量的指针没差。
函数的一个属性就是其地址指明了函数体在内存中的位置,在调用函数时,系统将控制权给这个位置来执行函数。
用一个函数来举例
1234double f(double x){ return 2*x;}
这里,f是指向函数f()的指针,*f()是函数本身, (*f)(7)是调用这个函数并取得值,其本质跟f(7)没有任何差别,只是在大多数编程语言中(包括 C 和 C++),编译器会自动理解f是一个函数指针并进行适当的解引用。
函数指针一般在需要函数作为一个变量的时候起到作用,即函数作为参数传递,如当要求n到m之间用函数f的总和时:12345678double sum(double (*f)(double), int n, int m){ double result = 0; for (int i = n; i <= m ; ++i) result += f(i); return result}
这里,double (*f)(double)是指f为指向一个返回 ...