Unity百游修煉(1)——FootBall詳細制作全流程

一、引言

游玩測試:

Football 游玩測試


1.項目背景與動機

? ? ? ? 背景:在學習 Unity 的過程中,希望通過實際項目來鞏固所學知識,同時出于對休閑小游戲的喜愛,決定開發一款簡單有趣的小游戲加深自己的所學知識點。

????????動機:希望能讓玩家在輕松的氛圍中體驗游戲的樂趣,緩解日常學習和工作的壓力,同時希望在學習unity的道路上留下點腳印。


2.預期效果與目標

????????預期效果:實現一個畫面簡潔、操作流暢的球體控制游戲,玩家操控球在場景中移動,收集食物得分,達到一定分數獲勝

????????目標:完成一個功能完整的小游戲,并通過測試和發布,讓更多人體驗到游戲的樂趣,同時提升自己在 Unity 開發方面的技能。

(1)游戲開始(伴有吃道具的音效,UI得分界面,貼圖,視野跟隨,物品旋轉)

(2)游戲結束(伴有結束背景音效)


二、前期準備

1.開發環境搭建

(1)操作系統選擇Windows 系統軟件兼容性好,Unity 開發相關工具和插件容易獲取和安裝,且有大量的開發教程資源;

(2)硬件配置需求:CPU 建議選擇 Intel i5 及以上或 AMD 同級別處理器,以保證代碼編譯和游戲運行的流暢性;GPU 方面,NVIDIA GeForce GTX 1050 及以上或 AMD 同性能顯卡,有助于處理游戲中的圖形渲染。


2.軟件工具介紹以及安裝包
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???

(1)Unity 版本選擇與下載安裝:選擇了 Unity 2023.版本,該版本功能較新且穩定性較好。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

(2)VS2022:使用 Visual Studio2022?作為腳本代碼編輯器。

(3)其他輔助軟件:

Inno Setup Compiler:用于將Unity打包的軟件,進行再加工,形成可供別人游玩的安裝包

Bandicam:用于錄制視頻和音效素材(可有可無);

(4)安裝TIPS:

Unity制作游戲——前期準備:Unity2023和VS2022下載和安裝配置——附安裝包-CSDN博客

????????通過網盤分享的文件:Inno Setup 6.zip等2個文件
鏈接: https://pan.baidu.com/s/11ljj4FaZJh4DI1riwyOo8w?pwd=4399 提取碼: 4399?
--來自百度網盤超級會員v5的分享


三、游戲策劃

1.游戲創意構思

(1)靈感來源:受到經典的吃豆人游戲啟發,結合足球元素,想打造一個新的休閑玩法,讓玩家操控足球在充滿食物的場景中收集得分。

(2)游戲類型定位:屬于休閑益智類游戲,規則簡單易上手,適合各個年齡段的玩家在碎片化時間內進行娛樂。


2.核心玩法設計

(1)玩法規則詳細描述:玩家操控球在限定的場景中移動,場景中分布著食物,足球與食物碰撞后可收集食物得分,當收集的食物數量達到 8 個時,游戲勝利。

(2)玩家交互方式規劃:玩家通過鍵盤的方向鍵控制足球的(wsad)前后左右移動按下 Escape 鍵可退出游戲。游戲過程中,通過 UI 界面實時顯示當前得分,勝利時顯示勝利文本。


3.游戲美術風格確定

(1)色彩搭配構思:采用明亮活潑的色彩,以黃色作為食物和主要場景元素的底色,搭配藍色、粉色等對比色,使畫面更加醒目和吸引人。

?


(2)角色、場景風格設定參考:角色(足球)和場景元素采用簡潔的卡通風格,參考一些低多邊形風格的游戲,讓畫面看起來清新可愛,符合休閑游戲的定位。


四、Unity 開發流程

1.項目創建與設置

(1)在 Unity 中新建項目流程:打開 Unity Hub,點擊 “新建”,選擇 3D 模板,設置項目名稱和存儲路徑,點擊創建,等待項目初始化完成。(第一次創建等待時間有點長

步驟一:


步驟二:


(2)項目基本設置
步驟一:改變窗口布局方式


步驟二:改變游戲界面的窗口分辨率


2.資源導入與管理

????????美術資源導入方法將準備好的圖片、模型等美術資源直接拖放到 Unity 的 Project 視圖中,或者使用 Assets - Import New Asset 菜單導入,選擇你要導入的資源即可。


????????資源文件夾結構規劃在 Project 視圖中創建 Materials(材質)、Scripts(腳本)、Scenes(場景)、Prefabs(預制體)等文件夾,將對應資源分類存放,方便管理和查找。


3.場景搭建

????????創建與布局場景:使用 Unity 的基本幾何體創建地面墻壁等場景元素,通過調整位置旋轉縮放來布局場景。

步驟一:地面的搭建(在Hierarchy窗口——右擊——3D Obiect——Plane)

步驟二:對地面進行基礎設置(大家可以自己多試試,不一定非要和我的一樣)

步驟三:創建材質,命名為地面材質(如:floor_material),便于后期區分材質

步驟四:選中材質,對材質進行基礎設置。

步驟五:將修改好的材質直接 拖放到 創建的平面上

步驟六:墻壁的搭建(在Hierarchy窗口——右擊——3D Obiect——Cube)

步驟七:選中創建的Cube,復制三個Ctrl+D,分別命名為前后左右墻

步驟八:進行變形移動等操作使之圍繞地面

TIPS:放到場景視圖,會發現有網格,每個網格大小為1m。

步驟九:創建材質,命名為墻壁材質(如:wall_material),然后進行個性化設置

步驟十:記得材質要? 拖放 到物體本身 才可以起作用


4.角色與對象創建

????????創建角色:足球模型和添加材質以及增加剛體碰撞器
主角:

墻壁和地面:都得確保有:Collider

Tips:添加 Rigidbody 組件用于物理模擬,添加 Box Collider 或 Sphere Collider 作為碰撞體;給墻壁等障礙物添加 Collider 組件,確保碰撞效果正常。


五、腳本編寫與代碼實現

1. FootBalll_Control 腳本:該腳本主要負責控制足球的移動、計分、處理碰撞事件以及實現游戲的退出功能。
using UnityEngine;
using TMPro;public class FootBalll_Control : MonoBehaviour
{public Rigidbody R1;public TextMeshProUGUI TextScore;public int score = 0;public GameObject Wintext;public AudioSource victoryMusic; public AudioSource eatSound; public GameObject tanhuang;void Start(){if (victoryMusic != null){victoryMusic.Stop();}}void Update(){float h = Input.GetAxisRaw("Horizontal");// 接受左右輸入float v = Input.GetAxisRaw("Vertical");// 接受前后輸入R1.AddForce(new Vector3(h, 0, v));if (Input.GetKeyDown(KeyCode.Escape)){QuitGame();}}private void OnTriggerEnter(Collider other){if (other.gameObject.tag == "Food"){eatSound.Play();score++;TextScore.text = score.ToString();Destroy(other.gameObject);if (score == 8){Wintext.SetActive(true);victoryMusic.Play();}}}// 退出游戲的方法void QuitGame(){
#if UNITY_EDITORUnityEditor.EditorApplication.isPlaying = false;
#else// 在發布后的應用程序中,使用Application.Quit()來退出游戲Application.Quit();
#endif}
}

R1:用于引用足球的剛體組件,以便對足球進行物理控制。

TextScore:用于顯示當前的游戲分數。

score:存儲當前的游戲分數,初始值為 0。

Wintext:代表勝利文本的游戲對象,當分數達到一定條件時顯示。

victoryMusic 和 eatSound:分別為勝利音樂和吃食物的音效,通過 AudioSource 組件播放。

tanhuang:代表彈簧的游戲對象,后續可能用于實現特殊的物理效果。

Start 方法:在游戲開始時調用,確保勝利音樂一開始不會播放。

Update 方法:通過 Input.GetAxisRaw 方法獲取玩家的水平和垂直輸入,然后使用 R1.AddForce 方法給足球施加力,從而實現足球的移動。

檢測玩家是否按下 Escape 鍵,如果按下則調用 QuitGame 方法退出游戲。

OnTriggerEnter 方法:當足球觸發具有 “Food” 標簽的游戲對象時,播放吃食物的音效,增加分數,更新分數顯示,并銷毀該食物對象。

當分數達到 8 時,顯示勝利文本并播放勝利音樂。

QuitGame 方法:根據游戲運行的環境,在編輯器中使用 UnityEditor.EditorApplication.isPlaying = false 退出播放模式,在發布后的應用程序中使用 Application.Quit() 退出游戲。


2. Follow_Camera_Scripts 腳本:該腳本用于實現相機跟隨足球的功能,確保相機始終保持與足球的相對位置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Follow_Camera_Scripts : MonoBehaviour
{public Transform Tf_Camera;public GameObject Football;Vector3 distance=new Vector3();// Start is called before the first frame updatevoid Start(){distance= Tf_Camera.position-Football.transform.position;}// Update is called once per framevoid Update(){Tf_Camera.position= distance+Football.transform.position;}
}

Tf_Camera:相機的 Transform 組件,用于控制相機的位置。

Football:足球的游戲對象,相機將跟隨該對象移動。

distance:存儲相機與足球的初始相對位置。

Start 方法:在游戲開始時,計算相機與足球的初始相對位置。

Update 方法:在每一幀中,根據足球的當前位置和初始相對位置,更新相機的位置,從而實現相機跟隨足球的效果。


3. Food_Rotate 腳本:該腳本用于實現食物的旋轉效果,使游戲中的食物看起來更加生動。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Food_Rotate : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){transform.Rotate(new Vector3(0, 0.5f, 0), Space.World);}
}

Update 方法:在每一幀中,使用 transform.Rotate 方法讓食物繞 Y 軸旋轉,旋轉速度為 0.5 度,旋轉空間為世界空間


六、游戲測試與發布

????????內部測試流程與方法:在 Unity 編輯器中進行多次測試,檢查游戲功能是否正常,如移動、得分、勝利條件等。

????????打包設置:在 Build Settings 中選擇目標平臺(如 Windows、Mac、Android 等),根據不同平臺的特點進行設置,如分辨率適配、權限設置等。

????????整合成安裝包:利用Inno Setup Compiler,教程見如下博客(后續發布)
?


七、總結與展望

????????在開發過程中,深入學習了 Unity 的各項功能和 C# 語言的應用,提高了自己的編程和問題解決能力。同時,也體會到游戲開發需要耐心和細心,從策劃到實現每個環節都至關重要。

八.結語

????????通過這三個腳本的協同工作,我們實現了一個簡單的足球小游戲。玩家可以通過鍵盤控制足球的移動,收集場景中的食物來增加分數,當分數達到 8 時獲得勝利。同時,相機跟隨足球移動,并且食物會不斷旋轉,增強了游戲的視覺效果。這個小游戲雖然簡單,但涵蓋了 Unity 中基本的物理控制、輸入處理、碰撞檢測、音效播放以及相機跟隨等功能,為進一步開發更復雜的游戲奠定了基礎。

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

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

相關文章

QQ登錄測試用例報告

QQ登錄測試用例思維導圖 一、安全性測試用例 1. 加密傳輸與存儲驗證 測試場景:輸入賬號密碼并提交登錄請求。預期結果:賬號密碼通過加密傳輸(如HTTPS)與存儲(如哈希加鹽),無明文暴露。 2. 二…

無人機實戰系列(三)本地攝像頭+遠程GPU轉換深度圖

這篇文章將結合之前寫的兩篇文章 無人機實戰系列(一)在局域網內傳輸數據 和 無人機實戰系列(二)本地攝像頭 Depth-Anything V2 實現了以下功能: 本地筆記本攝像頭發布圖像 遠程GPU實時處理(無回傳&#…

讀取羅克韋爾AllenBradley Micro-Logix1400 羅克韋爾 CIP PCCC通信協議

通信協議實例下載 <-----實例下載 MicroLogix 1400的通信能力 MicroLogix 1400支持多種通信協議&#xff0c;包括CIP&#xff08;通過EtherNet/IP實現&#xff09;、Modbus RTU/TCP、DF1等4812。其硬件集成以太網端口&#xff0c;便于通過EtherNet/IP進行CIP通信15。 CIP…

Python游戲編程之賽車游戲6-5

1 碰撞檢測 在顯示了玩家汽車和“敵人”汽車之后&#xff0c;接下來就要實現玩家與“敵人”的碰撞檢測了。 代碼如圖1所示。 圖1 碰撞檢測代碼 第72行代碼通過pygame.sprite.spritecollideany()函數判斷P1和enemies是否發生了碰撞&#xff0c;如果發生碰撞&#xff0c;該函數…

【QT 網絡編程】HTTP協議(二)

文章目錄 &#x1f31f;1.概述&#x1f31f;2.代碼結構概覽&#x1f31f;3.代碼解析&#x1f338;Http_Api_Manager - API管理類&#x1f338;Http_Request_Manager- HTTP請求管理類&#x1f338;ThreadPool - 線程池&#x1f338;TestWindow- 測試類 &#x1f31f;4.運行效果&…

保姆級! 本地部署DeepSeek-R1大模型 安裝Ollama Api 后,Postman本地調用 deepseek

要在Postman中訪問Ollama API并調用DeepSeek模型,你需要遵循以下步驟。首先,確保你有一個有效的Ollama服務器實例運行中,并且DeepSeek模型已經被加載。 可以參考我的這篇博客 保姆級!使用Ollama本地部署DeepSeek-R1大模型 并java通過api 調用 具體的代碼實現參考我這個博…

在PHP Web開發中,實現異步處理有幾種常見方式的優缺點,以及最佳實踐推薦方法

1. 消息隊列 使用消息隊列&#xff08;如RabbitMQ、Beanstalkd、Redis&#xff09;將任務放入隊列&#xff0c;由后臺進程異步處理。 優點&#xff1a; 任務持久化&#xff0c;系統崩潰后任務不丟失。 支持分布式處理&#xff0c;擴展性強。 實現步驟&#xff1a; 安裝消息…

算法15--BFS

BFS 原理經典例題解決FloodFill 算法[733. 圖像渲染](https://leetcode.cn/problems/flood-fill/description/)[200. 島嶼數量](https://leetcode.cn/problems/number-of-islands/description/)[695. 島嶼的最大面積](https://leetcode.cn/problems/max-area-of-island/descrip…

網絡空間安全(2)應用程序安全

前言 應用程序安全&#xff08;Application Security&#xff0c;簡稱AppSec&#xff09;是一個綜合性的概念&#xff0c;它涵蓋了應用程序從開發到部署&#xff0c;再到后續維護的整個過程中的安全措施。 一、定義與重要性 定義&#xff1a;應用程序安全是指識別和修復應用程序…

Plantsimulation中機器人怎么通過阻塞角度設置旋轉135°

創建一個這樣的簡單模型。 檢查PickAndPlace的角度表。源位于180的角位置&#xff0c;而物料終結位于90的角位置。“返回默認位置”選項未被勾選。源每分鐘生成一個零件。啟動模擬時&#xff0c;Plant Simulation會選擇兩個位置之間的最短路徑。示例中的機器人無法繞135的角位…

Fisher信息矩陣(Fisher Information Matrix, FIM)與自然梯度下降:機器學習中的優化利器

Fisher信息矩陣與自然梯度下降&#xff1a;機器學習中的優化利器 在機器學習尤其是深度學習中&#xff0c;優化模型參數是一個核心任務。我們通常依賴梯度下降&#xff08;Gradient Descent&#xff09;來調整參數&#xff0c;但普通的梯度下降有時會顯得“笨拙”&#xff0c;…

Spring Boot集成Swagger API文檔:傻瓜式零基礎教程

Springfox Swagger 是一個用于構建基于 Spring Boot 的 RESTful API 文檔的開源工具。它通過使用注解來描述 API 端點&#xff0c;自動生成易于閱讀和理解的 API 文檔。Springfox 通過在運行時檢查應用程序&#xff0c;基于 Spring 配置、類結構和各種編譯時 Java 注釋來推斷 A…

接口測試基礎 --- 什么是接口測試及其測試流程?

接口測試是軟件測試中的一個重要部分&#xff0c;它主要用于驗證和評估不同軟件組件之間的通信和交互。接口測試的目標是確保不同的系統、模塊或組件能夠相互連接并正常工作。 接口測試流程可以分為以下幾個步驟&#xff1a; 1.需求分析&#xff1a;首先&#xff0c;需要仔細…

kafka-集群縮容

一. 簡述&#xff1a; 當業務增加時&#xff0c;服務瓶頸&#xff0c;我們需要進行擴容。當業務量下降時&#xff0c;為成本考慮。自然也會涉及到縮容。假設集群有 15 臺機器&#xff0c;預計縮到 10 臺機器&#xff0c;那么需要做 5 次縮容操作&#xff0c;每次將一個節點下線…

Spring Boot 概要(官網文檔解讀)

Spring Boot 概述 Spring Boot 是一個高效構建 Spring 生產級應用的腳手架工具&#xff0c;它簡化了基于 Spring 框架的開發過程。 Spring Boot 也是一個“構件組裝門戶”&#xff0c;何為構件組裝門戶呢&#xff1f;所謂的“構件組裝門戶”指的是一個對外提供的Web平臺&#x…

Linux 命令大全完整版(12)

Linux 命令大全 5. 文件管理命令 ln(link) 功能說明&#xff1a;連接文件或目錄。語  法&#xff1a;ln [-bdfinsv][-S <字尾備份字符串>][-V <備份方式>][--help][--version][源文件或目錄][目標文件或目錄] 或 ln [-bdfinsv][-S <字尾備份字符串>][-V…

遺傳算法初探

組成要素 編碼 分為二進制編碼、實數編碼和順序編碼 初始種群的產生 分為隨機方法、基于反向學習優化的種群產生。 基于反向學習優化的種群其思想是先隨機生成一個種群P(N)&#xff0c;然后按照反向學習方法生成新的種群OP(N),合并兩個種群&#xff0c;得到一個新的種群S(N…

【算法】堆

堆 heap&#xff0c;一棵完全二叉樹&#xff0c;使用數組實現的&#xff0c;但具備完全二叉樹的一些性質。一般總是滿足以下性質&#xff1a; 堆中某個節點的值總是不大于或不小于其父節點的值&#xff1b;堆總是一棵完全二叉樹。&#xff08;即除了最底層&#xff0c;其他層…

C/C++高性能Web開發框架全解析:2025技術選型指南

一、工業級框架深度解析&#xff08;附性能實測&#xff09; 1. Drogon v2.1&#xff1a;異步框架性能王者 核心架構&#xff1a; Reactor 非阻塞I/O線程池&#xff08;參考Nginx模型&#xff09; 協程實現&#xff1a;基于Boost.Coroutine2&#xff08;兼容C11&#xff09;…

使用PHP接入純真IP庫:實現IP地址地理位置查詢

引言 在日常開發中,我們經常需要根據用戶的IP地址獲取其地理位置信息,例如國家、省份、城市等。純真IP庫(QQWry)是一個常用的IP地址數據庫,提供了豐富的IP地址與地理位置的映射關系。本文將介紹如何使用PHP接入純真IP庫,并通過一個完整的案例演示如何實現IP地址的地理位…