Skip to content

Instantly share code, notes, and snippets.

はじめに

UdonSharpにおけるVector3の値操作が、パフォーマンスやメモリ使用にどのような影響を与えるのかを調査しました。

通常のUnity(MonoBehaviour)環境では、Vector3の値を一度変数としてキャッシュし、必要に応じて再利用することで、newの回数を減らし、処理速度とメモリ効率の向上が図れます。 これは一般的なテクニックとして広く知られています。

しかし、同様の手法がUdonSharp環境でも有効なのかについては検証していなかったため、詳細な調査を行いました。

テストコード(MonoBehavior)

using UnityEngine;

UdonSharpスクリプトの数によるCPU負荷について

UdonSharpスクリプトの数が、CPU負荷にどのような影響を与えるかを検証しました。 特に、ライフサイクルメソッドの有無による影響を調査しています。


テスト方法はInstantiateを使用してスクリプト付きオブジェクトを生成し続け、FPSが20未満になるまでに生成できた数を記録して評価します。

テスト項目

UdonSharpでクラス構造を作成したときのアクセスベンチマーク結果

さまざまな方法でクラス構造を作成して$"a: {a}, b: {b}" の形式で文字列出力するサンプルコードを実行し、アクセス速度を測定しました。以下は、100,000回の文字列出力にかかる時間を比較した結果です。

作成するクラス構造

public class TestClass{
  public int A;
  public string B;
}
@iwacchik
iwacchik / NavigationStaticSetter.cs
Created December 9, 2023 08:02
Unity2022環境でNavigation Staticをオンにするエディタ拡張ツール
using UnityEditor;
public class NavigationStaticSetter
{
// Hierarchy上のゲームオブジェクトを右クリックでNavigationStaticSetterを使用するとNavigationStaticがオンになります
[MenuItem("GameObject/NavigationStaticSetter", false, 0)]
static void SetStaticFlags()
{
// 選択したゲームオブジェクト
var go = Selection.activeGameObject;
@iwacchik
iwacchik / VRCRagdollSystem.cs
Created June 6, 2023 02:28
プレイヤーをRagdoll(ぐにゃぐにゃ状態)にするVRCワールドギミック
using UdonSharp;
using VRC.SDKBase;
using VRC.Udon.Common.Interfaces;
/// <summary>
/// プレイヤーをRagdoll(ぐにゃぐにゃ状態)にするVRCワールドギミック
/// </summary>
public class VRCRagdollSystem : UdonSharpBehaviour
{