999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2023-12-12 04:54:39張玉婷
現(xiàn)代計(jì)算機(jī) 2023年18期
關(guān)鍵詞:動(dòng)畫(huà)設(shè)置游戲

張玉婷

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

0 引言

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

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

1 新建游戲項(xiàng)目

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

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

2.1 創(chuàng)建角色類

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

Void AFPSCharacter::SetupPlayerInputComponent(UInputComponent*PlayerInputComponent)

Super::SetupPlayerInputComponent(PlayerInputComponent);

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

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

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

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

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

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

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

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

打開(kāi)BP_MyCharacter 藍(lán)圖編輯器,在Components 選項(xiàng)卡中找到FPSMesh 組件。在Details選項(xiàng)卡的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è)置動(dòng)作軸映射

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

2.5 移動(dòng)跳躍函數(shù)

在典型的第一人稱游戲控制模式中,角色的移動(dòng)是相對(duì)于攝像機(jī)的。因此需要使用PlayerController 獲取角色的控制旋轉(zhuǎn)輸入值。MoveForward 函數(shù)將忽略控制旋轉(zhuǎn)輸入值的Pitch分量,將輸入限制在XY 平面上,以確保在向上或向下看時(shí),角色將沿著地面移動(dòng)。在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 旁邊的+號(hào),點(diǎn)擊Axis Mappings 左側(cè)的箭頭。在文本框中輸入Turn,然后點(diǎn)擊左側(cè)的箭頭,從Mouse 下拉列表中選擇Mouse X。輸入scale 的值為1.0,完成轉(zhuǎn)頭的軸映射。用同樣的方法,在文本輸入框中輸入LookUp,從Mouse下拉列表中選擇Mouse Y,完成抬頭低頭的軸映射。

接著將攝像機(jī)組件附加到膠囊體組件,編寫(xiě)代碼將攝像機(jī)的位置調(diào)整為略高于角色眼睛的位置,同時(shí)允許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ā)射物。首先添加射擊動(dòng)作映射,在Edit菜單中點(diǎn)擊Project Settings。在Engine 標(biāo)題欄下選擇Input 中的Bindings,點(diǎn)擊Action Mappings 旁邊的+號(hào)。在文本輸入框中輸入Fire,從Mouse 下拉列表中選擇Left Mouse Button。接著添加發(fā)射物類,在File 菜單中選擇New C++Class...,以選擇新的父類。再打開(kāi)Choose Parent Class 菜單,向下選擇Actor 作為父類,然后點(diǎn)擊Next,將新類命名為“MyProjectile”,然后點(diǎn)擊Create Class。

接著添加發(fā)射物移動(dòng)組件,設(shè)置發(fā)射物的初始速度和碰撞半徑,綁定發(fā)射輸入操作,定義發(fā)射物的生成位置。初始化射擊方向上發(fā)射物速度的函數(shù),以及槍口相對(duì)于攝像機(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)建一個(gè)球狀的網(wǎng)格體作為發(fā)射物,鼠標(biāo)右鍵單擊Content Browser空白處,打開(kāi)Import Asset 對(duì)話框,點(diǎn)擊Import to 下的Game...,找到并選擇Bool.fbx網(wǎng)格體文件,點(diǎn)擊Open,在彈出的對(duì)話框中點(diǎn)擊Import All,將網(wǎng)格體添加到項(xiàng)目中。導(dǎo)入的網(wǎng)格體可以根據(jù)需要設(shè)置適合的材質(zhì)和縮放大小。通過(guò)代碼實(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ā)出后與其他對(duì)象碰撞并銷(xiāo)毀,輸入InitialLifeSpan=3.0f,每個(gè)生成的發(fā)射物會(huì)在三秒后從場(chǎng)景中消失。

在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 動(dòng)畫(huà)角色

4.1 添加角色動(dòng)畫(huà)

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

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

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

4.2 編輯事件列表

接著編輯動(dòng)畫(huà)的事件圖表,使動(dòng)畫(huà)過(guò)渡變量在游戲運(yùn)行時(shí)能夠正確觸發(fā)。打開(kāi)Arms_AnimBP,雙擊My Blueprint 選項(xiàng)卡中的EventGraph,打開(kāi)事件圖表。在圖表中點(diǎn)擊右鍵,彈出Context Menu。在Context Menu 的搜索字段中輸入“Update”,然后點(diǎn)擊Event Blueprint Update Animation 以添加該節(jié)點(diǎn)。Event Blueprint Update Animation 節(jié)點(diǎn)用于在每次更新動(dòng)畫(huà)時(shí)更新?tīng)顟B(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 鍵的同時(shí)點(diǎn)擊My Blueprint 選項(xiàng)卡中的IsFalling,將其拖到圖表中,創(chuàng)建一個(gè)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)。如果角色不是站立不動(dòng),其速度向量的長(zhǎng)度將大于零。因此,從Return Value 向量輸出引腳連出引線,并選擇Vector Length 以將該節(jié)點(diǎn)添加到圖表。從Return Value 浮點(diǎn)輸出引腳連出引線,并選擇>(float)節(jié)點(diǎn)。按住Alt鍵的同時(shí)點(diǎn)擊My Blueprint選項(xiàng)卡中的IsRunning,將其拖到圖表中,創(chuàng)建一個(gè)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é)語(yǔ)

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

猜你喜歡
動(dòng)畫(huà)設(shè)置游戲
中隊(duì)崗位該如何設(shè)置
做個(gè)動(dòng)畫(huà)給你看
動(dòng)畫(huà)發(fā)展史
我的動(dòng)畫(huà)夢(mèng)
文苑(2019年22期)2019-12-07 05:28:56
數(shù)獨(dú)游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
我是動(dòng)畫(huà)迷
本刊欄目設(shè)置說(shuō)明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
主站蜘蛛池模板: 无码人妻热线精品视频| 2021国产精品自拍| 亚洲欧美一级一级a| 天天干天天色综合网| 国产福利微拍精品一区二区| 九九热精品在线视频| 精品人妻无码区在线视频| 日韩av无码DVD| 欧美国产日韩在线播放| 精品一区二区三区自慰喷水| 呦女亚洲一区精品| 免费国产好深啊好涨好硬视频| 97一区二区在线播放| 91视频日本| 在线播放91| 麻豆精品在线播放| 激情综合网激情综合| 亚洲国产天堂在线观看| 亚洲午夜国产精品无卡| 亚洲最猛黑人xxxx黑人猛交| 日韩精品免费在线视频| 亚洲成a∧人片在线观看无码| 亚洲精品图区| 国产男女免费完整版视频| 999在线免费视频| 精品一区二区三区水蜜桃| 日韩在线成年视频人网站观看| 国产午夜一级毛片| 玩两个丰满老熟女久久网| 国产精品专区第1页| 日韩午夜伦| 青青操视频在线| 精品国产免费人成在线观看| 欧美性久久久久| 亚洲精品欧美日本中文字幕| 亚洲欧洲日韩综合色天使| 99精品伊人久久久大香线蕉| 亚洲乱亚洲乱妇24p| 国产视频 第一页| 日韩不卡高清视频| 亚洲精品国产成人7777| 免费在线成人网| 一级毛片免费高清视频| 日韩第九页| 中文字幕有乳无码| 99热最新网址| 国产大片黄在线观看| 2020国产精品视频| 国产一级二级在线观看| 97久久超碰极品视觉盛宴| 国产91透明丝袜美腿在线| 色爽网免费视频| 在线欧美一区| 99久久精品国产精品亚洲| a天堂视频| 色哟哟精品无码网站在线播放视频| 美女无遮挡免费视频网站| 成人一级黄色毛片| 欧美19综合中文字幕| 亚洲人精品亚洲人成在线| 91麻豆国产在线| 国产在线视频自拍| 国产欧美视频在线| 99久久亚洲综合精品TS| 又黄又爽视频好爽视频| 色婷婷成人| 午夜激情福利视频| 国产精品一线天| 精品無碼一區在線觀看 | 色悠久久综合| 无码视频国产精品一区二区| 日韩无码视频专区| 精品一区二区久久久久网站| 99视频在线精品免费观看6| 亚洲男人天堂2018| 特级欧美视频aaaaaa| 欧洲亚洲欧美国产日本高清| 香蕉视频在线观看www| 91精品综合| 国产免费网址| 麻豆AV网站免费进入| 亚洲 欧美 中文 AⅤ在线视频|