在ue方面笔者完全是个萌新,糕糕前辈在我进入某大佬群时主动加了我的好友(现在想来感动的能哭出声)
在我学习ue时不吝赐教,为我提供了许多资料,语气也十分的和蔼温柔
每次遇到什么问题发消息几乎都是秒回,解答了我的许多疑惑(我哭死)
这篇博客会做成一个对话的专栏形式,会记录一些前期学习遇到的疑问
不会有固定的大纲,记录的风格是诙谐轻松的(顺利的话会一直写下去?)
最重要的是这些遇到并得到解答的问题我不希望今天获取然后明天就失忆了
这些知识对初学者应该是很有帮助的(确信),所以我很乐意记录这样一个快乐的过程
这次笔者会记录在学校学习的第二周和糕糕前辈发生的有趣的对话
第一幕 3.1
四月:糕糕你之前发我的那个有关assert的文章还在吗,哦对了说起来断言算是c++的机制还是算是ue的机制呢
糕糕:是ue的机制,你也可以自己写,不过就不叫断言了。你知道断言为什么叫断言吗。
四月:会引发一个中断!(确信)
糕糕:没错,断言的意思差不多就类似中断的文字版。
第二幕 3.2
四月:糕糕,元数据metadata是什么
糕糕:元数据是用来描述数据的数据,https://www.ruanyifeng.com/blog/2007/03/metadata.html
四月:这样,那ue的元数据是什么,文件大小时间那些的吗
糕糕:UE的UProperty有Meta标签,不过可以自己加,只能editor识别。或者说这个所谓的描述其实没有固定添加的地方
只是看你的程序对他处不处理。
四月:噢噢正是这样所以UE editor能把这些当成资产来使用,这就是元数据
第三幕 3.2
四月:自带的FPS模板写了一堆前向声明诶
糕糕:C++ 必须写这个,必须能不用#include就不用
四月:噢噢原来是这样,我之前都是都是#include
糕糕:#include的话 其中某个头文件改了,链式增加编译数量,而且会有重叠引用的问题
四月:之前demo就遇到过,就武器类引用了我的角色,角色类也引用我的武器,然后乱糟糟的,可能哪边不小心改错了就过不去编译。
糕糕:还有这个前置声明,我推荐在头文件里写在要用的地方,而不是写在最上面,方便复制片段代码
还有个事,struct不能前置声明
四月:所以class和struct的区别又多了一个,那我怎么天天看到它们只有一个public一个private的区别
糕糕:其实是UE里不能这样
四月:可恶啊
糕糕:因为UE的struct只能放到栈里构造,而class只能在堆里构造,UE的uclass 创建变量的时候只能用 指针,ustruct只识别非指针
所以ustruct,在头文件里构造这个类的时候就要明确要多少内存,所以就得在这里include进来了。
而class在构造这个类的时候是用的指针,固定大小的,所以可以前置声明。
四月:呜呜呜糕糕真是好老师
糕糕:所以可恶的C++,现在我学ts就完全好多了
第四幕 3.2
四月:UgameplayStatic::里面有什么常用的api吗
糕糕:看源码,基本上都是常用Api吧。但实际项目中,最好自己写个类似的库
四月:我自己实现一遍吗
糕糕:嗯嗯,因为他get出来的是UE原来的类型,要cast一下
比如最常用的这个,正经项目你肯定会自己写个Gamemode吧,你每次都要cast一下
直接对自己的gamemode写个static get自己的实例算了 反正是单例。
四月:避免cast是为什么呢,性能开销太大了吗
糕糕:嗯,损耗很大。
写个单例大概像这样的
四月:单例不是考虑到线程安全会有什么懒汉式还有其他的吗
糕糕:Gamemode的生命周期不用自己管理,所以我们只用存他的指针返回他的指针就是了
四月:所以引擎会帮我们解决对吗
糕糕:嗯嗯对的,这样只有第一次有cast损耗,后面放tick里也没啥问题了
小插曲
四月:我想玩那个车车游戏
糕糕:base.apk
四月:这车真的很难开,为什么你漂移还能炸对手
糕糕:游戏开发者一般是技术最好的吧,其实一般来说是策划,但这移动算法都是我写的
四月:里面的按钮居然都点不了!只有广告是可以点的,老板估计很开心
糕糕:说起来 你想去大厂的话,一定要想办法转正或者毕业就直接去大厂,不然工作几年之后很难的
我这边的tx基本上只招资深的普通的和高级的基本上都是从实习生就在Tx的
四月:我当然知道啦,所以转正我特别重视,毕竟现在版号不发了,是游戏圈的紧要关头,可能没转正成功我就回家了。
我打算死磕tx了,毕业拿转正offer之前都不算高枕无忧。
笔者写这些的时候,又听到了一些所谓“小道消息”,说春招的hc被卡了很多,即使自己不需要春招已经上岸
但还是感觉到了不小的压力,也为整个中国游戏行业的未来狠狠的捏了一把汗。
再说下去要emo了,这样可不行,人还是得开开心心的,毕竟我又是月亮又是太阳!