2016-07-23 14 views
0

マスクを使用して2D UIヘルスバーを作成しようとしています。私は黒の背景画像、ヘルスバーの完全な部分の緑色のヘルスバー画像、ヘルスバーの空き部分の灰色のマスク画像を持っています。黒い背景はサイズが約1×0.1で、緑色とグレーの部分は若干小さく、黒い背景の小さな部分がヘルスバーのエッジの周りに見えるようになります。奇妙な動作UIマスクから

私のシーンにヘルスバーを追加すると、黒い背景のみが表示されます。 Maskスクリプトをオフにすると、緑色の部分が表示されます。最も奇妙なことは、緑の部分の幅を50のような大きな数に増やすと、バー全体が緑色に変わります(細い黒い枠を除く)。その後、私がFill Amountを変更すると、バーは0.51から1まで完全にとどまり、0から0.49まで空になります。 Fill Amountを0.49と0.51の間で動かすと、バーの緑色の部分が収縮して膨張します。

Hereは、ヘルスバーの階層です。

Hereは、インスペクタのステータスバーキャンバスです。 Render ModeWorld Spaceです。それがこの問題に関連するかどうかはわかりません。私はStatus Bar Canvas Scriptと呼ばれる私自身のスクリプトを持っていますが、私はすべてのコードをコメントアウトしました。

Hereは、インスペクタのステータスバーの背景(黒い境界線)です。

Hereは、インスペクタのマスク(塗り潰されていない灰色のバー)です。

Hereは、インスペクタの緑色のバーです。

This結果は次のようになります。

ThisMaskスクリプトをオフにした場合の結果は次のようになります。

問題は、Unityがシーン内の「コンテンツ」オブジェクトをどのように拡大しているかに関係しているようですが、実際に何が行われているのかわかりません。

答えて

0

マスクホルダーとFillAmount Prefabの両方に、UIイメージコンポーネントとスプライトが含まれている必要があります。 MaskHolderにはマスクスプライトがあり、Contentにはヘルスバースプライトが含まれます。 MaskHolderはまた、その中にMask成分を有し、Show Mask Graphicsが選択される。

enter image description here

そして、ちょうどヘルスバーのためのキャンバスを使用しないでください:あなたの階層のセットアップは、以下のようにする必要があります。

+0

ヘルスバーのためだけにキャンバスを使用しないでください。 'OnGUI'を使用せずにUI要素を描画するためのキャンバスは必要ありません(これはお勧めです)。私はユニティにとって初めての人なので、多分私は誤解しています。 –

+0

1つのキャンバスには、Buttons、Background、Textsなど、必要に応じてほとんどのUIオブジェクトを子として持つことができます。グループとして扱うための単一のタスク指向のオブジェクトを持つ空の 'Rect'オブジェクトをキャンバスに作成できます。したがって、いつでもボタンをアクティブにする必要があるときは、オブジェクトを保持するボタンをクリックします。たとえば、カメラやオーバーレイのような画面空間を配置する必要がある場合、マルチキャンバスが必要です。ほとんどのUIオブジェクトを1つのキャンバスにまとめることができます。健康バーのキャンバスは必要ありません。他の提案に使用されている同じキャンバスの子として、ヘルスバーを保持している画像または空のオブジェクトにすることができます –