虚幻引擎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作為啟動:
?這樣會在文件目錄中產生下面這個文件:
?然后我們可以在vs code中打開項目,但是會有如下的報錯:
?但這是因為課程的版本和我們版本使用不同造成的。我們可以進入下面的鏈接,下載vsix文件
https://gist.github.com/boocs/f63a4878156295b6e854cac68672f305#Extension-Settings
然后按照文章中步驟進行操作就可以了,別忘了在設置中,選中這兩個:
?這樣的話,現在就沒有之前的報錯了,我們可以繼續進行后續的任務。
3 Actor和組件
Actor 可以被視為一個容器,可以附加許多組件。
我們可以在C++類中,找到我們的組件,可以將它添加到我們的terminal中:
關于terminal的解釋:
而在這個項目中使用的類比思想是一個老式的終端,你輸入兩個,它的字符出現在屏幕上,然后游戲以不同的東西響應。
所以這里的想法是,本節中將對這些墨盒(cartridges)之一進行編程,然后從理論上講,然后將其插入我們的終端。
那么怎么做?
我們首先選中這個終端:
?我們可以直接在添加組件中搜索,也可以在列表中拖入:
這樣我們進入vs code的對應文件中,我們可以添加代碼(添加一行輸出):
?然后我們進入到游戲中的終端,就可以看到輸出:
在這里需要注意的是,有的時候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<FString>成員變量。
FPaths::ProjectContentDir()?將返回內容目錄的絕對路徑
const FString WordListPath = FPaths::ProjectContentDir() / TEXT("WordLists/HiddenWordList.txt"); FFileHelper::LoadFileToStringArray(Words, *WordListPath);最后:
為了使其在打包游戲中工作,需要將 WordLists 目錄添加到要打包在打包下的項目設置中的附加非資產目錄列表中。?
?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++开发学习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鱼眼相机矫正原理
- 下一篇: Greenplum 6安装指南(Cent