
カジュアルゲーム等で使える、パワーメーター各種[棒状、円形(太め、細め)、グラデーション]を実装。
最初からループ、往復ループのコードもあり。
↓の自作ゲームで実際に使いました(コード部分)。
サンプル動画
往復ループのサンプル動画
最初からループのサンプル動画
パワーメーター (棒状)
ざっくりした手順
- スライダーを作成。
 - クリックで値を変更出来ないように設定。
 - 持つ所を削除。
 - 余白を0に変更。
 - 色や画像をパワーメーターっぽくする。
 - コードで、Slider.valueを弄る。
 
詳細な手順
スライダー作成&キャンバスを設定
- 上部メニュー -> GameObject -> UI -> Sliderを選択。
 - ヒエラルキー -> Canvasを選択。
 - インスペクター -> Canvas Scalerコンポーネントを設定。
- UI Scale Mode -> Scale With Screen Size:(X:1920、Y:1080)等に変更。
 - Screen Match Mode:Match Width Or Heightか、Expand辺りに設定。
 
 
スライダーを設定
- ヒエラルキー -> Sliderを選択。
 - インスペクター -> Rect Transformコンポーネントを設定。
- 任意の位置、大きさに設定。
サンプルでは[Width:960、Height:216] 
 - 任意の位置、大きさに設定。
 - インスペクター -> Sliderコンポーネントを設定。
- Interactable:無効化
 - Direction:任意の向き。
 
 - ヒエラルキー -> Sliderの子のHandle Slide Areaを選択 -> 右クリック -> Delete
 - ヒエラルキー -> Fill Areaを選択。
 - インスペクター -> Rect Transformコンポーネントを設定。
- Left:0
 - Right:0
 
 - ヒエラルキー -> Fill Area下のFillを選択。
 - Rect Transformコンポーネントを設定。
- Width:0
 
 
パワーメーターの塗り潰し色の設定
単色の場合 (エディタ上で色を変更)
- ヒエラルキー -> Fill Area下のFillを選択。
 - インスペクター -> Imageコンポーネントを設定。
- Color:任意の色に設定。
パワーメーターが満たされている状態の色。
自分は[255, 128, 0, 255]に設定した。 
 - Color:任意の色に設定。
 
グラデーションの場合 (画像を用意)


- 圧縮済み
 - ライセンス:CC0
 
- ↑の画像を保存。
 - Projectウィンドウ -> 任意のフォルダに、画像をドラッグ&ドロップしてインポート。
 - インスペクター -> Texture Typeを、Sprite (2D and UI)に変更。
 - Applyを選択。
 
パワーメーターの背景の設定
- ヒエラルキー -> Backgroundを選択。
 - インスペクター -> Imageコンポーネントを設定。
 - Color:任意の色に設定。
パワーメーターが満たされていない状態の色。
サンプルでは[255, 255, 255, 64]に設定した。 
コード
新規スクリプトを作成するか、既存のスクリプトに追記。
using System.Collections;
//使わなかったので一応コメントアウト。
//using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//クラス名を"PowerMeter"にするとコルーチン名と衝突してエラーが出るので何か別の奴で。
//UIManager的な物を作っていたら、それに追記したら良い。
public class PowerMeterTest : MonoBehaviour
{
//スライダーをインスペクターから紐付け。
	[SerializeField]
	Slider powerMeterSlider;
//パワーメーターのスピードの倍率。
	float powerMeterSpeedRate = 1.0f;
//パワーメーターを止めた時の値。
//0~1までの間の値が入るので、使用する時はMathf.Lerp(powerMin, powerMax, powerMeterValue)みたいな感じで。
	float powerMeterValue = 0;
//パワーメーターコルーチンの経過時間。
	float powerMeterElapsedTime;
//コルーチンの管理用。
	Coroutine powerMeter;
//棒状のパワーメーターを開始したい時に呼ぶ。
	void StartPowerMeter()
	{
		powerMeter = StartCoroutine("PowerMeter");
	}
//棒状
	IEnumerator PowerMeter()
	{
		powerMeterElapsedTime = 0;
		while (true) {
			powerMeterElapsedTime += Time.deltaTime * powerMeterSpeedRate;
//最後まで行くと往復ループVer。
			powerMeterSlider.value = Mathf.PingPong(powerMeterElapsedTime, 1.0f);
//最後まで行くと最初からループVer。
//			powerMeterSlider.value = powerMeterElapsedTime % 1.0f;
//画面をタップすると停止してパワーを確定。
			if (Input.GetMouseButtonDown(0)) {
				powerMeterValue = powerMeterSlider.value;
				yield break;
			}
			yield return null;
		}
	}
}
パワーメーター (円形)
ざっくりした手順
- パワーメーターっぽい画像を用意。
 - イメージを作成。
 - Source Image:(1)の画像を設定。
 - Image Type:Filledに設定。
 - Image.fillAmountを弄る。
 
詳細な手順
パワーメーター用画像をダウンロード&インポート
- 圧縮済み
 - ライセンス:CC0
 
- ↑の画像を保存。
 - Projectウィンドウ -> 任意のフォルダに、画像をドラッグ&ドロップしてインポート。
 - インスペクター -> Texture Typeを、Sprite (2D and UI)に変更。
 - Applyを選択。
 
Imageを作成&設定
- ヒエラルキー -> Imageを選択。
 - インスペクター -> Rect Transformコンポーネントを設定。
- Width:任意の値。
 - Height:任意の値。
サンプルでは、[各256]。 
 - インスペクター -> Imageコンポーネントを設定。
- Source Image:先程のSpriteを設定。
 - Image Type:Filled
 - Clockwise:任意
(有効化で時計回り、無効化で反時計回り) 
 
コード
新規スクリプトを作成するか、既存のスクリプトに追記。
using System.Collections;
//使わなかったので一応コメントアウト。
//using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//クラス名を"PowerMeterRadial"にするとコルーチン名と衝突してエラーが出るので何か別の奴で。
//UIManager的な物を作っていたら、それに追記したら良い。
public class PowerMeterRadialTest : MonoBehaviour
{
	
//イメージをインスペクターから紐付け。
	[SerializeField]
	Image powerMeterImage;
//パワーメーターのスピードの倍率。
	float powerMeterSpeedRate = 1.0f;
//パワーメーターを止めた時の値。
//0~1までの間の値が入るので、使用する時はMathf.Lerp(powerMin, powerMax, powerMeterValue)みたいな感じで。
	float powerMeterValue = 0;
//パワーメーターコルーチンの経過時間。
	float powerMeterElapsedTime;
//コルーチンの管理用。
	Coroutine powerMeter;
//円形のパワーメーターを開始したい時に呼ぶ。
	void StartPowerMeterRadial()
	{
		powerMeter = StartCoroutine("PowerMeterRadial");
	}
//円形
	IEnumerator PowerMeterRadial()
	{
		powerMeterElapsedTime = 0;
		while (true) {
			powerMeterElapsedTime += Time.deltaTime * powerMeterSpeedRate;
//最後まで行くと往復ループVer。
			powerMeterImage.fillAmount = Mathf.PingPong(powerMeterElapsedTime, 1.0f);
//最後まで行くと最初からループVer。
//			powerMeterImage.fillAmount = powerMeterElapsedTime % 1.0f;
//画面をタップすると停止してパワーを確定。
			if (Input.GetMouseButtonDown(0)) {
				powerMeterValue = powerMeterImage.fillAmount;
				yield break;
			}
			yield return null;
		}
	}
}
      


