国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于UE5的第一人稱射擊類游戲的開發(fā)

2023-12-12 04:54:39張玉婷
現(xiàn)代計算機(jī) 2023年18期
關(guān)鍵詞:選項卡第一人稱右鍵

張玉婷

(南京傳媒學(xué)院傳媒技術(shù)學(xué)院,南京 210000)

0 引言

Unreal Engine 5 虛幻引擎(UE5)廣泛應(yīng)用在游戲、影視、建筑、汽車與運(yùn)輸?shù)刃袠I(yè)中。將UE5 和Visual Studio(VS)結(jié)合,可以方便快捷地編寫代碼、編譯程序,設(shè)計開發(fā)出諸如動作、冒險、解密、RPG 等多種類型的電子游戲[1]。本文介紹一款第一人稱射擊類游戲(FPS)的開發(fā)思路。玩家在第一人稱視角下,通過鼠標(biāo)鍵盤操作,游戲中的角色手持武器射出發(fā)射物,擊倒目標(biāo)物體。

游戲開發(fā)的流程是首先在UE5 中新建項目,為項目添加C++代碼。通過創(chuàng)建第一人稱角色的動作軸映射,實(shí)現(xiàn)角色移動、旋轉(zhuǎn)、抬頭、低頭和跳躍的動作。再為角色創(chuàng)建藍(lán)圖動畫,添加動畫狀態(tài)機(jī)。通過在VS 中編寫代碼,實(shí)現(xiàn)用鼠標(biāo)對攝像機(jī)的控制和游戲指令輸入[2]。最后導(dǎo)入發(fā)射物網(wǎng)格體,設(shè)置發(fā)射物的碰撞和生命周期,再添加代碼實(shí)現(xiàn)對目標(biāo)的射擊。

1 新建游戲項目

啟動UE5 虛幻引擎新建游戲項目,選擇Blank template,項目類型改為C++,確定選擇No Starter Content。在Content Browser 的Content的空白處單擊鼠標(biāo)右鍵,創(chuàng)建新文件夾,用來存放游戲相關(guān)的文件,命名為MyGame。在Edit菜單中打開Project Settings,在左側(cè)選項卡的Project 中點(diǎn)擊Maps & Modes,在Editor Startup Map 下拉菜單下選擇MyGame,保存并退出設(shè)置。接著在Tools 菜單中選擇Open Visual Studio打開C++代碼。項目啟動之后,在Solution Explorer里會看到.cpp 和.h 文件,編寫的代碼將存放在這些文件中。

2 創(chuàng)建角色和攝像機(jī)

2.1 創(chuàng)建角色類

本游戲使用C++類向?qū)⑿枰獎?chuàng)建的角色類添加到項目中。在UE5 引擎界面的Tools 菜單中選擇New C++ Class...,創(chuàng)建新的父類。在Choose Parent Class 中選擇Character,新的類命名為MyCharacter,點(diǎn)擊Create Class。在VS 的Solution Explorer 中,依次打開MyProject 里面的Source的FPSProject。在VS中添加如下代碼:

Void AFPSCharacter::SetupPlayerInputComponent(UInputComponent*PlayerInputComponent)

Super::SetupPlayerInputComponent(PlayerInputComponent);

鼠標(biāo)右鍵點(diǎn)擊MyProject,選擇Build 編譯項目。再返回虛幻編輯器,新編譯的MyCharacter類在Content Browser中就創(chuàng)建完成了。

2.2 第三人稱網(wǎng)格體

FPS游戲需要兩個分開的網(wǎng)格體代替玩家角色。其中一個全身網(wǎng)格體作為玩家軀體,用于從第三人稱視角觀察角色。當(dāng)玩家以第一人稱視角進(jìn)行游戲時,全身網(wǎng)格體是隱藏的。通過設(shè)置軸映射、執(zhí)行代碼,實(shí)現(xiàn)角色前后左右移動和跳躍的動作。

由于角色類已創(chuàng)建了SkeletalMeshComponent 對象,因此只需要導(dǎo)入已有的SkeletalMesh資產(chǎn)。鼠標(biāo)右鍵單擊Content 的空白處,打開Import Asset 對話框。點(diǎn)擊Import to 中的Game...,打開Import。選擇已創(chuàng)建好的MyPeople.fbx 骨骼網(wǎng)格體文件,點(diǎn)擊Open,在FBX Import Options對話框中依次點(diǎn)擊Import All 和Save,將網(wǎng)格體添加到項目中。

在Content的Blueprints中,雙擊BP_MyCharacter藍(lán)圖類,在藍(lán)圖編輯器的Components 選項卡中點(diǎn)擊Mesh 組件。在右側(cè)的Details 選項卡的Mesh 里Skeletal Mesh 行的下拉列表中選擇無,然后選擇MyPeople 骨骼網(wǎng)格體。在Details 的Transform 中將變換的Z軸向位置設(shè)置為-70,使SkeletalMeshComponent與CapsuleComponent對齊。

2.3 第一人稱網(wǎng)格體

除了全身網(wǎng)格體,第一人稱射擊類游戲還需要有代表武器和手部的網(wǎng)格體。這個網(wǎng)格體通常附著到攝像機(jī),并且僅當(dāng)玩家以第一人稱視角查看游戲時才對玩家可見。

右鍵點(diǎn)擊內(nèi)容瀏覽器的文件框,打開Import Asset對話框。點(diǎn)擊Import to的Game...,在Import對話框中找到并選擇MyArm.fbx網(wǎng)格體文件,點(diǎn)擊Open 將網(wǎng)格體導(dǎo)入到項目中。在FBX Import Options 對話框中將Skeleton 設(shè)置為None,然后點(diǎn)擊Import All。

打開BP_MyCharacter 藍(lán)圖編輯器,在Components 選項卡中找到FPSMesh 組件。在Details選項卡的Mesh條目中點(diǎn)擊顯示為None的下拉菜單,選擇MyArm 骨骼網(wǎng)格體,將手臂添加到Viewport。接著創(chuàng)建網(wǎng)格體組件,并附加到FPS攝像機(jī),變換屬性設(shè)置為在攝像機(jī)前面,Location設(shè)置為220,0,35,Rotation設(shè)置為180,50,180。在VS中添加如下代碼:

FPSMesh=CreateDefaultSubobject<USkeletalMesh-Component>(TEXT(“FirstPersonMesh”));

check(FPSMesh!=nullptr);

FPSMesh->SetupAttachment(FPSCameraComponent);

2.4 設(shè)置動作軸映射

軸映射是將鍵盤、鼠標(biāo)和控制器的輸入映射到游戲中,綁定到游戲角色的某個動作上。軸映射中常見的就是通過輸入WASD 鍵或箭頭鍵,控制角色自由地向前后左右移動,觸發(fā)游戲行為。在UE5 中打開項目,在Edit 菜單中點(diǎn)擊Project Settings,在選項卡左側(cè)的Engine 標(biāo)題欄下點(diǎn)擊Input。在Bindings 中點(diǎn)擊Axis Mappings 旁邊的+號,點(diǎn)擊Axis Mappings 左側(cè)的箭頭,在文本框中輸入MoveForward,然后點(diǎn)擊左側(cè)箭頭,在下拉菜單中選擇W。點(diǎn)擊MoveForward 旁邊的+號,在第二個下拉菜單中從Keyboard 下拉列表中選擇S,在S 旁邊的Scale 字段中輸入-1。

2.5 移動跳躍函數(shù)

在典型的第一人稱游戲控制模式中,角色的移動是相對于攝像機(jī)的。因此需要使用PlayerController 獲取角色的控制旋轉(zhuǎn)輸入值。MoveForward 函數(shù)將忽略控制旋轉(zhuǎn)輸入值的Pitch分量,將輸入限制在XY 平面上,以確保在向上或向下看時,角色將沿著地面移動。在VS 中添加如下代碼:

PlayerInputComponent->BindAxis(“MoveForward”,this,&AFPSCharacter::MoveForward);

PlayerInputComponent->BindAxis(“MoveRight”,this,&AFPSCharacter::MoveRight);

2.6 設(shè)置攝像機(jī)

在此步驟中,為角色添加能夠環(huán)顧四周并用鼠標(biāo)操縱的功能。在Bindings 中,點(diǎn)擊Axis Mappings 旁邊的+號,點(diǎn)擊Axis Mappings 左側(cè)的箭頭。在文本框中輸入Turn,然后點(diǎn)擊左側(cè)的箭頭,從Mouse 下拉列表中選擇Mouse X。輸入scale 的值為1.0,完成轉(zhuǎn)頭的軸映射。用同樣的方法,在文本輸入框中輸入LookUp,從Mouse下拉列表中選擇Mouse Y,完成抬頭低頭的軸映射。

接著將攝像機(jī)組件附加到膠囊體組件,編寫代碼將攝像機(jī)的位置調(diào)整為略高于角色眼睛的位置,同時允許pawn 控制攝像機(jī)的旋轉(zhuǎn)。在VS中添加如下代碼:

FPSCameraComponent->SetupAttachment(Cast-Checked<USceneComponent,UCapsuleComponent>(GetCapsuleComponent()));

FPSCameraComponent->SetRelativeLocation(FVector(0.0f,0.0f,50.0f+BaseEyeHeight));

FPSCameraComponent->bUsePawnControlRotation=true;

3 實(shí)現(xiàn)射擊

3.1 添加發(fā)射物

設(shè)置完角色后,需要給游戲添加武器和發(fā)射物。首先添加射擊動作映射,在Edit菜單中點(diǎn)擊Project Settings。在Engine 標(biāo)題欄下選擇Input 中的Bindings,點(diǎn)擊Action Mappings 旁邊的+號。在文本輸入框中輸入Fire,從Mouse 下拉列表中選擇Left Mouse Button。接著添加發(fā)射物類,在File 菜單中選擇New C++Class...,以選擇新的父類。再打開Choose Parent Class 菜單,向下選擇Actor 作為父類,然后點(diǎn)擊Next,將新類命名為“MyProjectile”,然后點(diǎn)擊Create Class。

接著添加發(fā)射物移動組件,設(shè)置發(fā)射物的初始速度和碰撞半徑,綁定發(fā)射輸入操作,定義發(fā)射物的生成位置。初始化射擊方向上發(fā)射物速度的函數(shù),以及槍口相對于攝像機(jī)位置的偏移。在VS中添加如下代碼:

UPROPERTY(VisibleDefaultsOnly,Category=Projectile)

USphereComponent*CollisionComponent;

CollisionComponent=CreateDefaultSubobject<USphere-Component>(TEXT(“SphereComponent”));

CollisionComponent->InitSphereRadius(15.0f);

void AFPSProjectile::FireInDirection(const FVector&ShootDirection)

ProjectileMovementComponent->Velocity=Shoot-Direction*ProjectileMovementComponent->Initial-Speed;

UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=Gameplay)

FVector MuzzleOffset;

3.2 實(shí)現(xiàn)射擊

首先創(chuàng)建一個球狀的網(wǎng)格體作為發(fā)射物,鼠標(biāo)右鍵單擊Content Browser空白處,打開Import Asset 對話框,點(diǎn)擊Import to 下的Game...,找到并選擇Bool.fbx網(wǎng)格體文件,點(diǎn)擊Open,在彈出的對話框中點(diǎn)擊Import All,將網(wǎng)格體添加到項目中。導(dǎo)入的網(wǎng)格體可以根據(jù)需要設(shè)置適合的材質(zhì)和縮放大小。通過代碼實(shí)現(xiàn)在槍口位置生成發(fā)射物,射擊方向略向上傾斜,設(shè)置發(fā)射物的初始軌跡。在VS中添加如下代碼:

FRotator MuzzleRotation=CameraRotation;

MuzzleRotation.Pitch+=10.0f;

UWorld*World=GetWorld();

if(World)

FActorSpawnParameters SpawnParams;

SpawnParams.Owner=this;

SpawnParams.Instigator=GetInstigator();

AFPSProjectile*Projectile=World->SpawnActor<AFPSProjectile>(ProjectileClass,MuzzleLocation,MuzzleRotation,SpawnParams);

if(Projectile)

FVector LaunchDirection=MuzzleRotation.Vector();

Projectile->FireInDirection(LaunchDirection);

3.3 發(fā)射物的碰撞和生命周期

本游戲中,發(fā)射物在發(fā)出后與其他對象碰撞并銷毀,輸入InitialLifeSpan=3.0f,每個生成的發(fā)射物會在三秒后從場景中消失。

在Object Channels 中選擇New Object Channel...,創(chuàng)建新碰撞通道。將新碰撞通道命名為“Projectile”,確 保將Default Response 設(shè) 置 為Block, 然 后 點(diǎn) 擊Accept。 在Preset 中 選 擇New...,將新配置文件命名為“Projectile”,并設(shè)置碰撞預(yù)設(shè),設(shè)定發(fā)射物與Pawn重疊。

4 動畫角色

4.1 添加角色動畫

游戲中需要為角色添加一些動畫。在Content Browser中單擊鼠標(biāo)右鍵,選擇Import to,在Game 的Animations 中導(dǎo)入角色動畫。在彈出的對話框中選擇Select Skeleton 標(biāo)題下的My-Arm_Skeleton,然后點(diǎn)擊Import All導(dǎo)入所有動畫。

接著創(chuàng)建動畫藍(lán)圖,在Content 中單擊鼠標(biāo)右鍵,在Create Advanced Asset 里展開Animation并選擇Animation Blueprint。選擇AnimInstance作為父類,并選擇MyArm_Skeleton 作為目標(biāo)骨架。雙擊新動畫藍(lán)圖打開Blueprint Editor,在My Blueprint 選項卡中點(diǎn)擊Add New 按鈕,并選擇Variable。

將該變量設(shè)置為Boolean,并將其命名為“IsRunning”。在My Blueprint 選項卡中,點(diǎn)擊Add New 按鈕并選擇Variable。將該變量設(shè)置為Boolean,并將其命名為“IsFalling”。由此添加狀態(tài)機(jī)過渡變量。

4.2 編輯事件列表

接著編輯動畫的事件圖表,使動畫過渡變量在游戲運(yùn)行時能夠正確觸發(fā)。打開Arms_AnimBP,雙擊My Blueprint 選項卡中的EventGraph,打開事件圖表。在圖表中點(diǎn)擊右鍵,彈出Context Menu。在Context Menu 的搜索字段中輸入“Update”,然后點(diǎn)擊Event Blueprint Update Animation 以添加該節(jié)點(diǎn)。Event Blueprint Update Animation 節(jié)點(diǎn)用于在每次更新動畫時更新狀態(tài)變量,使變量始終與游戲狀態(tài)同步。在圖表中點(diǎn)擊右鍵,彈出Context Menu。在Context Menu 的搜索字段中輸入“Owner”,然后點(diǎn)擊Try Get Pawn Owner 以添加該節(jié)點(diǎn)。從輸出引腳連出引線,并在Context Menu 中選擇Cast to Character。將Event Blueprint Update Animation 節(jié)點(diǎn)上的輸出執(zhí)行引腳關(guān)聯(lián)到Cast to Character 節(jié)點(diǎn)上的輸入執(zhí)行引腳。從As Character 輸出引腳連出引線,并選擇Get Character Movement。從Character Movement 輸出引腳連出引線,并選擇Get Movement Mode。從Movement Mode 輸出引腳連出 引 線, 并 選 擇Equal(Enum)。 將Equal(Enum)節(jié)點(diǎn)上的下拉菜單值設(shè)置為Falling。按住Alt 鍵的同時點(diǎn)擊My Blueprint 選項卡中的IsFalling,將其拖到圖表中,創(chuàng)建一個Set Is Falling 節(jié)點(diǎn)。將Cast to Character 節(jié)點(diǎn)的未標(biāo)記輸出執(zhí)行引腳連接到Set Is Falling 節(jié)點(diǎn)的輸入執(zhí)行引腳,并將Equal(Enum)節(jié)點(diǎn)的輸出布爾數(shù)據(jù)引腳連接到Set Is Falling 節(jié)點(diǎn)的輸入布爾數(shù)據(jù)引腳。返回Cast To Character 節(jié)點(diǎn),并從As Character 引腳再次連出引線。這次選擇Get Velocity 節(jié)點(diǎn)。如果角色不是站立不動,其速度向量的長度將大于零。因此,從Return Value 向量輸出引腳連出引線,并選擇Vector Length 以將該節(jié)點(diǎn)添加到圖表。從Return Value 浮點(diǎn)輸出引腳連出引線,并選擇>(float)節(jié)點(diǎn)。按住Alt鍵的同時點(diǎn)擊My Blueprint選項卡中的IsRunning,將其拖到圖表中,創(chuàng)建一個Set Is Running 節(jié)點(diǎn)。將Set Is Falling 節(jié)點(diǎn)的輸出執(zhí)行引腳連接到Set Is Running節(jié)點(diǎn)的輸入執(zhí)行引腳,并將>(float)節(jié)點(diǎn)的輸出布爾引腳連接到Set Is Running 節(jié)點(diǎn)的輸入布爾引腳。

5 結(jié)語

本文提供了一個第一人稱射擊類游戲開發(fā)的簡單創(chuàng)作思路。在實(shí)際開發(fā)過程中,一款可發(fā)售的游戲還需要有地編、特效、動畫、交互等多方面的設(shè)計和制作。而游戲的趣味性、難易度和競技性也是開發(fā)人員在設(shè)計過程中必須思考的問題。更多的創(chuàng)意設(shè)計和文化元素,適當(dāng)?shù)莫剟顧C(jī)制和游戲反饋,都可以給玩家?guī)ジ玫挠螒蝮w驗(yàn),提升游戲的品質(zhì)[3]。

猜你喜歡
選項卡第一人稱右鍵
輕松整理Win10右鍵菜單
禁用一切 優(yōu)化無限
電腦愛好者(2018年4期)2018-03-02 15:38:00
用右鍵菜單管理右鍵菜單
漢代銅鏡銘文中的第一人稱
中國收藏(2017年4期)2017-05-13 07:23:02
管理你的鼠標(biāo)右鍵菜單
電腦迷(2015年1期)2015-04-29 20:00:03
第一人稱小木屋
Windows 8專欄
鼠標(biāo)滾輪隱藏在IE瀏覽器中的快捷操作
“我”最初是古代兵器
顯示或隱藏“大綱”或“幻燈片”選項卡
微電腦世界(2009年7期)2009-07-31 04:55:28
巴林右旗| 沁源县| 襄樊市| 佛山市| 集安市| 赞皇县| 偃师市| 利辛县| 阆中市| 布尔津县| 金华市| 凤冈县| 友谊县| 信宜市| 中阳县| 宣化县| 乐清市| 池州市| 淮南市| 五指山市| 拉孜县| 历史| 墨脱县| 贵港市| 仙居县| 全椒县| 天镇县| 萨迦县| 镶黄旗| 广宁县| 财经| 公安县| 石城县| 延安市| 准格尔旗| 梧州市| 松潘县| 黄平县| 贵定县| 武鸣县| 青岛市|