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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Microsoft HoloLens

Microsoft HoloLensは、マイクロソフト社が開発しているヘッドマウントディスプレイ方式のコンピュータです。拡張現実体験のため透明なレンズを備えています。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

受付中

C#.Hololends2で、Unityで作成したアプリの処理(CPU負荷)を軽くしたい.

master.
master.

総合スコア1

Microsoft HoloLens

Microsoft HoloLensは、マイクロソフト社が開発しているヘッドマウントディスプレイ方式のコンピュータです。拡張現実体験のため透明なレンズを備えています。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

0回答

-1評価

0クリップ

633閲覧

投稿2022/01/06 08:14

編集2022/05/27 10:03

Visualstudioでデバッグした際にHololends2のディスプレイ上のUnityが処理落ちします。
原因は、CPU負荷が高いことだと考えています。
デバッグを行った際、Hololends2のディスプレ上でfpsが15程度しか出ず、ゲージが真っ赤な状態で始まります。
また、3次元のCUBEをつかんだ際に処理落ちします。

アプリの主な内容は、3点です。
1.CUBEを掴んだ際に座標を出力し続ける
2.出力した座標はCSVに保存
3.座標をTCP通信でPCに送ること

アプリ内容は、できるだけ変えずに処理落ちしないアプリに作り替えたいです。

コード内容は以下の通りです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft;
using Microsoft.MixedReality.Toolkit.Utilities;
using Microsoft.MixedReality.Toolkit.Input;

using System;
using System.IO;

public class FollowTrackedFingers : MonoBehaviour, IMixedRealityGestureHandler<Vector3>
{

// void Awake() { // UnityThread.initUnityThread(); // } StreamWriter sw; FileInfo fi; DateTime now = DateTime.Now; string fileName = "HandPoseLog"; public void OnGestureCanceled(InputEventData eventData) { Debug.Log("OnGestureCanceled"); } public void OnGestureCompleted(InputEventData<Vector3> eventData) { Debug.Log("OnGestureCompleted"); var action = eventData.MixedRealityInputAction.Description; Debug.Log(action); //Some code to execute // sw.Close(); // Debug.Log("Save Completed"); } public void OnGestureCompleted(InputEventData eventData) { Debug.Log("OnGestureCompleted"); var action = eventData.MixedRealityInputAction.Description; Debug.Log(action); Debug.Log("OnGestureCompleted Handedness:" + eventData.Handedness); //Some code to execute } public void OnGestureStarted(InputEventData eventData) { Debug.Log($"OnGestureStarted [{Time.frameCount}]: {eventData.MixedRealityInputAction.Description}"); Debug.Log("OnGestureStarted Handedness:" + eventData.Handedness); } public void OnGestureUpdated(InputEventData<Vector3> eventData) { Debug.Log($"OnGestureUpdated [{Time.frameCount}]: {eventData.MixedRealityInputAction.Description}"); if (HandJointUtils.TryGetJointPose(TrackedHandJoint.IndexTip, Handedness.Right, out MixedRealityPose pose)) { Debug.Log("Right IndexTip detect");//右手が認識されている //Debug.Log(pose); float x = pose.Position.x; float y = pose.Position.y; float z = pose.Position.z; Debug.Log("x:" + x); Debug.Log("Y:" + y); Debug.Log("Z:" + z); Debug.Log("eulerAngles:" + pose.Rotation.eulerAngles); CSVSave(x.ToString(), y.ToString(), z.ToString()); } else { Debug.Log("Lost");//左手が認識されている } } public void OnGestureUpdated(InputEventData eventData) { Debug.Log("OnGestureUpdated"); Debug.Log("OnGestureUpdated Handedness:" + eventData.Handedness); } void HandleCameraResult(string detectedObject) { //Some relevant code } void Start() { Debug.Log("MRTK Demo Hello World"); // csv file を作成します。 fileName = fileName + now.Year.ToString() + "_" + now.Month.ToString() + "_" + now.Day.ToString() + "__" + now.Hour.ToString() + "_" + now.Minute.ToString() + "_" + now.Second.ToString(); fi = new FileInfo(Application.persistentDataPath + "/" + fileName + ".csv"); sw = fi.AppendText(); } void Update() { Debug.Log("MRTKDemo Update"); if (HandJointUtils.TryGetJointPose(TrackedHandJoint.IndexTip, Handedness.Left, out MixedRealityPose pose)) { Debug.Log("Left IndexTip detect");//左手が認識されている sw.Close(); Debug.Log("Save Completed"); } else { Debug.Log("Lost");//右手が認識されている } } // CSV形式で保存するための関数 private void CSVSave(string x, string y, string z) { sw.WriteLine(x + "," + y + "," + z); }

}
public class Client
{
public static void Main()
{
//サーバーに送信するデータを入力してもらう
Console.WriteLine("float x" + "float y" + "floatz");
string sendMsg = Console.ReadLine();
//何も入力されなかった時は終了
if (sendMsg == null || sendMsg.Length == 0)
{
return;
}

//サーバーのIPアドレス(または、ホスト名)とポート番号 string ipOrHost = "127.0.0.1"; //string ipOrHost = "localhost"; int port = 2001; //TcpClientを作成し、サーバーと接続する System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient(ipOrHost, port); Console.WriteLine("サーバー({0}:{1})と接続しました({2}:{3})。", ((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Address, ((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Port, ((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Address, ((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Port); //NetworkStreamを取得する System.Net.Sockets.NetworkStream ns = tcp.GetStream(); //読み取り、書き込みのタイムアウトを10秒にする //デフォルトはInfiniteで、タイムアウトしない //(.NET Framework 2.0以上が必要) ns.ReadTimeout = 10000; ns.WriteTimeout = 10000; //サーバーにデータを送信する //文字列をByte型配列に変換 System.Text.Encoding enc = System.Text.Encoding.UTF8; byte[] sendBytes = enc.GetBytes(sendMsg + '\n'); //データを送信する ns.Write(sendBytes, 0, sendBytes.Length); Console.WriteLine(sendMsg); //サーバーから送られたデータを受信する System.IO.MemoryStream ms = new System.IO.MemoryStream(); byte[] resBytes = new byte[256]; int resSize = 0; do { //データの一部を受信する resSize = ns.Read(resBytes, 0, resBytes.Length); //Readが0を返した時はサーバーが切断したと判断 if (resSize == 0) { Console.WriteLine("サーバーが切断しました。"); break; } //受信したデータを蓄積する ms.Write(resBytes, 0, resSize); //まだ読み取れるデータがあるか、データの最後が\nでない時は、 // 受信を続ける } while (ns.DataAvailable || resBytes[resSize - 1] != '\n'); //受信したデータを文字列に変換 string resMsg = enc.GetString(ms.GetBuffer(), 0, (int)ms.Length); ms.Close(); //末尾の\nを削除 resMsg = resMsg.TrimEnd('\n'); Console.WriteLine(resMsg); //閉じる ns.Close(); tcp.Close(); Console.WriteLine("切断しました。"); Console.ReadLine(); }

}

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Microsoft HoloLens

Microsoft HoloLensは、マイクロソフト社が開発しているヘッドマウントディスプレイ方式のコンピュータです。拡張現実体験のため透明なレンズを備えています。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。