たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【Unity】ボタンを押している間、ゲージを減少をさせる

以下の記事で紹介しているゲームで、ボタンを押している間、時間をスローにする処理を実装しています。ただ、無限に時間操作ができてしまうと面白くないので、ボタンを押している間ゲージを減少させて、0になったら操作できないようにしました。

c-taquna.hatenablog.com

(時間操作の記事ができたらリンク貼る)

使用したツール / 環境

  • Unity 2018.13f1

今回つくったもの

youtu.be

ちょっと分かりづらいかもしれないですが、緑色のゲージが減少しています。

どのように実現しているか

Unityサイド

まずはUIを配置します。
f:id:c_taquna:20190105105001j:plain
※上の"AreaClockGuage"はCanvasです。

f:id:c_taquna:20190105105302j:plain:w300
※ゲージが2つあるのは左手・右手を変更した時用です。

AreaClockGuage(Canvas) の配置

f:id:c_taquna:20190105105353j:plainf:id:c_taquna:20190105122044j:plain
CanvasはRotationでy軸に対して180度回転させています。これはPivotを1にした時に左側に軸を持っていきたかったためです。
Pivotの値は0.5(デフォルト) → 1に変更しています。左側の画像を見てもらえるとわかるように、左側に軸が来ています。

Panel の配置

f:id:c_taquna:20190105110142j:plainf:id:c_taquna:20190105110145j:plain
PanelはPivotを1にした時に右側に軸が来るようにしています。(なんでこうしたのか思い出せない、、、)

これで、Unity側の準備は完了しました。

Scriptサイド

Unity側の準備は完了と書いたのですが、実際はもう一つオブジェクトを作成してスクリプトをアタッチする必要があります。今回は、ゲージを減らす処理を書いたスクリプトとそれを呼び出すスクリプトです。

呼び出される側の処理

こっちの処理ではpublicで使用するゲージを定義しているので、InspectorからCanvasを指定してください。

呼び出す側の処理
if (OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger) && GetComponent<GuageDecreasing>().restGuage >= 0)
{
    GetComponent<GuageDecreasing>().Decreasing();
}

別のスクリプトから、上記コードを実行します。Update内で実行してください。ボタンを押しているかつゲージの残量があるときはゲージが減少していきます。

スクリプトは全体の中から切り貼りしたので、おかしな部分があるかもしれないですが、まとめてしまうと、ゲージを用意して、Decreasingメソッドをボタンを押している間実行しておけば問題ありません。