質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

1173閲覧

UnityのUpdate関数の処理速度について

regulus123

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/10/13 17:55

UnityのUpdate関数を大量に記述すると処理が遅くなると言われていましたが、今のバージョン(Unity2018)では改善されているのでしょうか?

試しに1万個のオブジェクトをUpdate関数が記述されたスクリプトを入れた場合と、UpdateManagerなる物を作りUpdate関数を1つのスクリプトで実行した場合ではどちらも処理速度は余り変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

試してみたところ、Arrayに格納し、UpdateMeというメソッドを10000回呼んだところ、10倍程度早かったですよ。

ここを参考にしました
https://blogs.unity3d.com/jp/2015/12/23/1k-update-calls/

計測の仕方ですが、下記のようにして行いましたか?

最初のUpdateが実行された時にStopwatchを起動 (Script Execution Order で設定)、
LateUpdateでStopwatchを停止、
数分間のあいだ計測を続け、平均を出す。

一応計測用スクリプトを。

using System.Collections; using System.Collections.Generic; using UnityEngine; class TestScript : MonoBehaviour { int i; public void UpdateMe() { i++; } } using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; class TestScript2 : MonoBehaviour { float time; TestScript[] scriptList; List<float> timeList = new List<float>(); private void Awake() { var gos = GameObject.FindGameObjectsWithTag("Test"); scriptList = gos.Select(x => x.GetComponent<TestScript>()).ToArray(); } void Update() { time = Time.realtimeSinceStartup; foreach (TestScript s in scriptList) { s.UpdateMe(); } } private void LateUpdate() { float lapTime = Time.realtimeSinceStartup - time; timeList.Add(lapTime); if(timeList.Count > 60) { Debug.Log( timeList.Average() ); timeList.Clear(); } } }

投稿2018/10/15 03:24

編集2018/10/15 03:25
ganta7188

総合スコア436

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

regulus123

2018/10/15 09:44 編集

提示していただいたスクリプトを試してみましたが、速度的には速くはありませんでした。むしろUpdateMeを使わずに各々でUpdateを使った方が速かったです。 記事が3年前の物なので、2018年版では仕様が変わっている可能性がありますね。
guest

0

同じ数のメソッドを呼び出しているなら変わりません。

投稿2018/10/13 21:36

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問