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遊戲
- unity入門—五分鐘製作一個理論上的遊戲Unity遊戲
- 使用Unity製作遊戲AIUnity遊戲AI
- 遊戲特效有哪些製作的分類遊戲特效
- 積分商城_積分系統_積分業務邏輯與管理_OctShop
- 微信公眾號簽到積分的功能怎麼製作?微信公眾號簽到積分的功能製作教程
- 會員積分體系設計
- SPSS統計作圖教程:百分條圖/堆積條圖SPSS
- 動作遊戲系統設計概述遊戲
- matlab對不定積分和定積分的計算Matlab
- 【數值計算方法】數值積分&微分
- 【微積分】不定積分
- 1002,概統,積分
- 二重積分方法
- 直播商城系統原始碼,js製作倒數計時,天,小時,分,秒原始碼JS
- 羽毛球比賽積分系統02
- 羽毛球比賽積分系統03
- 企業員工福利積分商城系統
- 我們跟Unity聊了聊,如何助力3A遊戲製作Unity遊戲
- 如何設計一個電商平臺積分兌換系統?
- Logo如何設計製作?線上製作logo一分鐘完成!Go
- 用Unity做個遊戲(二) – 事件系統Unity遊戲事件
- 羽毛球比賽積分系統--需求分析
- 積分
- 用unity製作簡單的太空遊戲(2)-簡單炮臺Unity遊戲
- 如何製作一款Galgame(二):galgame分幕,分鏡創作和演出製作GAM
- 區塊鏈積分聯盟模式系統如何開發?(區塊鏈積分聯盟模式系統開發原始碼demo)區塊鏈模式原始碼
- 如何區分Linux和Unix?作業系統!Linux作業系統
- 阿里二面:設計一個電商平臺積分兌換系統!阿里
- 半球積分
- 不定積分
- 二維或三維的分佈積分方法(格林公式)7公式
- win10系統U盤製作方法_製作win10系統u盤步驟Win10
- 很多賺積分的方法並不靠譜
- 微積分小感——3.簡單積分
- 小遊戲的製作遊戲
- 如何用python計算不定積分Python
- 使用pyqt5製作簡單計分桌面應用QT