0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity 初心者】SliderのValueがゲーム中に左右入力で動いてしまう。スクリプト上は問題ないのに!

Last updated at Posted at 2025-03-28

どうもUnity初心者です。初投稿なので、お手柔らかにお願いします。

前提1

以下の条件を全て含む。
・アクションゲーム
・AttackやJumpなどをマウスクリック(Button含め)で行うゲーム。
・スクリプト上は問題ない場合。

前提2

・以下のゲームのような感じタイトルなし.png


①ゲーム全体のCanvas( Screen Space - Overlay かScreen Space - Camera)
➁PlayerのHPバー専用のCanvas( World Space)
③HPバー(Sllider)

経緯と不具合

・2Dゲームで、PlayerとEnemyのHPバーを制作中に、以下の不具合が発生。
・Slider(HPバーとして使用)のValueが左右入力で勝手に動いていしまう。しかも、Plaeyrだけでなく、Enemyも。

解決

・インスペクター上でSliderコンポーネントのInteractableのチェックを外し、falseに。

説明(GPTに聞いた)

【Interactableとは】
・Button・Slider・Toggleなどの各UIパーツごとにあり、そのUIがタッチで反応するかを制御する。

【なぜ interactable = true だと Slider.value が勝手に動くのか】
・前提として、Slider は選択状態だとキーボード入力 or ゲームパッド入力で操作できる。
・interactable = true の場合、Sliderを一度クリックすると、クリックに反応しUIイベントシステムがSliderを選択状態にしてしまう。選択状態になったSliderは、キーボードの左右入力を受け入れ、それに応じて値を変化させてしまうから。

※Sliderをクリックしていない場合でもなる?
・スクリプトの処理やEventSystemの仕様で、クリックしていないアクティブなUI要素が選択状態になってしまう場合があるらしい。(ちなみに私はこのパターン)

【不具合の流れ】
・ゲーム中、Attackなどの動作で画面をクリック or 意図せずスライダーの部分をクリック→Sliderが選択状態になり、左右のInput入力を受けいれる → 左右のInput入力でSlider.Valueが動く。

余談: CanvasのGraphic Raycasterについて

【Graphic Raycasterとは】
・Canvas に付いているコンポーネントで、「ユーザーのクリックやタップをUIに届かせるかどうか」を制御する。
・ Interactableは各UIパーツについている。

つまり、CanvasのGraphic Raycasterをインスペクター上でflaseにすれば、UIはクリックに反応しない。 SliderのInteractableよりCanvasのGraphic Raycasterをfalseにした方がいい?

では、上記:point_up:の前提2を例で考えてみる

▶①のCanvasのGraphic Raycasterをfalseにする場合
・これをfalseにすると、ゲーム全体のUIのクリック検出ができないので、私の場合、Buttonがあるから無理。

▶➁のCanvasのGraphic Raycasterをfalseにする場合
・これをfalseにしても、①のCanvasが全体を覆っているのでクリック検出はできる

以上から、今回の例の場合、Graphic Raycasterでは対応できないためSliderのInteractableをfalseにするのが正解。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?