System.Environment アプリケーションと Unity および通常の .NET アプリケーションでの互換性

システム・環境とは何ですか?

System.Environment は、現在の環境とプラットフォームに関する情報と、それらと対話するためのメソッドを提供する .NET Framework クラスです。これらの環境には、オペレーティング システム、バージョン、マシン構成などが含まれます。このクラスは、アプリケーションがオペレーティング システム固有の機能にアクセスするためのメソッドを提供します。

System.Environment は .NET Framework の一部であるため、Unity に固有のものではありません。
Unity は、.NET Framework のオープンソース バージョンである Mono のカスタマイズされたバージョンを使用します。したがって、Unity の C# スクリプトは、System.Environment を含む .NET Framework のほとんどの機能を使用できます。

System.Environment は、他の .NET アプリケーション (デスクトップ アプリケーション、Web アプリケーション、サービスなど) でも使用できます。


System.Environment の主な目的

  • オペレーティング システム情報の取得: このクラスを使用して、アプリケーションが実行されているオペレーティング システムに関する情報をクエリできます。
  • 環境変数の読み取り: プログラムが環境変数を読み取りまたは設定できるようにします。
  • コマンド ライン引数の処理: たとえば、Environment.CommandLine は、現在のプロセスを開始した元のコマンド ラインを返すことができます。
  • システム ディレクトリをクエリします: 一時フォルダーやユーザーのホーム ディレクトリなど。

使い方 システム・環境

以下に提供させていただきます団結一つで中和する通常の.NETアプリケーションで System.Environment を使用する方法の例。

Unity の場合:
一般的な使用例を考えてみましょう。Unity でのゲームの開始時に、プレーヤーのコンピューター名またはオペレーティング システムを知りたい場合があります。

using System;
using UnityEngine;

public class EnvironmentDemo : MonoBehaviour
{
    
    
    void Start()
    {
    
    
        // 获取计算机名
        string machineName = Environment.MachineName;
        Debug.Log("机器名称: " + machineName);

        // 获取操作系统信息
        string osVersion = Environment.OSVersion.ToString();
        Debug.Log("操作系统: " + osVersion);
    }
}

通常の .NET アプリケーションの場合:
コマンド ライン引数から情報を取得し、現在の実行環境に関する情報を表示する必要がある単純な .NET コンソール アプリケーションを作成しているとします。

using System;

namespace ConsoleAppDemo
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            // 显示传入的命令行参数
            Console.WriteLine("命令行参数:");
            foreach (var arg in args)
            {
    
    
                Console.WriteLine(arg);
            }
            // 获取和显示计算机名
            string machineName = Environment.MachineName;
            Console.WriteLine("机器名称: " + machineName);
            // 获取和显示当前工作目录
            string currentDirectory = Environment.CurrentDirectory;
            Console.WriteLine("当前目录: " + currentDirectory);
            // 获取并显示操作系统信息
            string osVersion = Environment.OSVersion.ToString();
            Console.WriteLine("操作系统: " + osVersion);
        }
    }
}

このコンソール アプリケーションを実行するときは、たとえば次のコマンドを使用します。

ConsoleAppDemo.exe -input test.txt -mode debug

プログラムは最初にコマンド ライン パラメータを表示し、次にマシン名、現在のディレクトリ、およびオペレーティング システム情報を表示します。
ここに画像の説明を挿入します

これはコマンドラインでプログラムを実行するステートメントです。ConsoleAppDemo.exe という名前の実行可能ファイルを呼び出し、2 つのパラメータ セットを渡します。

ここでの構造と構文は次のとおりです。
ConsoleAppDemo.exeは実行されるプログラムです。
-input test.txtおよび-mode debug は、プログラムに渡される引数です。ここで、-input と -mode はパラメーターのキーであり、test.txt と debug はそれらのキーに関連付けられた値です。

.NET アプリケーションでは、args 配列を通じてこれらのパラメーターにアクセスできます。上記の例では、プログラムを実行すると、args 配列は次のようになります。

args[0] = "-input";
args[1] = "test.txt";
args[2] = "-mode";
args[3] = "debug";

互換性の問題

①.NET以外のアプリケーション(ネイティブ C/C++ アプリケーション、Java アプリケーションなど):
System.Environment は .NET 独自のものであるため、直接使用できません。
つまり、System.Environment を直接使用できるのは .NET アプリケーションだけです。他の種類のアプリケーションは、同様の機能にアクセスするために、独自の言語またはフレームワークによって提供されるツールとライブラリを使用する必要があります。たとえば、Java には環境変数を取得する System クラスがありますが、C++ には同様の機能を実現する他のメソッドがあります。

Unity によって開発されたアプリケーション:
Unity で Android または iOS アプリケーションを開発し、System.Environment を使用する場合、その背後にあるロジックは次のとおりです。Unity は各ターゲット プラットフォームに対応する .NET ランタイムを (Mono または IL2CPP を通じて) 提供するため、ほとんどの .NET Unity C# スクリプトで使用する API は、これらのターゲット プラットフォームでも有効です。

Android : Android ビルドは Mono または IL2CPP に基づいているため、Unity でビルドされた Android 用アプリでは、ほとんどの System.Environment 機能が機能します。

iOS : iOS ビルドは IL2CPP による AOT (Ahead-Of-Time) コンパイルを使用するため、System.Environment のほとんどのメソッドとプロパティも使用できるはずです。ただし、サンドボックス環境と iOS の権限制限により、一部の特定の機能が期待どおりに動作しない場合があります。

注意:

  1. すべての .NET API がすべてのプラットフォームと完全に互換性があるわけではありません。一部の API は、一部のプラットフォームでは実装されていないか、予想とは異なる動作をする場合があります。
  2. ファイルシステムとパスに関連する機能には特に注意してください。Android と iOS はどちらも、独自のファイル システム構造と権限を持っています。

Android と iOS だけでなく、他のプラットフォームでも利用できますか?

Unity でサポートされているほとんどのプラットフォームは、.NET ランタイムとして Mono または IL2CPP を使用するため、System.Environment を使用できます。これには、Windows、Mac、Linux、Android、iOS、UWP などの一般的なプラットフォームが含まれます。

以下に、いくつかの考慮事項と具体的なシナリオを示します。

  • WebGL : WebGL ビルドは IL2CPP を使用して C# コードを C++ に変換し、さらに JavaScript に変換します。WebGL では多くの .NET 機能を利用できますが、ブラウザの制限やその他の理由により一部の機能が動作しない場合があります。System.Environment を使用する場合、特定の機能制限や相違点が発生する場合があります。
  • 古いプラットフォームまたは非主流のプラットフォーム: Flash、Tizen、Samsung Smart TV など、Unity がかつてサポートしていた一部の古いプラットフォームまたは非主流のプラットフォームでは、.NET サポートに違いがある可能性があります。これらのプラットフォーム向けに開発している場合は、実際のテストを実施するのが最善です。
  • 特定の API に関する注意: System.Environment は Unity でサポートされているほとんどのプラットフォームで利用できますが、すべてのプロパティやメソッドがすべてのプラットフォームで一貫して動作することが保証されているわけではありません。たとえば、一部のオペレーティング システムまたはプラットフォーム固有のパス、環境変数、またはその他のデータは、モバイル デバイスやゲーム コンソールには適用できない場合があります。

要約:

System.Environment は、開発者がアプリケーションのランタイム環境と対話できるようにする強力なツールです。ただし、すべてのクロスプラットフォーム開発ツールと同様に、開発者は異なるプラットフォームでツールがどのように動作するかを理解し、考えられる違いに対応する戦略を立てる必要があります。

おすすめ

転載: blog.csdn.net/qq_33795300/article/details/132405387