Version: 2022.1
  • サポートあり
  • サポートなし、非推奨
言語: 日本語
追加のクラスライブラリアセンブリの参照
スクリプティングバックエンド

C# コンパイラー

Unity プロジェクトで C# ソース コードをコンパイルするために、Unity エディターは C# コンパイラーを使用します。

C# コンパイラー C# 言語バージョン
Roslyn C# 9.0

エディターはデフォルトの一揃いのオプションを C# コンパイラーに渡します。プロジェクトの追加のオプションを渡すには、プラットフォーム依存のコンパイル のドキュメントを参照してください。

サポートされない機能

C# 9.0

  • localsinit フラグ送信の制御
  • 共変戻り値型
  • モジュール初期化子
  • アンマネージ関数ポインターの拡張可能な呼び出し規則
  • Init のみのセッター

サポートされない機能をプロジェクトで使用しようとすると、コンパイルでエラーが発生します。

レコード対応

C# 9 の init と record (レコード) のサポートには、いくつかの注意点があります。

  • System.Runtime.CompilerServices.IsExternalInit 型は init のみのセッターを使用するため、レコードの完全なサポートに必要ですが、.NET 5 以降 (Unity ではサポートなし) でのみ利用可能です。ユーザーは、自分のプロジェクトで System.Runtime.CompilerServices.IsExternalInit 型を宣言することによって、この問題を回避することができます。
  • Unity のシリアル化システムは C# レコードをサポートしていないため、シリアル化された型に C# レコードを使用すべきではありません。

アンマネージ関数ポインターのサポート

Unity は C# 9 で導入されたアンマネージ関数ポインターをサポートしていますが、拡張可能な呼び出し規則はサポートしていません。以下のサンプルコードでは、アンマネージ関数ポインターを正しく使用する方法について、より詳細な情報を提供します。

以下の例は Windows プ ラ ッ ト フ ォーム を対象 と し てお り、Player 設定 メニューで Allow ‘unsafe’ code を有効にする必要があります。C# の unsafe コンテキストの詳細については、Microsoft の unsafe (C#リファレンス) のドキュメント または Microsoft の アンセーフ コード、ポインター型、関数ポインターのドキュメント を参照してください。


using System;
using System.Runtime.InteropServices;
using UnityEngine;
public class UnmanagedFunctionPointers : MonoBehaviour
{
 [DllImport("kernel32.dll")]
 static extern IntPtr LoadLibrary(string lpLibFileName);
 
 [DllImport("kernel32.dll")]
 static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
 
 // You must enable "Allow 'unsafe' code" in the Player Settings
 unsafe void Start()
 {
# if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
 // This example is only valid on Windows
 
 // Get a pointer to an unmanaged function
 IntPtr kernel32 = LoadLibrary("kernel32.dll");
 IntPtr getCurrentThreadId = GetProcAddress(kernel32, "GetCurrentThreadId");
 // The unmanaged calling convention
 delegate* unmanaged[Stdcall]<UInt32> getCurrentThreadIdUnmanagedStdcall = (delegate* unmanaged[Stdcall]<UInt32>)getCurrentThreadId;
 Debug.Log(getCurrentThreadIdUnmanagedStdcall());
# endif
 }
}
追加のクラスライブラリアセンブリの参照
スクリプティングバックエンド

AltStyle によって変換されたページ (->オリジナル) /