チャックブログ

UnityやC#などをメインに公開していきます。C++も勉強始めました!

【Unity】なぜGetComponentを毎フレーム取得することが推奨されていないのか

*毎フレームGetComponent よくGetComponentは毎フレームやることはよろしくないという話を聞きますがなぜダメなのでしょうか?

*試してみよう! 今回は二つのScriptを用意しました

片方は先にComponent取得してから10万回Transform.positionにvector(0,0,0)を入れる

  private void Start()
    {
        Transform t=GetComponent<Transform>();
        for (int i = 0; i < 100000; i++)
        {
            t.position = new Vector3(0,0,0);
                } 
       }

もう片方は10万回GetComponetして10万回Transform.positionにvector(0,0,0)を入れる

    private void Start()
    {
        for (int i = 0; i < 100000; i++)
        {
            GetComponent<Transform>().position = new Vector3(0,0,0);
        }
    }

*結果 f:id:tilyakuda:20190422121058p:plain

2倍近く差が出てるんですけど… 今回は10万回で検証しましたがこれが毎フレーム実行されたとしても2倍近く処理が無駄ってことですね。 仕様上仕方がない理由以外ではUpdateでGetComponentをするこはよろしくなさそうですね。