主頁 >  其他 > 【摸魚向】UE4的AI模塊探索手記(1)

【摸魚向】UE4的AI模塊探索手記(1)

2020-09-10 12:34:39 其他

前言

之前實作了自主創作的角色匯入進UE4并成功控制其進行一系列動作,但目前的樣子距離基本的游戲架構還差了一個很大的模塊:NPC,而這部分是由電腦來進行自動控制,所以,我有一句話不知當講不當講(對,我又不滿足了( ?? ω ?? )?),由此,我又一次打開了官方檔案,開始對UE4中比較難啃的AI模塊進行探索,(前方少圖,請放心加載(笑))

正文

一.構成

先說一下UE4中AI的構成,一般如果是對玩家有威脅的敵人角色或者是跟隨玩家的npc角色,它們的配置一般有:1.行為樹;2.黑板;3.AI控制器;4.AI角色;5.相關服務;6.相關修飾器;7.相關任務,本次以類似于《合金裝備》里敵兵的AI構建為例,對各個配置進行說明與個人見解,

1.行為樹

UE4的AI角色核心,屬于決策層配置,大致樣貌如下:

如果你有一些程式設計基礎,那么大致通過名字就能判斷行為樹是由類似于if—else一類的決策組成的AI行動方案,并且行為樹是一種可以進行類似深度優先遍歷操作的資料結構,即比如在某個子樹的行為已經運行完成后,狀態改變,則此時根據改變的條件選擇需要遍歷的子樹接著進行遍歷與運行操作,而組成行為樹的節點可并不是類似于普通樹狀結構中單一僅含有權重的“小圓圈”,行為樹一般由以下幾種節點組成:Root,Composites和Tasks,接下來分別描述一下三種節點:

a.Root節點

又名根節點,是整個行為樹的核心與基礎,一但當Agent在場景中的實體化被呼叫時,那么,Root就是行為樹的呼叫入口,從此處開始AI行為邏輯,由于其固定的性質,所以Root節點不可進行編程,

b.Composites節點

直譯過來是“復合體”,根據其節點的作用,又分為Sequence,Selector和Simple Parallel(此節點暫不做敘述),其中,Sequence(佇列)是為了讓其下的子節點或子樹按照順序標號的順序進行執行的節點,而Selector則是行為樹中最重要的“選擇單元”,通過某些“特殊”的“玩意兒”實作對于狀態(一般是用整型,浮點,或列舉表示狀態)的判斷,從而選擇相關的子樹,與Root同樣含有固定的性質,所以不可編程,

c.Tasks節點

又名任務節點,即上述的“相關任務”,是相同的東西,這里具體記載著Agent的行為,當遍歷執行到這里時,Agent便會做出行動,比如跑,跳等,由于AI的行為依據具體情況決定,所以在引擎默認創建的幾個Tasks節點之外,開發者還可以撰寫新的Tasks節點,即Tasks節點是可編程的(行為樹插圖中紫色的部分),

2.黑板

黑板是用來存盤一系列Agent狀態變數的一種結構體,比如此時Agent發現了玩家并且向玩家跑過來,所以它此時的狀態至少就應該有這么幾個:玩家此時的位置,Agent的移動型別(Idle或者Running)以及玩家最后一次出現的位置,這些東西都要用變數存盤起來,然而各個任務節點與一系列的服務,修飾器之間是毫無聯系且相互獨立的,所以他們之間并不能直接修改對方的資料,這時候就要通過黑板里面的資料作為介面實作整個系統之間的通信,并且實際上這些資料并沒有保存在黑板里面,黑板只是提供了一種定義方式,行為樹會自行創建一個黑板,將所有資料存盤在那里面,只是行為樹創建的黑板會遵從原黑板的資料格式罷了,真不知道Epic官方是怎么起名的,叫“記憶體”或“資料塢”這種高大上狂拽酷炫屌炸天的名字它不香么?(或許Epic有這種想法的合理性吧,咱對人工智能的基礎理論知之甚少,如果有哪位大佬知道,歡迎補充)

3.AI控制器與AI角色

這便是AI在游戲場景中的實體化,也是最終展現給玩家的樣貌,由控制器控制角色進行相應的動作,由行為樹作為多觸手章魚玩家來操作多個控制器從而控制多個角色,

4.服務

開發人員以及玩家們都希望在做出一系列的舉止后(比如制造噪聲,向敵人扔個小黃書等),Agent可以根據這種舉止做出相應行動,即遵守圖靈機的基本定義“輸入一定的資料——處理資料——輸出相應的處理結果”,試想,如果不接受玩家的輸入從而在場景內亂跑,那豈不就與喵星人的掃地座駕以及辣個女人一樣么?
人工智障
所以,服務就是來干這事的,通常,服務一般用來接收此時場景內的情況輸入,比如玩家進入視錐,并且玩家并沒有躲在墻體后面,這時服務就會獲取這些資訊的輸入,并且通過邏輯處理從而將黑板中的狀態資料進行改變并更新,當然,由于一個Agent的行為在不同的游戲型別中(甚至不同關卡中)會接受多種不同的輸入,并且黑板上的資料也并不是一定相同的,所以,服務完完全全是可編程的(行為樹插圖中青色的部分),

5.修飾器

好的,這時候我們已經獲取了環境的資訊并改變了Agent的狀態,如果我們希望Agent根據此時的狀態做出相應的行為,那么就需要Selector進行選擇,然而,如何讓Selector進行選擇,總不能隨機選一個?如果是這樣,那么Selector以及Agent的狀態便毫無意義所以,這便是“那個玩意兒”——修飾器的作用:作為執行其負責的子樹部分的判定條件,也就是if—else結構中括號里填寫的那個條件,即定義的條件滿足后再運行相應子樹,若不滿足則退回上一節點,一般都使用基于參考黑板資料的修飾器,當然,判定條件也有可能與關卡狀態,玩家狀態甚至是你的電腦狀態等黑板中并沒有存盤的資料相關,所以,修飾器也是可編程的,(行為樹插圖中藍色的部分)

二.聯系

接下來以我最喜歡的PS2游戲之一《合金裝備2:自由之子》(我絕對不是因為可以在廁所里看海報而喜歡的)其中一個場景進行說明(請結合行為樹插圖食用更佳),具體場景如下所示:

此時玩家操縱的蛇叔處在A點,他要前往的B點(rush B)附近有敵兵看守,此敵兵假如說就是我們描寫的Agent,并且在相應的黑板中創建了這樣幾個變數State(Agent的狀態,列舉型別:Idle,Combat,Searching),Player(準確的說是Agent前往的地點),PlayerMarker(玩家在Agent可視范圍消失后最后一次出現的位置);這時,Agent在場景中實體化,所以,引擎會呼叫Agent所使用的行為樹的Root節點,此時行為樹開始作業,首先這時Agent面向墻壁,而在行為樹中的EnemyTrial_SearchVision服務為Agent正方向創造了一個110度(角度)的視錐,此時玩家并沒有在視錐范圍內,所以EnemyTrial_SearchVision服務將此時Agent的State設定為Idle,目標前往地點與玩家最后一次的位置設定為空,接下來進行選擇,Selector會通過自己所有分支中的修飾器進行選擇,既然此時狀態為Idle,那么State equal Idle修飾器符合條件,所以接下來執行此修飾器下的子樹,然后此時Agent的行為由EnemyTrial_SetWalkSpeed(設定此時Agent的行走速度:巡邏速度)以及EnemyTrial_MoveToRandomPoint(讓Agent隨機移動到某點)定義并控制Agent執行,在執行的程序中,服務以及修飾器也沒閑著,一旦此時Agent隨機移動的點在A點附近,Agent需要轉身,而此時玩家操作的蛇叔正好探頭與Agent對上了眼(進入視錐),那么,服務會立即改變此時Agent的State為Combat,而且將Player與PlayerMarker設定為此時玩家的位置,修飾器監視到State改變,所以會立即中斷自身的行為,并將進度立即返還到Selector,然后由Selector分配給State equal Combat,接著執行Combat對應的Agent行為,但是,如果此時蛇叔打開了光學迷彩(這是不可能的,因為從橋上跳下來時已經摔壞了),在視錐中消失,這時服務將Player設定為空,并會檢索黑板中的PlayerMarker,如果PlayerMarker非空,則Agent的Selector將進度交給State equal Searching,總不能Agent看不到敵人就放棄搜索吧(山貓:你已經被開除了),如果PlayerMarker為空,那么Agent的Selector會將進度交給State equal Idle(一般這種情況不可能,除非玩家開了修改器),接著,當Agent到達PlayerMarker后,在其搜索的時間內如果沒有在視錐內發現玩家,那么EnemyTrial_DestroyMarker任務便會清空Player與PlayerMarker,并且將State設定為Idle,這時修飾器監測到了State的改變,所以此時又會將進度返還給Selector,再由Selector將進度交給State equal Idle,實行Agent基礎的巡邏狀態,

結語

又開了一個坑……我也想好好做個游戲啊%&*#@!¥%%#(因言語過激而被踢出直播間),但是基礎不足,身邊也沒有學習美工與音效的小伙伴,只能自己慢慢摸索了,C++也在補STL方面的基礎,不過這倒是充足了網課后的課余時間(笑),如果我的這篇文章里面的相關名詞與解釋有不正確或是容易引發歧義的地方,歡迎在評論區指出,而且如果你對于其中的一些解釋還有不明白的地方,也歡迎騷擾,當然,老規矩,如果你認為這篇文章會對更多的人有幫助,歡迎轉載,只不過請注明轉載出處即可,以上,どうもありがとうございました!(都莫,阿里嘎多靠薩依瑪希大!)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/2218.html

標籤:其他

上一篇:Unity Editor擴展編輯器中顯示腳本屬性

下一篇:從零開始實作放置游戲(十三)——實作戰斗掛機(4)添加websocket組件

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more