LoginSignup
0
1

More than 1 year has passed since last update.

[Unity] 重なり合うボタンを処理する

Last updated at Posted at 2021-10-14

全てのボタンが同じtransformの子になっている前提で、
重なり合っているボタンをこんな風に処理したい
bandicam-2021-10-14-15-15-55-631.gif

一番簡単なのは、OnClick()で

button.gameObject.transform.SetAsFirstSibling();

のように最背面に移動してしまうことなのですが、これだと次のボタンが押せるようになる代わりに表示も背面に隠れてしまいます。

そこで、

for (int i = 0; i < transform.childCount; ++i)
{
    UnityEngine.UI.Image img = _transform.gameObject.GetComponent<UnityEngine.UI.Image>();
    if (transform.GetChild(i).Equals(_transform))
    {
        img.color = Color.red;
        img.raycastTarget = false;
        transform.GetChild(i).SetAsLastSibling(); // 今回選択したものを最前面に
    }
    else if (!img.raycastTarget) // 前回最前面だったものを最背面にする
    {
        img.color = Color.white;
        img.raycastTarget = true;
        transform.GetChild(i).transform.SetAsFirstSibling();
    }
}

のように、今回選択したものは raycastTarget をfalseにして押せなくしつつ最前面に、前回選択していたものはraycastTarget を元に戻しつつ最背面に送ることで、選択したものを最前面に残しつつ、後ろのボタンを押せるようになります。

0
1
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
1