端が直線にならないHPゲージの作り方

端が直線にならないHPゲージの作り方

 ゲージをImageのFilledを用いて作成すると、端が直線になってしまいます。そこで、ゲージの形を維持したまま、動かす方法がないかと考え、以下の方法を思いつきました。
※端が直線にならないHPゲージの作り方(Shader)はこちら

Maskを使用した方法

その1

 Create→UI→ImageからCanvesに背景用Image、Mask用Imageとゲージ用Imageを作成します。

ゲージ用ImageはMask用Imageの子にします。それぞれにSpriteをアタッチします。Mask用のImageにはゲージのSpriteをアタッチします。

Mask用のImageにAddComponentからMaskを選択します。

あとはゲージ用ImageのPositionを変更すればゲージを動かすことができます。

画像を見てわかるように左端がきれいに処理されていないことがわかります。これは、Maskがステンシルバッファで処理されているためです。そこで、Maskを使用した両端がきれいに表示されるゲージを作りました。

その2

 Maskを使用してきれいに処理できないものかと考えた結果、新たにゲージが半分だけ表示されるMask画像を作成し、半分表示したゲージを左右に配置する方法で作成しました。

その1と同じようにImageを作成します。Mask用Imageには上のMask画像を使用します。そして、作成したImageを複製し、RotationのYに180と入力し回転させます。

作成したゲージを動かすには、左右のMask用ImageをX方向へ動かし、その子であるゲージ用画像を反対方向へ動かすことでゲージを動かすことができます。例えばMask用ImageのPos Xを-50としたとき、ゲージ用ImageのPosは50とすると左端を動かさずにゲージを縮めることができます。

・Script

 目的の動作するかを確認するためにScriptを作成しました。ゲージの背景、ゲージ及びマスク用SpriteとSliderをアタッチすれば動作します。

・実行結果

 上記Scriptを実行した結果はこちらです。両端の形状を変形させずにゲージを動かすことができました。

ImageのFilledを使用した方法

 その2で作成したゲージと同じものが、Mask画像を使用せずにImageのFilledを使えば作成できるのでは、と考えScriptを作成しました。

・Script

 作成したScriptはこちらです。ゲージ及びマスク用SpriteとSliderをアタッチすれば動作します。

・実行結果

 Maskを使用した場合と同じ動作をしています。

終わりに

 Unityに用意されている機能を用いて作成したところ、目的の動作を行ってくれました。しかし、もっと良い方法がないものかと考えた結果、shaderで同様の動作を実現できるのではと考え、新たにshaderを作成しました。このことに関しては次回、記事にする予定です。

※記事を作成しました。
端が直線にならないHPゲージの作り方(Shader)はこちら