同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder ConstructorHelpers::FClassFinder 参考 [UE4 C++ 基础知识]<10>资源的引用 LoadObject 一般用来加载资源对象 UMaterial* M_Cube = LoadObject<UMaterial>(nullptr, TEXT("Material'/…
UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文件中函数声明上方的行中.宏将支持 函数说明符 更改UE4解译和使用函数的方式. 可利用函数说明符将UFunction对蓝图可视化脚本图表公开,以便开发者从蓝图资源调用或扩展UFunction,而无需更改C++代码.在类的默认属性中,UFunction可绑定到委托,从而能够执行一些操作(例如将操作与用…
属性声明 属性使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符. UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)]) Type VariableName; 示例:位掩码 UENUM(BlueprintType) enum class EColorBits1 :uint8 { ECB_Red, ECB_Green, ECB_Blue, }; //使用"bitflags…
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的多线程 std::thread 在GameThread线程之外的其他线程中 不要 spawning / modifying / deleting UObjects / AActors 不要使用定时器 TimerManager 不要使用任何绘制接口,例如 DrawDebugLine,然有可能崩溃 如果…
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR* TCharString = TEXT("Hello, World!"); // 引擎字符串(TCHAR*) -> ANSI字符串(char*) char* CharString = TCHAR_TO_ANSI(TCharString); // 引擎字符串(TCHAR*) ->…
概述 简单的说,接口提供一组公共的方法,不同的对象中继承这些方法后可以有不同的具体实现. 任何使用接口的类都必须实现这些接口. 实现解耦 解决多继承的问题 蓝图使用 使用方法 三种调用方法的区别 调用流关卡蓝图的接口函数 C++ 使用接口 本例使用一个Box Trigger 出发overlap 调用 Drone实例的接口 添加接口类 定义接口 声明蓝图可调用接口函数 用UFUNCTION 宏 BlueprintCallable 声明蓝图可调用,还必须使用 BlueprintImplementab…
概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到通知,并进行相关逻辑处理. 委托,又称代理,本质是一个特殊类的对象,它内部可以储存(一个或多个)函数指针.调用参数和返回值. 蓝图示例 声明委托 委托签名声明可存在于全局范围内.命名空间内.甚至类声明内.此类声明可能不在于函数体内 可以是返回一个值的函数. 最多4个"载荷"变量. 最多8个…
概述 TaskGraph 系统是UE4一套抽象的异步任务处理系统 TaskGraph 可以看作一种"基于任务的并行编程"设计思想下的实现 通过TaskGraph ,可以创建任意多线程任务, 异步任务, 序列任务, 并行任务等,并可以指定任务顺序, 设置任务间的依赖, 最终形成一个任务图, 该系统按照设定好的依赖关系来分配任务图中的任务到各个线程中执行, 最终执行完整个任务图. TaskGraph适合简单的任务或者想实现有依赖关系的线程,复杂的任务推荐使用 Runnable 或者 Asy…
概念 AsyncTask AsyncTask 系统是一套基于线程池的异步任务处理系统.每创建一个AsyncTas,都会被加入到线程池中进行执行 AsyncTask 泛指 FAsyncTask 和 FAutoDeleteAsyncTask,一般声明为友元函数,FNonAbandonableTask 派生类作为模板 FNonAbandonableTask 是要继承的基类,不可被终止的任务,可以看作是任务执行体的抽象 FAsyncTask 模板类 DoWork() 实现具体任务,自定义类作为模板参数…
c++中的函数和C语言中的函数相比,增加了许多新的语法与功能.在这里总结一下c++中常用的引用函数,函数重载和内联函数. 1  引用参数 引用参数最常用的一个例子就是 交换 两个数,如下 void swap( int &a, int &b) { int t; t = a; a = b; b = t; } void main() { ; ; swap(f , s); } 这俩个数的值被调换了.是什么原因呢?原来引用参数是利用了别名技术,在进行参数传递时,形式参数作为实际参数的别名绑定于实际参…
枚举 UENUM宏搭配BlueprintType可以将枚举暴露给蓝图,不使用的话,仅能在C++使用 //定义一个原生enum class enum class EMyType { Type1, Type2, Type3, }; UENUM(BlueprintType) enum class ECurrentState : uint8 { Idle UMETA(DisplayName="空闲"), Attack UMETA(DisplayName="攻击"), Rol…
概述 TArray 是UE4中最常用的容器类.其速度快.内存消耗小.安全性高. 其设计时未考虑扩展问题,因此建议在实际操作中勿使用 新建(new) 和 删除(delete) 创建或销毁 TArray 实例 TArray元素为数值类型时,被销毁时其中的元素也将被销毁.若在另一TArray中创建TArray变量,其元素将复制到新变量中,且不会共享状态. 创建 TArray<int32> IntArray; 添加元素 init 填充多个相同值 IntArray.Init(10, 5); //==&g…
概述 TMap主要由两个类型定义(一个键类型和一个值类型),以关联对的形式存储在映射中. 将数据存储为键值对(TPair<KeyType, ValueType>),只将键用于存储和获取 映射有两种类型:TMap 和 TMultiMap TMap 中的键是唯一的 TMultiMap 可存储多个相同的键 TMap 也是值类型,支持通常的复制.赋值和析构函数运算,以及它的元素的强所有权.在映射被销毁时,它的元素都会被销毁.键和值也必须为值类型. TMap 是散列容器,这意味着键类型必须支持 GetT…
2种引用方式 硬引用(Hard Reference) 即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载 硬引用过多会导致运行时很多暂时用不到的资源也被加载到内存中 大量资源会导致进程阻塞,致使程序情动事件过长 用不大的资源也在内存中,会占用内存 软引用(Soft Reference) 即对象 A 通过间接机制(例如字符串形式的对象路径)来引用对象 B 软引用可以减少加载负担,可以缩短程序启动时间 软引用不会主动加载到内存中,在需要时加载,用完释放 蓝图中的资源引用 C++ 中资源…
基本概念 UE4 对 UObject 对象提供垃圾回收 UE4 对原生对象不提供垃圾回收,需要手动进行清理 方式 malloc / free new / delete new与malloc的区别在于,new在分配内存完成之后会调用构造函数. 缺点 如果不及时清理,则会占用内存,或者导致内存泄漏 如果不小心提前清理,则会导致野指针 UE4 提供共享指针库来管理内存,它是C++11智能指针的自定义实现 分类 TSharedPtr UniquePtr TWeakPtr TSharedRef 优点 防止…
python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法)来迭代遍历每个序列中的元素. 返回bool_func结果为true的元素的序列(注意弄清楚序列是什么意思)http://blog.csdn.net/bolike/article/details/19997465序列参考</a> 如果filter参数值为None,list参数中所有为假的元 素都将被…
17.对象 属性:描述对象的信息  方法:描述对象的行为  封装:只关心输入和输出(不管过程如何实现) ü 对象的分类: 内置对象(原生对象): 就是JavaScript语言预定义的对象(如String/Number). 宿主对象: 一般由浏览器环境提供实现,主要分为 BOM 和 DOM. 自定义对象: 就是由开发人员自主创建的对象. ü 对象的创建: Ø 初始化器方式 var 对象名 = {         属性名 : 属性值 ,         方法名 : function( ){方法体} …
总结 1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别. 2). 对数据型(如整型.字符型等).存储类别指的是数据在内存中存储的方式. 存储方式分为两大类: 静态存储类和动态存储类 具体包括四种:{自动的(auto), 静态的(static), 寄存器(register), 外部的(extern)}. 根据变量的存储类别, 可以知道变量的作用域和生存期. 一个程序在编译运行的时候, 普通变量是存放在栈里面的 而static会是的变量存放在data里 整个内存主要分为四大区:…
1.变量的作用域和静态变量 函数的参数以及参数的引用传递 函数的返回值以及引用返回 外部文件的导入 系统内置函数的考察 变量的作用域也称为变量的范围,变量的范围即他定义上下文的背景(也是它生效的范围).大部分php变量只有一生效的范围,这个单独的范围也包括include 和require 引入的文件. global关键字 $GLOBALS 及其他超全局数组 静态变量仅在局部函数域中存在,当程序执行离开扯作用域时,其值不会消失. static关键字 1.仅初始化一次 2.初始化时需要赋值 3.每次…
1常用数据库聚合函数max()min()sum()avg()count() 2字符串处理函数len() 与 datalength()  区别:len是返回字符长度  datalength是返回字节长度LTrim()  RTrim() Trim ()isnull(@FilterStr,N'')如果时空将其替换 charindex(N';', @TmpList)返回字符串中表达式的起始位置而不是indexpaitndex('%ssd%',@temp) 与charindex作用基本类似 substri…
1.列举布尔值为 False 的值 空,None,0, False, '', [], {}, () 2.写函数: 根据范围获取其中 3 和 7 整除的所有数的和,并返回调用者:符合条件的数字个数以及符合条件的数字的总和 如: def func(start,end): def func(start,end,count=0): s=0 for i in range(start,end+1): if i%3==0 and i%7==0: s+=i count+=1 print('总和:%s 个数:%s…
官方地址:https://docs.python.org/3.5/library/functions.html abs(x): 返回数字的绝对值 all(iterable): 如果迭代器的所有元素都为真(或者如果迭代器为空),则返回True. any(iterable): 如果iterable的任何元素为true,则返回True.如果iterable为空,返回False. ascii(object): 返回一个包含对象的可打印表示的字符串 bin(x): 将整数转换为二进制字符串. class …
函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. #include <stdio.h> // 取两个数里最大的数字 int getMaxValue(int, int); int main() { // func就是涵数指针 int (*p)(int, int) = &getMaxValue; // &可省略 , b = , c = , d; d = p(…
自定义函数 变量的作用域和静态变量 变量的作用域:变量的作用域也成为变量的范围,变量的范围即它定义上的上下文背景(也就是它生效的范围). 大部分的PHP变量只有一个单独的范围.这个单独的范围跨度同样包含了include和require引入的文件. global  关键字 $GLOBALS 及其他超全局数组 $outer = 'str'; //全局变量 不能拿到函数体内部使用 function mgfunc() { global $outer; //使用global关键字 可以把外部变量拿到内部使…
概述 TSet是一种快速容器类,(通常)用于在排序不重要的情况下存储唯一元素. TSet 类似于 TMap 和 TMultiMap,但有一个重要区别:TSet 是通过对元素求值的可覆盖函数,使用数据值本身作为键,而不是将数据值与独立的键相关联. TSet 可以非常快速地添加.查找和删除元素(恒定时间).默认情况下,TSet 不支持重复的键,但使用模板参数可激活此行为. TSet 也是值类型,支持常规复制.赋值和析构函数操作,以及其元素较强的所有权.TSet 被销毁时,其元素也将被销毁.键类型也必…
1.sorted():用于字典的排序 dict1={"name":"cch","age":"3","sex":"girl","height":"1.65"} #按key排序 data1=dict(sorted(dict1.items(),key=lambda item:item[0])) print(data1) #按value排序 data2=d…
函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销. 函数宏本质上为宏,可以直接进行定义,例如: #define INT_SWAP(a,b) \ int tmp = a; \ a = b; \ b = tmp 但上述的宏具有一个明显的缺点:当遇到 if.while 等语句且不使用花括号仅调用宏时,实际作用范围在宏的第一个分号后便结束.即 a = b 和 b = tmp 均不受控制语句所作用. 因此,在工程中,一般使用…
Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   同时往数据库表插入一些数据,用户后续对数据库的sql的练习.在这里有需要的可以下载相应的脚本进行数据库的初始化.我放到百度云上面,请戳 我:http://yun.baidu.com/share/link?shareid=3635107613&uk=2971209779,提供了<Sqlserver…
SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2.函数的种类: (1)算术函数 - 数值计算 (2)字符串函数 - 字符串操作 (3)日期函数 - 日期操作 (4)转换函数 - 转换数据类型 (5)聚合函数 - 数据聚合 3.算术函数(加.减.乘.除):+.-.*./ [备注]数据类型 NUMBERIC(全体位数,小数位数)可以指定数值的大小. C…
Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处. https://blog.csdn.net/KEY0323/article/details/78177964 本文为博主在学习Greenplum时阅读的<Greenplum企业应用实战>时的笔记,对书中章节的知识要点进行了归纳和梳理.有兴趣的同学可以找原书学习下.如果认为文中内容涉嫌侵权请及时…