ゲージをスクリプトで減らす

投稿者: | 2020-03-18


2色のゲージをスクリプトで増減させてみました。

まず、ヒエラルキーにImageオブジェクトを新規作成します。すると、同時に親オブジェクトとしてCanvasオブジェクトが作られます。

これをクリックして、インスペクタで、Canvas ScalerコンポーネントのUI Scale Modeを「Scale With Screen Size」にします。

これで、画像のサイズに合わせてゲージのサイズも自動で変わります。

画像をインポートします。

画像をクリックして、インスペクタで、Texure Typeを「Sprite」にします。

Imageオブジェクトの方をクリックして、インスペクタのImageコンポーネントのSource Imageに、この画像をドラッグアンドドロップします。

画像をドロップすると、Imageコンポーネントに項目が増えます。その中のImage Typeを「Filled」にして、Fill Amountの値を小さくすると、画像がすべて表示されず途切れるようになります。


これをゲージに使います。

画像の途切れ方

Fill Methodを変えると、途切れる方式が変わります。


例えば、「Horizontal」だと横方向でしたが、「Vertical」だと縦方向にFill Amountが変化します。


Fill Methodごとに違ったFill Originが用意されています。


「Horizontal」で「Right」にすると、画像の右端に向かって途切れます。


他にもいろいろな種類があります。一部を紹介します。

Vertical / Top


Radical 90 / Bottom Left


Radical 90 / Top Left


Radical 180 / Bottom


Radical 180 / Left


Radical 360 / Bottom


Radical 360 / Right

これで円形のゲージも作れます。

2色のゲージを作る

画像を2種類用意します。


Imageオブジェクトにアタッチして、Rect Transformで横長にします。

Fill Methodは「Horizontal」、Fill Originは「Left」にします。

ヒエラルキーウィンドウでCanvasオブジェクトを選択して、Ctrl + Dで複製します。


元々のCanvasをクリックします。


インスペクタでCanvasコンポーネントのSort Orderを、もう一方のCanvasのSort Orderの値より大きくします。小さい値の方から先に描画されるので、値の大きいCanvasが手前に来ます。

今回は1にしました。

もう一方は0になっています。


複製して新たに作られたCanvasに含まれるImageオブジェクトをクリックします。


Source Imageにもう一方の画像をドラッグアンドドロップします。


これで、手前に表示されている複製元のImageのFill Amountの値を減らすと、画像が途切れた部分からもう一方の画像が見えるようになります。


画像の描画順は、ヒエラルキーウィンドウのImageオブジェクトの上下の順番でも変えられます。

この場合、上にあるImageオブジェクトから描画されます。
間違って順番が変わることが多いと思ったので、今回はCanvasを複製する方法にしました。

スクリプトで制御する

Image.fillAmountに値を入れると、Fill Amountの値をスクリプトで簡単に制御できます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameScript : MonoBehaviour
{

    public Image image;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetMouseButton(0))
        {
            image.fillAmount -= Time.deltaTime;
        }
        else {

            image.fillAmount += Time.deltaTime;
        }


    }
}
マウスの左クリックをしている間はゲージを減らして、離している間はゲージを増やしています。

色もスクリプトで変更できるので、画像はどちらも真っ白で良いかもしれません。


ImageコンポーネントのColorで好きな色に変えられます。


手前のImageにスクリプトを付けて、Fill Amountの値によって画像の色を変えてみます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ImageScript : MonoBehaviour
{

    Image image_f; 

    // Start is called before the first frame update
    void Start()
    {
        image_f = GetComponent<Image>();
    }

    // Update is called once per frame
    void Update()
    {

        if (image_f.fillAmount > 0.5f)
        {
            image_f.color = Color.green;
        }
        else if (image_f.fillAmount > 0.2f)
        {
            image_f.color = new Color(1f, 127f / 255f, 39f / 255f);
        }
        else
        {
            image_f.color = Color.red;
        }
    }
}
Image.colorに色を入れると画像の色が変わります。

コメントを残す

メールアドレスが公開されることはありません。