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?

子クラスにおけるOnSetActiveについて

Posted at

発生している問題

親クラスに表示/非表示の処理を記述し、子クラスで表示/非表示が切り替わった際の処理を実装したい時、何も考えずに以下のように実装していました

親クラス

    public bool IsActive
    {
        get
        {
            return gameObject.activeSelf;
        }
        set
        {
            OnSetActive(value);
            gameObject.SetActive(value);
        }
    }

    protected virtual void OnSetActive(bool isActive)
    {
        if(isActive)
        {
            Debug.Log("表示");
        }
        else
        {
            Debug.Log("非表示");
        }
    }

子クラス

    // 表示/非表示が切り替わった
    protected override void OnSetActive(bool isActive)
    {
        if(isActive)
        {
            Debug.Log("表示された");
        }
        else
        {
            Debug.Log("非表示になった");
        }
    }

子クラスの関数が読みづらい!

OnSetActive()がoverrideされ、見ただけでは何の処理をしているのか分かりづらく、個人的に納得いきませんでした、、、

解決

問題となってるのは子クラスでの読みにくさなので、overrideする関数名を変更する

子クラス(修正後)

    // 表示時の初期化
    protected override void OnShowInit()
    {
        Debug.Log("表示された");
    }

    // 非表示時のリセット
    protected override void OnHideReset()
    {
        Debug.Log("非表示になった");
    }

個人的にはOnShow()ではなく、処理内容も簡潔に説明したOnShowInit()としたい
上記の子クラスに伴い、親クラスも修正する

親クラス(修正後)

    public bool IsActive
    {
        get
        {
            return gameObject.activeSelf;
        }
        set
        {
            if(value)
            {
                OnShowInit();
            }
            else
            {
                OnHideReset();
            }
            gameObject.SetActive(value);
        }
    }

    protected virtual void OnShowInit()
    {
        Debug.Log("表示");
    }

    protected virtual void OnHideReset()
    {
        Debug.Log("非表示");
    }

まとめ

親クラスにif分を追加し、関数を細分化することで読みやすくなった

正直どっちでも動くし気にしない!という方もいると思いますが、参考になればと思います。

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?