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.
Jika Anda mencoba menggunakan fitur yang tidak didukung dalam proyek Anda, kompilasi menghasilkan kesalahan.
C# 9 ini dan dukungan rekaman hadir dengan beberapa gua.
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.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
}
}