2:瞧,这是UE4 C++

  紧接着上面学到的指针和域名空间我们继续逛Unreal 4 wiki。

  1.怪形 T

  在自己很早学习编程的时候看到过匈牙利表示法,记得是微软的开发者Charles提出来的,尽管看起来很美好但是从来没有遵循过。

  其实那些前缀T就是这回道理。UE4 有自己的定义类,所以我们的标题不叫C++学习。

  TArray

  TSharedRef

  TWeakPtr

  TArray

  之类,带前缀T表示Template class,前缀能让你轻易地区分变量名。

  UE4中的T前缀变量应该让你想起两件东西

  ①一种游戏类型

  ②一种变量类型

  当然UE4中还有T,F,U,A,I等前缀去这里看Epic‘s Naming Conventions

  

  2.你的痛:指针

  伙计,*和&到底是什么东西?怎么用?着实让我头大:S

  这也是新手学习C++最难得地方了吧,但是一旦你掌握了指针你将会快乐的编写UE4 C++了

  总的来说指针既强大又危险,指针需要你成为一位勤勉的人,与之换来的将赋予你速度和力量。对,就像葵花宝典一样。你得有挥刀的决心XD

  

  ①一个指针必须指向一个数据存储的存储地址

  ②为了获取地址你就得使用&

  FVector Location=FVector(1,2,9000);

  FVector* LocationPtr;

  LocationPtr=&Location;

  ③访问数据前,永远检测你的指针

  Check(LocationPtr);

  或者

  if(!LocationPtr)return;

  你必须这样做,因为你永远不知道什么时候指针中存储的值是有效的

  你可以重定向

  Fvector NewVector=FVector::ZeroVector;

  if(LocationPtr)

  {

    NewVector=*LocationPtr;   //重定向指针
  }

  if(!LocationPtr)return;

  const float XValue=LocationPtr->X;

  3.总结:为什么使用指针?

  有很多人喜欢看总结篇,因为貌似总结篇很能讲一些道理,这次我们也不例外:)

  ①指针能让你获取地址,试想一下你当前在编写context,但是要访问一个不是这个context的变量,地址能给你很快的传回

  ②指针还能让你获取大量的数据,从而避免还得创建复制这一类型

  ③指针给你一种活链接,无论你的数值怎么变化,指针都无需更新因为它仅仅是一个指向。就像超级链接一样,你尽管修改自己的网页,URL给我~

  

  Example:我们来获取一个超级超级远的数据

  假设你有一个角色类,他是众多银河,子星系的星球的一部分,我们仅仅是要获取他的盔甲,估计你会这样作:

  GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor();

  上边的访问是不是看起来都很废?虽然能解决问题

  

  如果只做一次指针指代能好一点?

  FArmorStruct* TheArmor=& GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor();

  既然做了一次指代你就不需要再写下面的代码了:

GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor().Durability;
GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor().Color;
GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor().Size;  瞧,为了偷懒我都直接复制过来了。  这样不仅难读,同时又浪费CPU时间  然后你会这样写  if(!TheArmor) return;   //永远检测指针TheArmor->Durability;TheArmor->Color;TheArmor->Size;

  上述使用了指针,你或许会问,为什么我不是用FArmorStruct ArmorVar=
GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor();

  而是使用指针?  假设一下,若果有众多数据你将会进行大量的赋值拷贝。我在写iCLoud的时候因为不能将多object直接传送到云端谢了大量代码变量抄写,这可真的非常痛苦。除此之外这些数据就写在一片连续的内存中。  第二点是,你将会失去前面说的链接功能,本地的变量修改了,你的指针完全能抄写回来,因为他是一种链接记着吗

  

  

时间: 2024-12-21 14:49:37

2:瞧,这是UE4 C++的相关文章

3.瞧,这就是UE4 C++

1.虚幻中的类前缀你会见到U,A,F,以下就是很好的罗列其中的意义 U: UObject继承过来的,例如UTexture A: AActor继承过来的,例如AGameMode F: 其他的类和结构,例如FName, FVector T:模板,例如TArray,TMap,TQueue I: 接口类,ITransaction E:枚举, ESelectionMode B: Boolean, bEnabled 2.区分大小写! 用宏定义来包裹C++代码 UCLASS 来包裹类 USTRUCT 包裹结构

Develop Your 3D Engine

机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能只通过阅读来掌握机器学习的技能,需要进行大量的练习.本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤.通过本文将学到: 端到端地预测(分类与回归)模型的项目结构. 如何将前面学到的内容引入到项目中. 如何通过这个项目模板来得到一个高准确度的模板. 夷床痘排怂潮偻琳新部久按判匈倥岗哺

美驻华使馆:因拨款问题 社交媒体将不会定期更新

打定主意既然睡了一个白天那么晚上继续奋斗吧反正王者归来的比赛在明天的下午一点才会举行就算是熬了通宵到那个时候起床也不是什么问题稻花香眼睛里满是决绝她喃喃道我不是帮雪月我只是在帮书生哥哥我不允许你们欺负他 稻花香点头怯生生道我知道林傲说过一枚普通的建帮令在以后的游戏里大概价值一万元左右但是第一枚建帮令的意义却非比寻常价值绝对会在一百万元以上因为第一个建立的行会往往就是最强的行会 操有种亮出来少吓唬人了老子是吓大的当然你以为我那么容易就能对付过去切想得美嗯随你们我都可以冲天炎龙的火光之中七星灯立刻被

1:瞧,这是UE4 C++

在Unreal Wiki上有一系列进入UE4 C++的文章,其中有一个专题非常有用.标题也很有意思.我们开始UE4 C++之路吧 1.那么怎么入手学习UE4 C++呢? 以前我们都是从PlayerController,pawn,Camera开始虚幻之路的,方法其实是传承下来的Wiki建议大家从PlayerController或是Blueprint扩展开始. ①Hello怎么world呢? ClientMessage("Hello world!"); 很简答不是吗 2.搞不清. 和-&g

[工作积累] Tricks with UE4 PerInstanceRandom

最近在用UE4的Instancing, 发现限制很多. Unity有instancing的attribute array (uniform/constant buffer),通过InstanceID来访问每个instance的数据,实现每个实例的不同的参数(通常的一种做法). 然而Unreal没有这样的功能,只有一些instancing的vertex buffer. shader: 1 #if USE_INSTANCING && !USE_INSTANCING_EMULATED 2 flo

中国VR人才需求占全球18%排名第二,UE4技术美术人才万金难求

虚拟现实持续火爆,行业市场规模也随之水涨船高,未来医疗.娱乐.房地产.教育.旅游等领域还将继续拓展VR技术的应用.资本的入局和技术的发展已经相对稳定,VR行业必将迎来更为迅猛的发展阶段. VR在中国的快速发展有目共睹,短短两年时间已经形成了较为完善的产业链,令人惊叹.而与产业链的快速发展形成鲜明对比的,却是人才的远远落后.近期,全球最大的职场社交平台领英针对全球VR人才进行了一次全面扫描.数据显示,美国VR人才占全球40%,需求占比48%,而中国人才仅为2%,需求却占全球18%,人才短缺现象十分

ue4 c++ 接口

使用UE4接口比起普通的高级语言,要多做很多工作,是因为要兼容蓝图的使用,有一些小坑需要注意,开始吧. 1.新建接口类 打开UE4编辑器,与往常一样,新建C++类,然后选择Object继承,然后取名字,这里我使用工作中我的接口名,作为例子说明,"ITrackTeam" 然后修改继承的类,而且你没有看错,就是写2个class,一个叫UTrackTeam,一个叫ITrackTeam,类名和头文件名可以不一样的,我这边命名没有遵守虚幻的规则,本来应该命名为"UITrackTeam&

ue4 SNew背后的逻辑

ue4的ui库Slate体系非常庞大,即使是在创建对象这一小事上,也是相当复杂: SLATECORE_API TSharedRef<SWidget> SNullWidget::NullWidget = SNew(SNullWidgetContent).Visibility(EVisibility::Hidden); 所有SWidget体系内的对象,都要用SNew这个宏来创建,它的内容是: #define SNew( WidgetType, ... ) \ MakeTDecl<Widget

Ue4的GitHUB版本版本管理探索

GitHUB是学生党或者业余爱好者不错的选择,如果大家都处在一个局域网一下还是推荐用SVN,毕竟GitHUB的私有仓库要钱,而且网速难以忍受. 首先说一下:Ue4 4.10 默认生成一下文件与文件夹 文件夹 .vs        备用工程文件 config        游戏设置,一些内部属性 content        游戏资源 Intermediate     缓存文件 Source                C++代码文件 文件 Ue4工程文件 Vs工程文件 首先说一下Ue4的版本管