3-11 Regenerating Energy Over Time
今天要來介紹一個小功能,讓Energy隨著時間慢慢回復。本章直接貼上程式碼,只要在Energy.cs的Update中加個條件式判斷,並再增加兩行程式碼即可完成功能。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using RPG.CameraUI;
namespace RPG.Character{
public class Energy : MonoBehaviour {
[SerializeField] RawImage energyBarRawImage;
[SerializeField] float maxEnergyPoints = 100f;
[SerializeField] float regenPointPerSecond = 1f;
float currentEnergyPoints;
void Start () {
currentEnergyPoints = maxEnergyPoints;
}
void Update(){
if (currentEnergyPoints < maxEnergyPoints) {
AddEnergyPoint ();
UpdateEnergyBar ();
}
}
private void AddEnergyPoint(){
// 每秒自動恢復能量,由於Update是每個Frame都會執行,故須使用deltaTime取得Frame的間隔時間
float pointsToAdd = regenPointPerSecond * Time.deltaTime;
currentEnergyPoints = Mathf.Clamp (currentEnergyPoints + pointsToAdd, 0, maxEnergyPoints);
}
public bool IsEnergyAvailable(float amount){
return amount <= currentEnergyPoints;
}
// 消耗的魔力由SpecialAbilityConfig決定,傳到amount
public void ConsumeEnergy(float amount){
float newEnergyPoint = currentEnergyPoints - amount;
currentEnergyPoints = Mathf.Clamp (newEnergyPoint, 0, maxEnergyPoints);
UpdateEnergyBar ();
}
void UpdateEnergyBar(){
float xValue = -(EnergyAsPersent() / 2f) - 0.5f;
energyBarRawImage.uvRect = new Rect(xValue, 0f, 0.5f, 1f);
}
float EnergyAsPersent(){
return currentEnergyPoints / maxEnergyPoints;
}
}
}
留言
張貼留言