web-dev-qa-db-ja.com

Unity3D、「スクリプトランタイムバージョン」が.NET3.5であるのに「API互換性レベル」が.NET2.0である理由PlayerSettingsの2つのオプションは実際にはどういう意味ですか?

私は最近Unity3Dを使用しており、.NETシステムに関するマニュアルをチェックしています。しかし、非常に混乱しました。

Unity3Dプレーヤー設定には、「スクリプトランタイムバージョン」と「API互換性レベル」という2つのオプションがあります。

「スクリプトランタイムバージョン」を「.NET 3.5相当」に設定すると、「。NET 2.0」と「.NET 2.0サブセット」から「api互換レベル」を選択できます。しかし、これらの2つのオプション値が異なるのはなぜですか?同じ.NETバージョンの値を参照してはいけませんか? 2つの異なるオプションの「.NET」という言葉はどういう意味ですか? Unity3Dが実際に使用している.NETバージョンはどれですか?

また、「スクリプトランタイムバージョン」を「.NET 4.6 Equivalent」に設定すると、「api互換レベル」を「.NET4.6」に選択できます。しかし、なぜこれら2つのオプション値が現時点で同じであるのでしょうか。

一方、MicrosoftのWebサイトで.NETシステムを紹介するマニュアルをいくつか見つけました。彼らは、.NET Standard、.NET Framework、.NET Core、Monoがあると言っています。スタンドアロンの「.NET」エンティティはまったくありません。

では、Unity Player設定の「スクリプトランタイムバージョン」と「API互換性レベル」の.NETバージョンは実際にはどういう意味ですか?

更新

事実:

  1. Unity2017.1.0 の前に「スクリプトランタイムバージョン」オプションはありません

  2. .NET Frameworkには下位互換性 の互換性 があります。これは、.NET 2.0コンポーネントが.NET 3.5で問題なく実行できることを意味します。

  3. .NETバージョンについて話すときは、常に.NET Frameworkのバージョンを指します。

  4. Unity3Dはランタイムを.NET 4.6に更新しています。

推測:

  1. .NET Frameworkには下位互換性があるため、モノラルも同様です。

  2. Unity3Dは.NET 3.5と同等のランタイムとしてモノを使用します

  3. Unity3Dは.NET 2.0機能のみを使用してコンパイルしますが、.NET 3.5ランタイムを実行できます。そのため、「スクリプトランタイムバージョン」が「.NET 3.5」の場合、「API互換性レベル」は「.NET 2.0」です。

  4. Unity3Dは、.NET 4.6ランタイムで.NET 4.6機能を使用するように更新しています。そのため、「スクリプトランタイムバージョン」が「.NET 4.6」の場合、「API互換性レベル」は「.NET 4.6」になります。

もう一度更新

Monoが.NET 3.5をサポートしているのにUnityが.NET 2.0を使用するのはなぜですか?

そして関連するスレッド: https://forum.unity.com/threads/to-linq-or-not-to-linq.223887/

8
unolee

Unity Player設定の「スクリプトランタイムバージョン」と「API互換性レベル」の.NETバージョンは実際にはどういう意味ですか?

API互換性レベル

コンパイラーがプロジェクトをコンパイルする方法を指定するために指定されたオプションのみです。それらは同じ.Netバージョンです。各オプションで得られるものについては、以下を参照してください。

.NET 2.0サブセット

  • アプリのサイズを縮小
  • 起動時間が長くなる
  • 上記のことを実現するために、一部のAPIはデフォルトで削除されています。これには主に.NETソケットまたはネットワークAPIが含まれます。

.NET 2.0はその逆です。

  • ビルドサイズが大きい
  • 起動時間が少し長い
  • ビルドにプラットフォームに基づいていない可能性のあるすべての標準.NET APIが含まれています

Scripting Runtime Version

ここで、使用する.NETバージョンを選択します。これを変更すると、.NET APIとランタイムバージョンの選択を使用できるようになります。

したがって、.NET 4.6を選択すると、.NET 4.6 APIを使用してコードをコーディングでき、Unityは.NET 4.6ランタイムをゲームに含めます。同じことが.NET 3.5にも当てはまります。

彼ら全員がポストフィックスとして「同等」を持っているのはなぜですか?これは、一部のAPIと機能がUnityで削除または削除されているためです。これに気づくでしょうが、これは.NET APIのごく一部にのみ当てはまります。それらのほとんどはサポートされています。

また、「スクリプトランタイムバージョン」を「.NET 4.6相当」に設定すると、「api互換レベル」を「.NET4.6」に選択できます。しかし、なぜこれらの2つのオプション値が現時点で同じであるのですか?

いいえ。それはではない本当です。 "Scripting Runtime Version"オプションには両方のオプションが表示されますが、"を選択することはできません。 NET 3.5 " if " API Compatibility Level ""。NET 4.6 "に設定されている場合。

これを試してみると、Unityが再起動して"。NET 3.5""Scripting Runtime Version"を選択し、自動的に"API互換性レベル"を変更する必要があります。 "。NET 4.6"から"。NET 3.5"へ。

したがって、"。NET 4.6" as "API Compatibility Level"の場合、あなたも必要です"。NET 4.6""Scripting Runtime Version"として選択します。

Unity3Dが実際に使用している.NETバージョンはどれですか?

"Scripting Runtime Version"メニューで選択したもの。

「スクリプトランタイムバージョン」を「.NET 3.5」に設定するときに、「api互換性レベル」に「.NET 2.0」または「.NET 2.0サブセット」のみを選択する必要があるのはなぜですか。 「スクリプトランタイムバージョン」が「.NET 3.5」と等しい場合、「API互換性レベル」は「.NET 3.5」または「.NET 3.5サブセット」である必要があると思います。これはUnityで奇妙なことです。ここで何が問題になりましたか?

ライセンス。

ライセンスの問題がありました。 Unityの会社がランタイムを更新する唯一の方法は、XamirinがモノのランタイムUnityを使用していて、LGPLの下にあるため、Xamarinに多額の金額を支払うことでした。彼らはそれをしたくなかった。昨年、マイクロソフトと提携し、 joined .NET Foundationと提携した後、彼らはモノのランタイムを更新できることに気づきました。

9
Programmer