Unity遊戲積分/計分系統製作方法
Unity遊戲積分/計分製作方法
前言:
本篇部落格是我學習unity基礎的最後一篇學習筆記,如果以後有實用的開發方法還是會分享出來。之後我準備製作一個具有完整客戶端和服務端的遊戲專案,並寫一個客戶端和服務端入門學習的部落格系列。有想過整理一些基礎開發的常見問題和常用知識分享出來,不過論壇裡已經有不少這種總結帖了,前人栽樹後人乘涼嘛(白嫖是真的舒服) 。
言歸正傳,本篇部落格將講解遊戲開發中常見的積分/計分系統的製作,看過論壇有很多這種帖子,但基本都是從一個大型系統裡進行講解,今天我把這個方法獨立挖出來做個小案例,來分析這個系統的實現原理,為遊戲開發提供更多開發思路。
如果有朋友還想學習如何在【遊戲進行時】,【遊戲結束時】等不同遊戲狀態來顯示不同的積分/計分UI效果可以參考我之前寫的UI控制方法,在不同的遊戲狀態下呼叫切換UI的方法就能實現:
Unity控制多組UI的顯示與隱藏
(一)先搭建一個UI用來顯示積分,這裡以0為初值,顯示得分數字的Text命名為ScoreTable。可以換一下字型來加強顯示效果,預設字型太醜了 。
(二)搭建一個簡單的場景,設定得分邏輯:藍色方塊為玩家Player,紅色方塊為得分物體ScoreObj,把ScoreObj拉大一點,使Player穿過ScoreObj一次,遊戲分數就+1,沒錯,要用到觸發器Trigger的碰撞檢測。
(三)給Player新增碰撞體和Rigidbody,給ScoreObj新增碰撞體,有些版本的unity會自動新增碰撞體,碰撞體大小可以適當修改(記得在ScoreObj碰撞體元件處勾選Is Trigger)。
(四)建立指令碼PlayerControl,開始編寫玩家程式碼,我們可以直接套用傳統的WASD移動程式碼來控制Player,注意,這裡會定義一個Player得分的事件,並將這個事件傳送給控制UI的指令碼的接收器,這就是積分/計分系統的實現核心(接收器和處理器的定義詳細見下一步的UI指令碼),如果你不理解C#的事件是什麼,可以論壇搜尋或去我的部落格主頁查詢。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
public delegate void PlayerScore(int temp);//定義委託
public event PlayerScore GetScore;//定義得分事件,用於發出得分的訊息
void Start()
{
}
void Update()//在Update()中新增Player的移動控制
{
if (Input.GetKey(KeyCode.W))
{
this.transform.Translate(Vector3.forward * Time.deltaTime * 2f);//物件可以朝著世界座標向前移動
}
if (Input.GetKey(KeyCode.A))
{
this.transform.Translate(Vector3.left * Time.deltaTime * 2f);//物件可以朝著世界座標向前移動
}
if (Input.GetKey(KeyCode.S))
{
this.transform.Translate(Vector3.back* Time.deltaTime * 2f);//物件可以朝著世界座標向前移動
}
if (Input.GetKey(KeyCode.D))
{
this.transform.Translate(Vector3.right * Time.deltaTime * 2f);//物件可以朝著世界座標向前移動
}
}
public void OnTriggerExit(Collider other)//設定觸發器碰撞事件,一旦Player穿過了ScoreObj,就傳送得分事件
{
if (other.gameObject.name.Equals("ScoreObj"))//檢查Player碰撞的物體是不是ScoreObj
{
if (GetScore != null)//檢查事件是否為空,即有沒有接收器訂閱它
{
GetScore(1);//傳送得分事件訊息,為接收器提供引數1,實現+1分的效果
}
}
}
}
(五)現在建立新的指令碼UIScore並開始編寫,該指令碼將用於接受Player得分的事件並進行相應處理(改變UI的積分值)。其實大部分時候這個指令碼都命名為GameManager,用於管理遊戲全域性邏輯,這裡只演示計分效果,我們可以簡化一下命名。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//引入unity的UI編輯庫
public class UIScore : MonoBehaviour
{
public PlayerControl player;//定義PlayerControl類
public int score;//定義積分變數
public Text ScoreUI;//定義要修改的Text
void Start()
{
player.GetScore += Player_GetScore;//呼叫PlayerControl類,訂閱Player的得分事件,start函式已經作為了我們的訊息接收器
}
private void Player_GetScore(int score)//定義訊息處理器來處理訊息,給屬性賦值,改變積分值
{
Score += score;
}
void Update()
{
}
public int Score//定義積分屬性,使用屬性來進行控制,使每次積分被改變時就呼叫一次文字顯示的修改
{
get
{
return score;
}
set
{
score = value;
ScoreUI.text = score.ToString();//讓UI顯示的分數等於score的值,這裡有String型別的轉換
}
}
}
(六)現在邏輯和程式碼都設定完畢了,將指令碼PlayerControl拖拽給Player,再建立一個空物體並命名ScoreManager,將指令碼UIScore拖拽給ScoreManager,將ScoreTable拖進UIScore指令碼為其定義的元件位置,將Player拖進UIScore指令碼為其定義的類位置,具體如下圖。
(七)執行!檢視得分效果!
(八)總結:積分/計分系統的實現就是依靠接收player得分的事件通知,然後做出相應的處理,這個事件何時傳送以及它的傳送者則由遊戲邏輯決定。積分/計分系統可以更加複雜也可以使用其他方法,本篇部落格為該系統提供一種方便封裝管理的製作思路。
相關文章
- 利用NEO與Unity製作遊戲(第3部分)Unity遊戲
- 積分商城_積分系統_積分業務邏輯與管理_OctShop
- unity入門—五分鐘製作一個理論上的遊戲Unity遊戲
- 運動會積分系統
- 微信公眾號簽到積分的功能怎麼製作?微信公眾號簽到積分的功能製作教程
- 作業系統統計資料分類作業系統
- 使用Unity製作遊戲AIUnity遊戲AI
- 遊戲特效有哪些製作的分類遊戲特效
- Unity 2D遊戲製作Unity遊戲
- Unity製作遊戲中的場景Unity遊戲
- SPSS統計作圖教程:百分條圖/堆積條圖SPSS
- 直播商城系統原始碼,js製作倒數計時,天,小時,分,秒原始碼JS
- 企業員工福利積分商城系統
- 如何設計一個電商平臺積分兌換系統?
- Logo如何設計製作?線上製作logo一分鐘完成!Go
- 區塊鏈積分聯盟模式系統如何開發?(區塊鏈積分聯盟模式系統開發原始碼demo)區塊鏈模式原始碼
- 阿里二面:設計一個電商平臺積分兌換系統!阿里
- unity製作刮刮樂效果Unity
- win10系統U盤製作方法_製作win10系統u盤步驟Win10
- 如何區分Linux和Unix?作業系統!Linux作業系統
- 動作遊戲系統設計概述遊戲
- ios製作一個評分儀表iOS
- Excel分類軸介紹與製作Excel
- 區塊鏈積分商城開發運營版丨區塊鏈積分商城系統開發(案例及詳細)區塊鏈
- win10系統隨身碟製作方法_製作win10系統u盤步驟Win10
- ThinkPHP會員積分機制分享平臺系統原始碼PHP原始碼
- 數商雲S2B2C積分商城系統
- w10系統如何去除分盤_win10系統去除分盤操作方法Win10
- 系統分頁
- [ACM]積木分發ACM
- 使用 django middleware 和 celery 隔離業務系統和積分系統的嘗試Django
- 系統模組劃分設計的思考
- 如何製作網點地圖,網點分佈圖怎麼製作地圖
- 詳細介紹在遊戲製作中的分形演算法(轉)遊戲演算法
- 我們跟Unity聊了聊,如何助力3A遊戲製作Unity遊戲
- 嵌入式系統定製開發的分層與專業的分類
- QNX 如何製作目標系統,製作系統映象,燒寫系統檔案
- 如何製作動態層分組報表