20210507のUnityに関する記事は3件です。

Unityでスクリプトのベンチマークをとる方法3選

概要 Unityでスクリプトのベンチマークをとる方法はいくつかあるが、その中で自分がよく使う3つを紹介する。 1. C#のStopwatchクラスを使う C#にはStopwatchというクラスが用意されている。 https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.stopwatch?view=net-5.0 このStopwatchクラスを使うことで処理にかかった時間を手軽に計測することができる。 サンプルコードは以下の通り。 var sw = new System.Diagnostics.Stopwatch(); // 計測開始 sw.Start(); // 計測したい処理 ... // 計測終了 sw.End(); // 計測結果を出力する System.Console.WriteLine($"処理時間:{sw.Elapsed}"); Stopwatchはその名の通りただのストップウォッチでしかないため、自分でStart~Endした時間を出力するだけである。 そのため手軽にざっくり処理時間を調べたい場合に使うと良い。 ElapsedはTimeStamp構造体のため、Millisecondsなどの細かい表示も可能。 https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.stopwatch.elapsed?view=net-5.0 2. Unity ProfilerのBeginSampleを使う UnityのProfilerにはBeginSample, EndSampleというメソッドが用意されている。 https://docs.unity3d.com/ja/current/ScriptReference/Profiling.Profiler.BeginSample.html これらのメソッドを使うことで、BeginSampleとEndSampleで挟んだ処理をProfilerで表示することができる。 サンプルコードは以下の通り。 // 計測開始 UnityEngine.Profiling.Profiler.BeginSample("test_sample"); // 計測したい処理 ... // 計測終了 UnityEngine.Profiling.Profiler.EndSample(); こちらはProfilerでの計測になるため、Stopwatchと違い処理にかかった時間だけでなく確保したメモリ量等も計測することができる。 そのためより詳細に調べたい場合に使用すると良い。 BeginSampleの引数で渡した文字列がProfilerに表示されるため、Profilerで検索しやすい名前にしておくとベター。 3. Performance Testing Extensionを使う UnityのTestRunnerには拡張機能としてPerformance Testing Extensionが用意されている。 https://docs.unity3d.com/Packages/com.unity.test-framework.performance@2.8/manual/index.html これはTestRunnerのテストコードの中に処理を計測するコードを書いてTestReportとして出力することができるものである。 導入方法については別記事にて記載してあるため、そちらを参照のこと。 https://qiita.com/hashikei/items/4c4be59418fcf0c4e5bd 導入後のサンプルコードは以下の通り。 using NUnit.Framework; using Unity.PerformanceTesting; public class TestPerformance { [Test, Performance] public void TestSample() { Measure.Method(() => { /* 計測したい処理 */ }) .MeasurementCount(10) .Run(); } } TestReportのサンプル https://docs.unity3d.com/Packages/com.unity.test-framework.performance@2.8/manual/viewing-results.html 導入方法が少し複雑でとっつきにくいが、MeasurementCountで計測回数を指定したり、計測結果をグラフで可視化してくれたりと、わりと便利な機能である。 SampleGroupでSampleUnitを設定することで、処理時間以外の値も計測することができる。 https://docs.unity3d.com/Packages/com.unity.test-framework.performance@2.8/manual/measure-custom.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

#9「VIVE Pro EyeのAR機能を有効化(セットアップ)する」【初心者】HTC VIVE Pro Eyeを使ってUnityでVRの開発を行ってみる.

はじめに 研究費でHTC VIVE Pro Eyeを購入した.16万なので個人で買うには高すぎる代物だが今後は安くなるかもしれないし一応メモ書きしていく. 環境一覧 SteamVR 1.15.19 Unity 2020.1.17f1 SRanipalRuntime 1.3.2.0 SDK SteamVR Plugin 2.7.2 sdk1.14.15 Vive SRanipalRuntime Plugin 13.3.0 インテル® Core™ i7-7700K NVIDIA GeForce GTX 1070 環境作成編 #1 Unityのセットアップをする 2021年 1月更新 #2 プロジェクトを作ってみる 2021年 1月更新 #3 VR開発のための環境を整える 2021年 2月更新 コントローラやHMDから入力を得る #4 VIVEコントローラのボタン入力を取得する 2021年 2月更新 #5 トリガーの押し具合やトラックパッドの位置情報の入力を取得する 2021年 2月更新 #6 ヘッドマウントディスプレイとコントローラの位置座標と回転を取得する 2021年 2月更新 #7 VIVE Pro Eyeの視線トラッキングを有効化(セットアップ)する 2021年 4月更新 #8 VIVE Pro Eyeのアイトラッキングを使って瞬きや視線を取得する2021年 4月更新 #8-おまけ VIVE Pro Eyeのアイトラッキングで計測できるデータについて(適宜更新)2021年 4月更新 #9 VIVE Pro EyeのAR機能を有効化(セットアップ)する(この記事)2021年 5月更新 今回の記事では, 1.HMD前面のカメラを有効化する. 2.実際にAR機能を試してみる. という流れ. 1.HMD前面のカメラを有効化する. まずSteamVRを起動する. 左上のメニューを開き「設定」を開く. タブに「カメラ」があるので切り替える. デフォルトではカメラが無効になっているので有効にする. 有効化すると"STEMVRを再起動"を押す. 2.実際にAR機能を試してみる. これでとりあえず有効化ができたので実際に動かしていきます. まずはRoom Viewをオンにします. パラメータが色々と出てきます. Room View StyleがARの表示方法を選べます. とりあえず有効化した状態でコントローラーのスタートボタンをダブルクリックします. するとAR機能がゲーム内で有効化されて実世界の情報が仮想空間上に表示されます. 試しにそれぞれの設定を動かしてみます. COLORED EDGES:カメラの画像をエッジに変換して表示する. COLORED GHOSTS:カメラの映像を色の濃淡のみで表示する. TRANSLUCENT PASS-THROUGH:カメラの画像を半透明で表示する. OPAQUE PASS-THROUGH:カメラの画像をそのまま表示する. という設定になっています. COLOREDの2種はそこまで遅れや画質が気にならないですがどうしてもカメラの映像をそのまま映すと遅れや画質が気になって酔いやすくなってしまいます. なのでShow Camera on Controllorを有効化してコントローラ横に小さなカメラ映像の表示もできます. こちらであれば画面も小さいのであまり違和感もなく見れるので酔いづらいです. 最後にルーム協会にカメラを表示という設定です. これは自身が設定したルームスケールの境界に近づくとカメラが有効化される設定になっており,障害物があって場合にはルームスケールの青い線だけでなく周りの状況がARで表示されるのでゲームに集中しすぎての万が一が起きない仕様になっています. これは本当に危機回避用の機能という感じですね.ルームスケールだけでは不安な人にはお勧めの機能です. 次回はこれらの機能を使ってUnity上で開発してみたいと思います.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Unity] Inspector上でVector3の各成分を(min,max)に制限する

Inspector上でVector3の各成分を(0,1)に制限するの続きです。 パラメータを追加することで(0,1)だけではなく(min,max)にすることも可能です。 UserAttributes.cs using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif /// <summary> /// Vector2/3を(min.max)に制限する <-<summary>を入れるとマウスオーバーで説明が出ます /// </summary> public class ClampVectorAttribute : PropertyAttribute { public float min; public float max; public ClampVectorAttribute(float min, float max) { this.min = min; this.max = max; } } #if UNITY_EDITOR [CustomPropertyDrawer(typeof(ClampVectorAttribute))] public class ClampVectorDrawer : PropertyDrawer { // Necessary since some properties tend to collapse smaller than their content public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return EditorGUI.GetPropertyHeight(property, label, true); } // Draw a disabled property field public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { ClampVectorAttribute attr = (ClampVectorAttribute)attribute; switch (property.type) { case "Vector2": property.vector2Value = new Vector2( Mathf.Clamp(property.vector2Value.x, attr.min,attr.max), Mathf.Clamp(property.vector2Value.y, attr.min, attr.max) ); break; case "Vector3": property.vector3Value = new Vector3( Mathf.Clamp(property.vector3Value.x, attr.min, attr.max), Mathf.Clamp(property.vector3Value.y, attr.min, attr.max), Mathf.Clamp(property.vector3Value.z, attr.min, attr.max) ); break; } EditorGUI.PropertyField(position, property, label, true); } } #endif
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む