Mengacu perakitan perpustakaan kelas tambahan
Scripting backends

C# kompilacja

Untuk mengkompilasi kode sumber C# dalam Proyek Unity, Editor Unity menggunakan C # compiler.

C# compiler C# language version
Roslyn G# 9.0

Editor melewati satu set opsi default ke C # compiler. Untuk lulus opsi tambahan dalam proyek Anda, lihat dokumentasi di Platform Kompilasi tergantung.

Fitur yang tidak didukung

G# 9.0

  • Suppress memancarkan bendera lokalsinit
  • Jenis pengembalian variabel
  • Modul Initializers
  • Konvensi panggilan yang dapat diperluas untuk pointer fungsi yang tidak dikelola
  • Ini tidak hanya setters

Jika Anda mencoba menggunakan fitur yang tidak didukung dalam proyek Anda, kompilasi menghasilkan kesalahan.

Rekam dukungan

C# 9 ini dan dukungan rekaman hadir dengan beberapa gua.

  • Jenis System.Runtime.CompilerServices.IsExternalInit diperlukan untuk dukungan rekor penuh karena menggunakan init hanya setters, tetapi hanya tersedia di .NET 5 dan kemudian (yang Unity tidak mendukung). Pengguna dapat mengerjakan masalah ini dengan menentukan jenis System.Runtime.CompilerServices.IsExternalInit dalam proyek mereka sendiri.
  • Anda tidak boleh menggunakan catatan C# dalam jenis serialisasi karena sistem serialisasi Unity tidak mendukung catatan C#.

Dukungan pointer fungsi yang tidak dikelola

Unity mendukung pointer fungsi yang tidak dikelola sebagaimana diperkenalkan dalam C # 9, tetapi tidak mendukung konvensi panggilan yang masuk akal. Kode contoh berikut memberikan informasi lebih rinci tentang cara menggunakan pointer fungsi yang tidak dikelola dengan benar.

Contoh berikut menargetkan platform Windows dan memerlukan Allow ‘unsafe’ code untuk diaktifkan dalam menu Pengaturan PemainPengaturan yang memungkinkan Anda mengatur berbagai pilihan khusus pemain untuk permainan akhir yang dibangun oleh Unity. More info
Lihat di Glossary
. Untuk informasi lebih lanjut tentang konteks unsafe C#, lihat Dokumentasi Microsoft (C# Reference) atau Login Kode yang tidak aman, jenis pointer, dan dokumentasi pointer fungsi.


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
  }
}


Mengacu perakitan perpustakaan kelas tambahan
Scripting backends