Unity 6.3
0 онлайн 78 гостей 3 в системе
Вход
Программирование в Unity Шаг 12 из 210

C# компилятор и ссылка на языковую версию

Эта версия Unity Editor использует следующую версию компилятора и языка C#:

  • C# компилятор: Рослин
  • C# языковая версия: C# 9.0

Редактор передает компилятору C# набор параметров по умолчанию. Чтобы передать дополнительные параметры в вашем проекте, см. Условная компиляция в Unity.

Сборка мусора

Unity использует Сборщик мусора Бёма — Демера — Вайзера для обоих Mono и IL2CPP скриптовые бэкэнды Дополнительные сведения о доступных режимах сбора мусора, их значении и способах переключения между ними см. в разделе Режимы сбора мусора.

Неподдерживаемые функции

C# 9.0

  • Подавление выдачи флага localsinit
  • Ковариантные типы возврата
  • Инициализаторы модулей
  • Расширяемые соглашения вызова для указателей неуправляемых функций
  • Настройки только для инициализации

Если вы попытаетесь использовать неподдерживаемые функции в вашем проекте, компиляция генерирует ошибки.

Поддержка записи

C# 9 Поддержка init и record имеет несколько ограничений.

  • Тип System.Runtime.CompilerServices.IsExternalInit требуется для полной поддержки записей, так как он использует только init setters, но доступен только в .NET 5 и более поздних версиях (которые Unity не поддерживает). Пользователи могут обойти эту проблему, объявив тип System.Runtime.CompilerServices.IsExternalInit в своих собственных проектах.
  • Вы не должны использовать записи C# в сериализированных типах, потому что система сериализации Unity не поддерживает записи C#.

Поддержка неуправляемого указателя функции

Unity поддерживает указатели на неуправляемые функции, как это было введено в C# 9, но не поддерживает расширяемые соглашения вызова. В следующем примере кода приведена более подробная информация о том, как правильно использовать указатели на неуправляемые функции.

Следующие примерные цели Windows платформы и требует Разрешить «небезопасный» код для включения Настройки ИгрокаЧтобы включить его, перейдите по ссылке: Project Настройки > Игрок. Развернуть Другие настройки панели, перейти к Компиляция сценариев Для получения дополнительной информации о C#’s unsafe контекст, см. Microsoft’s unsafe (C# Справочная документация или Документация Майкрософт о небезопасном коде, типах указателей и указателях функций.

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

Дополнительные ресурсы