【编程语言】C#语言相关知识

前言:我们在游戏开发的过程中,往往会通过游戏引擎结合编程语言的方式,来作为项目开发的手段。因此,了解相关语言的特性、发展和前沿知识,就显得相当必要。笔者这里结合自身的工作经验和学习心得,用简洁通俗的语言,尽量保证专业性的同时,帮助同学们对此有一个简单的认识。文章中如有不足之处,欢迎指正。

个人强烈建议,在学习新的知识技术时,请尽量遵照官方推荐,以保证自身知识的扎实性。比如新学Unity时,一些互联网上的开发课程和教程视频,固然可以帮助我们快速上手;但一定不要忽视官方指导文档、API文档、官方示例、社区答疑等一些列官方指导性内容。这些内容对于科学、全面掌握Unity有着本质的决定性作用。评价一个开发者是否是一位好的游戏开发工程师的标准之一,我个人觉得应该是是否对官方指导性内容的尊重程度。只有如此,开发者才能在一个比较全面、扎实的基础上,去进行技术上的提升和迭代。

一、查看工程所使用的C#语言版本。
C#语言是Unity引擎默认的编程语言。当我们在Unity官方文档的指引下,安装Unity编辑器,搭建开发环境的时候。往往官方已经帮我们适配和选择好语言的版本,以及相关的IDE开发环境(Visual Studio)。
那么,在搭建好开发环境工作流之后,进行编程语言版本的查看(Unity文档中会介绍所用到的C#编译器,其中会介绍可支持的C#版本):
Unity User Manual 2021.3 (LTS)脚本Unity 架构Unity 中的 .NET 概述C# 编译器
在这里插入图片描述

二、当前C#版本的主要特性。
知道了引擎中编译器的特性之后,就可以去微软的.NET文档中查看C#的语言特性了。
Learn .NET C# 指南 C# 9 版
在这里插入图片描述
三、特别注意。
在全面了解了语言特性之后,需要特别注意的是,引擎使用的C#编译器的特性。**具体的编译器未必支持语言的全部特性。**其往往存在不受支持的部分、部分支持的部分等。例如:
在这里插入图片描述

Unity2021 所使用的C#编译器(Roslyn),支持C#版本为9.0,但有以下功能不受支持或使用注意事项。

  • 1.禁用localsinit标记;
  • 2.协变返回类型;
  • 3.模块初始化;
  • 4.非托管函数指针的可扩展调用约定;
  • 5.只初始化的设置器;
    以上功能是Unity中不支持的
    C# 9 的 init 和 record 支持存在一些注意事项。
  • 1.要完全支持记录record,需要使用 System.Runtime.CompilerServices.IsExternalInit 类,因为它使用了 init-only 设置器,但该类仅在 .NET 5 及更高版本中可用(Unity 不支持)。用户可以通过在自己的项目中声明System.Runtime.CompilerServices.IsExternalInit 类来解决此问题。
  • 2.不应该在序列化类型中使用 C# 记录,因为 Unity 的序列化系统不支持 C# 记录。
    未托管函数指针支持
    Unity支持C# 9中引入的非托管函数指针,但不支持可扩展的调用约定。以下示例代码提供了关于如何正确使用非托管函数指针的更详细信息。
    以下示例针对Windows平台,并需要在Player Settings菜单中启用“不安全”代码。有关C#不安全上下文的更多信息,请参阅Microsoft的 unsafe (C# Reference) 文档或Microsoft的 Unsafe code, pointer types, and function pointers 文档。

四、总结。
按照上述的步骤,我们基本上就把游戏引擎和编程语言两者之间的联系给对应起来了。希望能对大家系统性掌握知识有一个帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540803.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot272车辆管理系统

基于SSM的车辆管理系统的设计与实现 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前企业对于车辆信息的管理和控制,采用人工登记的方式保存相关数据,这种以…

HarmonyOS NEXT星河版——还是Android上套个壳吗?

这真的是我2024年听过最搞笑的话,就在前几天,居然还有人说鸿蒙OS就是安卓套个壳,简直无语! 你敢相信?就在前几天,我还听到有人说:鸿蒙os就是安卓上套一个壳。唉,我真是无语了。 哎&#xff0c…

docker容器启动rabbitmq

docker容器启动rabbitmq 一、RabbitMQ部署1.1.在线拉取mq镜像1.2.运行mq容器1.3.访问mq 二、RabbitMQ的集群2.1.集群分类2.1.设置 /etc/hosts文件 endl 一、RabbitMQ部署 1.1.在线拉取mq镜像 # 在线拉取 docker pull rabbitmq:3-management1.2.运行mq容器 docker run \ -e R…

SpringMVC基础之工作流程

文章目录 SpringMVC 的工作流程1. 总图2. DispatcherServlet3. 必需的配置4. 加载配置文件的两个时机5. 定义控制器6. 创建 JSP 视图 SpringMVC 的工作流程 1. 总图 如上图,Spring MVC 程序的完整执行流程如下: 用户通过浏览器发送请求,请求…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十三)-DL-AoD定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

ts文件怎么无损转换mp4?这样设置转换模式~

TS格式(Transport Stream)的起源可追溯到数字电视广播领域。设计初衷是解决视频、音频等多媒体数据在传输和存储中的问题。采用一系列标准技术,TS格式让视频信号能够以流的形式传输,因此在数字电视、广播等领域得到广泛应用。 MP4…

Android 音频系统

导入 早期Linux版本采用的是OSS框架,它也是Unix及类Unix系统中广泛使用的一种音频体系。 ALSA是Linux社区为了取代OSS而提出的一种框架,是一个源代码完全开放的系统(遵循GNU GPL和GNU LGPL)。ALSA在Kernel 2.5版本中被正式引入后,OSS就逐步…

试卷上的水印如何去除?分享3种常用的方法!

在日常生活和工作中,我们经常会遇到一些带有水印的试卷或文档,这些水印不仅影响了我们的阅读体验,还可能对我们的工作和学习产生一定的困扰。那么,如何有效去除试卷上的水印呢?今天,就让我们一起来探讨这个…

python爬虫实战——抖音

目录 1、分析主页作品列表标签结构 2、进入作品页前 判断作品是视频作品还是图文作品 3、进入视频作品页面,获取视频 4、进入图文作品页面,获取图片 5、完整参考代码 6、获取全部作品的一种方法 本文主要使用 selenium.webdriver(Firef…

数据结构(三)——栈

三、栈、队列和数组 3.1 栈 3.1.1 栈的基本概念 线性表是具有相同数据类型的n(n≥0)个数据元素的有限 序列,其中n为表长,当n 0时线 性表是一个空表。若用L命名线性表,则其一般表示为 L (a1, a2, … , ai , ai1, ……

Buildroot 之一 详解源码及架构

在之前的博文中,我们学习了直接通过 Makefile 手动来进行构建 U-Boot 和 Linux Kernel 等,其实,目前存在多种嵌入式 Linux 环境的构建工具,其中,Buildroot 就是被广泛应用的一种。今天就来详细学习一个 Buildroot 这个自动化构建工具。 Buildroot Buildroot 是一个运行于…

SD-WAN怎样提高网络管理的效率?

在当今网络技术的广泛应用中,SD-WAN(软件定义广域网)已成为更大技术趋势的一环,其背后概念为软件定义网络(SDN)。SD-WAN采用了全新的集中式网络管理方法,将底层网络基础设施与网络上运行的服务和…