【Unity,C#】PCのDeviceIDをスクリプトで読み取りたい

実現したいこと

Windowsの設定 > 詳細情報 > デバイスIDに記載されている一意なIDをUnityのスクリプトから取得したい。
あるいは一意なIDを付与する。

発生している問題

色々記事を調べて参考にしたが、ManagementObjectSearcherをUnityで有効に出来ずに困っています。
System.Management.dllをPluginsフォルダ下に配置していますが、スクリプトを走らせると
System.NotImplementedException: The method or operation is not implemented. エラーが発生し、機能しません。
以下のスクリプトを走らせると空欄とSystem.NotImplementedException: The method or operation is not implemented.がLogに表示されます。
どうにかしてManagementObjectSearcherをUnityで使用する事は出来ませんでしょうか?

また、SystemInfo.deviceUniqueIdentifierで読み取れる一意なIDもあるようですが、こちらはどうもOSのバージョンやUnityのバージョンが変更されると変わる可能性があると出てきたのですが、こちらで判別する方法は危険でしょうか?
一応自身の環境下でUnityの異なるバージョンで走らせたところ、同様の文字列が返って来はしました。

該当のソースコード

cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using System;using System.Windows.Forms;using System.Security.Cryptography;using System.Text;using System.Linq;using System.Management; public class IDReader : MonoBehaviour{ void Start() { Debug.Log(GetDeviceUniqueIdentifier()); } public static string GetDeviceUniqueIdentifier() { string ret = string.Empty; string concatStr = string.Empty; try { ManagementObjectSearcher searcherBb = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); foreach (var obj in searcherBb.Get()) { concatStr += (string)obj.Properties["SerialNumber"].Value ?? string.Empty; } ManagementObjectSearcher searcherBios = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); foreach (var obj in searcherBios.Get()) { concatStr += (string)obj.Properties["SerialNumber"].Value ?? string.Empty; } ManagementObjectSearcher searcherOs = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"); foreach (var obj in searcherOs.Get()) { concatStr += (string)obj.Properties["SerialNumber"].Value ?? string.Empty; } var sha1 = SHA1.Create(); ret = string.Join("", sha1.ComputeHash(Encoding.UTF8.GetBytes(concatStr)).Select(b => b.ToString("x2"))); } catch (Exception e) { Debug.Log(e.ToString()); } return ret; }}

補足情報

Unity Version : 2021.3.5f1 LTS版

使用しているApi Compatibillity Level
.NET Framework(変更候補の.NET Standard 2.1に変更して試しもしました)

コメントを投稿

0 コメント