UE5 游戲模板 —— TopDownGame 俯視角游戲

UE5 游戲模板 —— TopDownGame 俯視角游戲

  • 前言
  • 一、模塊導入
  • 二、TopDownGameMode
  • 三、TopDownPlayerController
    • 1、構造函數
    • 2、SetupInputComponent
      • 初始化新輸入系統
      • 處理輸入邏輯
  • 四、TopDownCharacter
  • 五、射線檢測
  • 總結

前言

上一篇文章介紹了一下PuzzleGame模板的流程,我們循序漸進這次介紹TopDownGame。
實際上TopDownGame和之前的PuzzleGame非常類似都是俯視角都要使用射線檢測去做相應的判定。但是TopDownGame提供了角色尋路和角色位移的方式。


一、模塊導入

UE是以導入模塊來構建項目的,我們可以自己定義插件等內容當作一個模塊來進行導入。
可以看到下圖中導入了很多的模塊
在這里插入圖片描述
其中 “Core”, “CoreUObject”, “Engine”, “InputCore” 是常用的也是默認都會導入的幾個模塊,有著最基礎的內容。
“AIModule” 這個是用作尋路的必要模塊
“Niagara” 粒子系統相關的模塊
“EnhancedInput” 新的輸入系統模塊

二、TopDownGameMode

我們在之前的PuzzleGame中就有講解過,下面的方式可以指定C++的藍圖派生類
在這里插入圖片描述

三、TopDownPlayerController

1、構造函數

還是和上一節的內容相似,都是顯示鼠標和設置鼠標的默認類型。
CachedDestination用于記錄點擊到的點
FollowTime用于記錄鼠標按住的時間
在這里插入圖片描述

2、SetupInputComponent

初始化新輸入系統

在這里插入圖片描述
獲取新輸入的本地玩家子系統,對子系統設置MappingContext

	// Add Input Mapping Contextif (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer())){Subsystem->AddMappingContext(DefaultMappingContext, 0);}

將InputComponent 轉換成新輸入組件并綁定事件

// Set up action bindings
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent))
{// Setup mouse input eventsEnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Started, this, &ATestTopDownPlayerController::OnInputStarted);EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Triggered, this, &ATestTopDownPlayerController::OnSetDestinationTriggered);EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Completed, this, &ATestTopDownPlayerController::OnSetDestinationReleased);EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Canceled, this, &ATestTopDownPlayerController::OnSetDestinationReleased);// Setup touch input eventsEnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Started, this, &ATestTopDownPlayerController::OnInputStarted);EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Triggered, this, &ATestTopDownPlayerController::OnTouchTriggered);EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Completed, this, &ATestTopDownPlayerController::OnTouchReleased);EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Canceled, this, &ATestTopDownPlayerController::OnTouchReleased);
}

處理輸入邏輯

點擊鼠標左鍵開始時先停止角色移動

void ATestTopDownPlayerController::OnInputStarted()
{StopMovement();
}

按住觸發鼠標左鍵
1.先累加幀時間間隔
2.發射射線(可能會疑問這個發射射線的方法,其實是對之前PuzzleGame中發射射線方法的一個封裝下面詳細講解一下這個地方)
3.記錄射線碰撞的點
4.計算移動的方向向量

void ATestTopDownPlayerController::OnSetDestinationTriggered()
{// We flag that the input is being pressedFollowTime += GetWorld()->GetDeltaSeconds();// We look for the location in the world where the player has pressed the inputFHitResult Hit;bool bHitSuccessful = false;if (bIsTouch){bHitSuccessful = GetHitResultUnderFinger(ETouchIndex::Touch1, ECollisionChannel::ECC_Visibility, true, Hit);}else{bHitSuccessful = GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, true, Hit);}// If we hit a surface, cache the locationif (bHitSuccessful){CachedDestination = Hit.Location;}// Move towards mouse pointer or touchAPawn* ControlledPawn = GetPawn();if (ControlledPawn != nullptr){FVector WorldDirection = (CachedDestination - ControlledPawn->GetActorLocation()).GetSafeNormal();ControlledPawn->AddMovementInput(WorldDirection, 1.0, false);}
}

松開鼠標左鍵
如果按鍵按下的時長小于設定值判定是鼠標瞬間點擊,將玩家使用導航移動到目標點,同時播放粒子特效和聲音

void ATestTopDownPlayerController::OnSetDestinationReleased()
{// If it was a short pressif (FollowTime <= ShortPressThreshold){// We move there and spawn some particlesUAIBlueprintHelperLibrary::SimpleMoveToLocation(this, CachedDestination);UNiagaraFunctionLibrary::SpawnSystemAtLocation(this, FXCursor, CachedDestination, FRotator::ZeroRotator, FVector(1.f, 1.f, 1.f), true, true, ENCPoolMethod::None, true);if (AudioSound != nullptr){UGameplayStatics::PlaySoundAtLocation(GetWorld(), AudioSound, CachedDestination);}}FollowTime = 0.f;
}

四、TopDownCharacter

初始化相機和相機臂
在這里插入圖片描述

五、射線檢測

我們已經遇到了多次射線檢測讓我們來仔細看一下

首先無論是哪種射線檢測函數本質上是從一個點到另一個點的連線在此連線的路徑上是否有物體遮擋碰撞。
1.我們要先獲取到鼠標在屏幕上面的坐標
2.將屏幕上的坐標轉換為世界中的坐標,可以想象是攝像機的那個投影面的位置
3.需要知道方向,其實就是攝像機看向的方向
4.確定終點,起點+方向*長度
5.傳遞需要碰撞的參數,調用LineTraceSingleByChannel

在PuzzleGame中我們曾用過這個函數,獲取到了世界的位置和方向,實際上就是獲取屏幕鼠標位置讓后通過矩陣轉換得到最終的值
在這里插入圖片描述
我們現在在來看一下TopDownGame的射線檢測
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
其實本質的原理都是一樣的


總結

以上就是今天要講的內容,自此兩個典型的俯視角游戲就介紹到這里,接下來是第一人稱和第三人稱射擊游戲的模板。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87378.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于深度學習的智能圖像分割系統:技術與實踐

前言 圖像分割是計算機視覺領域中的一個核心任務&#xff0c;其目標是將圖像劃分為多個有意義的區域或對象。圖像分割在醫學影像分析、自動駕駛、安防監控等多個領域有著廣泛的應用。近年來&#xff0c;深度學習技術&#xff0c;尤其是卷積神經網絡&#xff08;CNN&#xff09;…

【學習筆記】2.2 Encoder-Decoder

參考資料&#xff1a;https://github.com/datawhalechina/happy-llm 在 Transformer 中&#xff0c;使用注意力機制的是其兩個核心組件——Encoder&#xff08;編碼器&#xff09;和 Decoder&#xff08;解碼器&#xff09;。 2.2.1 Seq2Seq 模型 Seq2Seq&#xff08;序列到…

# 材料力學押題

材料力學押題 文章目錄 材料力學押題第一題第二題組合變形彎曲變形 第一題 Q 求力作用的銷釘位置的豎直偏移距離。 S 方法一:能量方法 材料應變能計算為: U ∫ 內力 2 2 剛度 d A U\int \frac{\text{內力}^2}{2\times 剛度}\text{d}A U∫2剛度內力2?dA 克拉珀龍原理&…

uniapp項目之小兔鮮兒小程序商城(一) 項目介紹,技術棧,小程序的基礎架構,封裝攔截器和請求函數

文章目錄 一.項目介紹和前置內容1.重要鏈接2.技術棧 二.創建uniapp項目1.使用HBuilderX創建2.使用命令行創建3.如何使用vscode開發uniapp項目?step1:把項目拉入vscode,開始下相關插件step2:ts類型校驗step3:設置json文件可以允許注釋 4.pages.json文件的作用是什么?5.示例:在…

Uniapp H5端SEO優化全攻略:提升搜索引擎排名與流量

在移動互聯網時代&#xff0c;H5頁面因其跨平臺、低成本、易傳播的特性&#xff0c;成為許多企業的首選。Uniapp作為一款優秀的前端跨端開發框架&#xff0c;能夠快速開發H5、小程序、App等多端應用。然而&#xff0c;由于Uniapp默認采用SPA&#xff08;單頁應用&#xff09;架…

一[3.3]、ubuntu18.04環境 利用 yolov8 實現列車軌道檢測,并提取正確的軌道線【全網最詳細】

一、參考文獻 https://blog.csdn.net/u010117029/category_12977729.html 一[3.2]、ubuntu18.04環境 利用 yolov8 訓練開源列車數據集,并實現列車軌道檢測【全網最詳細】-CSDN博客 火車軌道鐵路軌道檢測識別(附帶Python源碼+詳細解析)_軌道點云提取鐵軌代碼-CSDN博客

pp-ocrv5中的改進-跨階段特征融合(CSP-PAN)以及在 Neck 部分引入 CSP-PAN后為何就能解決小文本漏檢問題?

好的&#xff0c;我們來詳細解析一下 PP-OCRv5 中的**跨階段特征融合&#xff08;CSP-PAN&#xff09;**改進&#xff0c;以及它如何有效解決小文本漏檢問題。 背景&#xff1a;PP-OCR 的 Neck 部分與 PAN 在 PP-OCRv3 及之前的版本中&#xff0c;Neck 部分使用的是標準的 **…

【數據分析四:Data Preprocessing】數據預處理

一、數據預處理 直接收集的數據通常是“臟的”&#xff1a; 不完整、不準確、不一致 數據預處理是進行大數據的分析和挖掘的工作中占工作量最大的一個步驟&#xff08;80%&#xff09; 二、處理缺失值 處理缺失數據的方法&#xff1a;首先確認缺失數據的影響 數據刪除&#x…

一起來入門深度學習知識體系

前言 什么是深度學習&#xff1f;它有什么魔力&#xff1f; 想象一個機器人能識別人臉、寫詩、翻譯語言、甚至和你聊天。它是怎么學會這些能力的&#xff1f;答案正是——深度學習&#xff08;Deep Learning&#xff09;。 簡單來說&#xff0c;深度學習就像是教會一臺計算機…

Prompt+Agent+LLM:半導體爐管設備健康評估的落地實戰

引言 在高端制造業的核心場景中&#xff0c;設備健康管理正面臨前所未有的挑戰。以半導體制造為例&#xff0c;一臺價值數百萬美元的爐管設備意外停機&#xff0c;可能導致整條產線癱瘓、晶圓批次報廢&#xff0c;單日損失可達千萬級。傳統基于閾值規則的監控系統難以捕捉早期…

PostgreSQL的擴展bloom

PostgreSQL的擴展bloom 一、擴展概述 bloom 是 PostgreSQL 提供的一個基于**布隆過濾器(Bloom Filter)**的索引擴展&#xff0c;特別適合多列任意組合查詢的優化場景。 二、核心特性 特性描述優勢多列索引單索引支持多列組合減少索引數量模糊匹配高效處理和IN查詢優于B-tre…

算法與數據結構學習之旅:從入門到進階

在計算機科學的浩瀚宇宙中&#xff0c;算法與數據結構如同閃耀的恒星&#xff0c;驅動著整個程序世界的運轉。無論是手機上流暢運行的 APP&#xff0c;還是搜索引擎瞬間返回的海量結果&#xff0c;背后都離不開算法與數據結構的精妙設計。對于想要深入探索計算機領域的開發者和…

C++map和set類(簡介)

文章目錄 一、關聯式容器二、鍵值對三、樹形結構的關聯式容器3.1 set類的簡介3.2 set的接口3.2.1 set的模版參數列表3.2.2 set的構造3.2.3 set的迭代器3.2.4 set的容量3.2.5 set的修改操作 3.3 set的使用案例3.4 multiset類的介紹3.5 multiset的使用案例3.6 map類的簡介3.7 map…

圓柱電池自動化升級:面墊機如何破解生產痛點?

在圓柱電池的生產流程中&#xff0c;面墊&#xff08;絕緣墊片&#xff09;的安裝是保障電池安全與性能的關鍵環節。傳統手工操作不僅效率低&#xff0c;還容易出現面墊偏移、漏貼等問題&#xff0c;影響產品一致性。圓柱電池自動面墊機的出現&#xff0c;通過自動化技術解決了…

【AI Study】第四天,Pandas(1)- 基礎知識

文章概要 本文詳細介紹 Pandas 庫的基礎知識&#xff0c;包括&#xff1a; Pandas 的基本概念和特點安裝和配置方法核心數據結構&#xff08;Series 和 DataFrame&#xff09;各種數據類型的處理方法實際應用示例 什么是 Pandas Pandas 是 Python 中最流行的數據分析庫之一…

重構氣血經絡的數學模型:氣血經絡級聯控制系統核心方程

從融智學視域&#xff0c;重構氣血經絡的數學模型 摘要&#xff1a; 融智學視域&#xff0c;通過三元耦合框架&#xff0c;重構氣血經絡模型&#xff0c;建立跨學科認知體系。五大分支協同運作&#xff1a;數學融智學構建纖維叢模型&#xff0c;邏輯融智學建立防歧義語義網&…

python爬蟲:某網站價格數字加密破解

文章目錄 前言一、案例二、破解流程1.原理2.找到woff文件3.分析woff文件4.代碼實現1.轉化woff文件2.繪圖并ocr識別3.映射數據 三、總結 前言 有時我們在進行網頁抓取采集數據時&#xff0c;有些重要的數據比如說價格,數量等信息會進行加密&#xff0c;通過復制或者簡單的采集是…

DigitalOcean 攜手 AMD 推出 AMD Instinct? MI300X GPU Droplet,加速 AI 創新

近日&#xff0c;DigitalOcean&#xff08;NYS:DOCN&#xff09;作為全球最簡單易用的可擴展云平臺&#xff0c;宣布與 AMD 建立合作&#xff0c;為 DigitalOcean 客戶提供 AMD Instinct? GPU&#xff0c;以 AMD Instinct? MI300X GPU Droplet 的形式支持其 AI 工作負載。此舉…

小白暢通Linux之旅-----DNS項目實戰配置

目錄 一、項目要求 1、正反向解析配置 2、主從配置 二、腳本編寫配置 1、主服務器腳本編寫 2、從服務器腳本編寫 三、項目檢測 1、正反向解析檢測 &#xff08;1&#xff09;主服務器腳本啟動 &#xff08;2&#xff09;測試主機配置 &#xff08;3&#xff09;正反…

Codigger:探索數字工作新架構

在軟件開發與數字工作領域&#xff0c;技術迭代的腳步從未停歇&#xff0c;開發者和系統管理員都在尋找更高效的工具和平臺。Codigger 作為一項創新技術成果&#xff0c;憑借其獨特的定位和架構&#xff0c;在行業內逐漸嶄露頭角。 Codigger “分布式操作系統”&#xff0c;它…