虚幻引擎C++开发学习(一)

文章内容来自于Udemy课程。第一章为设置C++和虚幻环境,直接略过。

第二章内容为一个小游戏,名字叫Triple X,是个简单的数字益智游戏。它基于三个未知数字。你将侵入某种计算机锁。游戏的想法是找到一个有效的三个数字组合。

比如关卡1:3个数字相加为8,相乘为18。

这部分很简单,我们直接略过。

第三章内容为The Bull Cow Project,是一个terminal game, but with unreal,我们从部分开始记录:

一、游戏内容介绍

这是一个猜词游戏,为了使他更加简单,我们想猜测isogram,an isogram is simply any word that doesn't have any repeating letters。它是一个没有重复字母的单词(例如ambidextrously),或者更广泛地说,是一个字母出现相同次数的单词。下面是它的定义:

Isogram - Definition and Examples in Englishhttps://www.thoughtco.com/isogram-word-play-term-1691199

A letter in a guess and in the right place is a bull and a letter in a guess but in the wrong place

is a cow. And of course, if you guess a letter that isn't in our head and word you won't get any bulls or any cows

游戏本身的机制,隐藏的词将从一个词列表中提取出来,游戏会让我们知道我们拥有玩家会猜测的lives。

二、游戏基本设置和基本知识

1、我们下载对应的压缩包文件

会给出警告,关于版本不同的警告,问是否要rebuild,这里选择是就可以了。

其次需要注意的是,我们进入引擎后,需要点击上方的编译,来编译C++代码:

 关于互动,我们需要进入游戏后,按下tab键,这样可以在游戏中的木板上输入对应单词。

这里关于游戏引擎的一些操作介绍,我们就暂时略过,和之前的内容重复较多。

2、关于生成编译器代码

我们可以在偏好设置中,修改是VS还是VS code作为启动:

虚幻引擎C++开发学习(一)_第1张图片

 这样会在文件目录中产生下面这个文件:

 然后我们可以在vs code中打开项目,但是会有如下的报错:

虚幻引擎C++开发学习(一)_第2张图片

 但这是因为课程的版本和我们版本使用不同造成的。我们可以进入下面的链接,下载vsix文件

https://gist.github.com/boocs/f63a4878156295b6e854cac68672f305#Extension-Settings

然后按照文章中步骤进行操作就可以了,别忘了在设置中,选中这两个:

虚幻引擎C++开发学习(一)_第3张图片

 这样的话,现在就没有之前的报错了,我们可以继续进行后续的任务。

3 Actor和组件

Actor 可以被视为一个容器,可以附加许多组件。

我们可以在C++类中,找到我们的组件,可以将它添加到我们的terminal中:

虚幻引擎C++开发学习(一)_第4张图片

关于terminal的解释:

而在这个项目中使用的类比思想是一个老式的终端,你输入两个,它的字符出现在屏幕上,然后游戏以不同的东西响应。

所以这里的想法是,本节中将对这些墨盒(cartridges)之一进行编程,然后从理论上讲,然后将其插入我们的终端。

那么怎么做?

我们首先选中这个终端:

虚幻引擎C++开发学习(一)_第5张图片

 我们可以直接在添加组件中搜索,也可以在列表中拖入:

虚幻引擎C++开发学习(一)_第6张图片

这样我们进入vs code的对应文件中,我们可以添加代码(添加一行输出):

虚幻引擎C++开发学习(一)_第7张图片

 然后我们进入到游戏中的终端,就可以看到输出:

虚幻引擎C++开发学习(一)_第8张图片

在这里需要注意的是,有的时候vs code会进行报错,但是在ue里的编译是正常的。

This declartion has no storage class or type specifier.

注意到OnInput函数中没有语句,我们可以添加ClearScreen(),在输入时清空屏幕。

4、Unreal has its Own c++ type

这一部分主要讲text macro(文本宏)

https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/例如Fstring:

Unreal TEXT FText,FName,FString 浅谈 - 不三周助 - 博客园

也可以看看官方文档字符编码的部分:

https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/CharacterEncoding/https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/CharacterEncoding/

需要知道的是,我们每次有一个string,我们都需要以下面的方式:

FString HiddenWorld = TEXT("cake");

加上TEXT,这样虚幻可以正确编码。

同样的,对于PrintLine也可以按照下面的例子:

PrintLine(TEXT("Hi There!"));

关于game loop

  • Process the player will go through.
  • There will usually be many loops within a largergame
  • What is our players experience from the moment they interact with the terminal.

在coding之前,先画流程草图。

5 对于编译时间长(10s甚至更多)

进入Message log-Compile log,查看是否有出现编译时长突然变化的情况。

如果有,回到VS code中,到目录栏下的UE-engine-Binaries-Win64-UnrealHeaderTool.target

可以在结尾加入一个空格然后重新保存,这样重新编译速度会变快。

6 Structure of a String

  • A string is a group of characters.
  • Strings are varying in length.
  • A string is an Array of Characters.
  • An FString is a TArray of TCHAR.

7 对词表添加TEXT(“”)

我们选中所有的单词,然后再工具栏的上方,选择,在行尾添加光标。

这样我们可以先输入”),然后删除最后一行的逗号。

对于前面的部分,我们可以再次添加光标后,用Home键移动光标

8 Loading Words At Runtime

单个.h文件中有大量的单词会影响编译时间。我们可以使用FFileHelper::LoadFileToStringArray将单词加载到数组中。

我们在Txt中输入单词表,然后再代码中创建一个TArray成员变量。

FPaths::ProjectContentDir() 将返回内容目录的绝对路径

const FString WordListPath = FPaths::ProjectContentDir() / TEXT("WordLists/HiddenWordList.txt");
FFileHelper::LoadFileToStringArray(Words, *WordListPath);

最后:

为了使其在打包游戏中工作,需要将 WordLists 目录添加到要打包在打包下的项目设置中的附加非资产目录列表中。 

虚幻引擎C++开发学习(一)_第9张图片

 9 TArray Functions

.Add() New element to the end of the array

.Emplace() New element to the end of the array

在FString时,最好使用Emplace

.Remove() Removes matching elements

.RemoveAt()Removes element at index

你可能感兴趣的:(游戏入门,游戏,游戏开发,虚幻,c++)