【编程语言】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 文档。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter入参问题小记

表单入参的时候,这个地方需要勾选,如果不☑️选的话,会提示errorMsg":"Required String parameter code is not present",

MYSQL Unknown column ‘appreciation.latitude‘ in ‘where clause‘

问题 笔者编写mysql语句,执行报错 详细问题 笔者sql代码 SELECT ap.*, su.username, wh.wheat_name FROM appreciation ap LEFT JOIN sys_user su ON su.id ap.user_id LEFT JOIN wheat wh ON wh.id ap.crop_id WHERE appreciation.latitude 1报错信息 >…

100. Go单测系列0---单元测试基础

文章目录 一、Go语言测试1. go test工具2. 单元测试函数3. 单元测试示例4. 子测试5. 表格驱动测试6. 并行测试 二、使用工具生成测试代码三、测试覆盖率四、testify/assert五、总结 本文主要讲解在Go语言中如何编写单元测试以及介绍表格驱动测试、回归测试和单元测试中常用的断…

【SpringBoot3】快速启动框架 快速入门 配置文件

文章目录 SpringBoot3介绍一、快速入门二、入门总结1. 为什么依赖不需要写版本?2. 启动器(Starter)是什么3. SpringBootApplication注解包括的效果? 三、SpringBoot3配置文件3.1 统一配置管理概述3.2 属性配置文件使用3.3 YAML配置文件使用3.4 批量配置文…

【开源】SpringBoot框架开发新能源电池回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

大语言模型系列-提示工程

文章目录 前言一、Prompt Learning二、上下文学习(In-Context Learning)三、指示学习(Instruction Learning)四、思维链(Chain-of-Thought)总结 前言 前文提到自BERT以来,LLM的训练范式变为预训…

C#-WPF 入门

WPF 应用 使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn Windows Presentation Foundation (WPF) ,这是一个与分辨率无关的 UI 框架,使用基于矢量的呈现引擎,构建用于利用现代图形硬件。 WPF 提供一套完善的应用程序开发…

软考68-上午题-【面向对象技术2-UML】-事物

一、事物 UML中有4种事物: 结构事物;(模型的静态部分)行为事物;(模型的动态部分)分组事物;注释事物。 1-1、结构事物 静态图:类图、对象图、用例图 1-2、行为事物 动态…

【CSS面试题】外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷,也叫外边距折叠,在普通文档流中,在垂直方向上的2个或多个相邻的块级元素(父子或者兄弟)外边距合并成一个外边距的现象,不过只有上下外边距才会有塌陷&#x…

抖音开放平台第三方开发,实现代小程序备案申请

大家好,我是小悟 抖音小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一个…

C++程序设计-练手题集合【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下C程序设计中的练手题,以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门: 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函数…

基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

lucky-canvas实现老虎机、九宫格和大转盘抽奖

lucky-canvas是一款开源免费的基于 jscanvas 的前端插件,UI精美,功能强大,使用起来比较方便。 lucky-canvas官网https://100px.net/ 一、使用 注意:下例是vue中的应用,具体还有js和uniapp中的应用,详细查…

面向对象(精髓)变继承关系为组和关系(_Decorator模式)

在软件开发中,设计模式是解决常见问题的可重用解决方案。在面向对象编程中,继承和组合是两种常用的代码复用方式。然而,随着软件需求的不断变化,我们需要更灵活的设计方式来应对不断变化的需求。在本文中,我们将讨论从…

手机和电脑同步的好用记事本软件有哪些

我常常需要随手记录各种信息,以便随时查阅和使用。比如,在下班路上,我会用手机记录明天要处理的工作事项、购物清单,或是某个突然迸发的创意想法;而在办公室,我则需要在电脑上整理会议纪要、项目计划&#…

2024年华为HCIA-DATACOM新增题库(H12-811)

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案:A 试题解析:在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…

(黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

(黑马出品_07)SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小…

基于物联网的智能辅助泊车系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 物联网技术 3 1.2 JFinal框架技术 3 1.3 uni-app技术 4 1.4 本章小结 4 2 智能辅助泊车系统的分析 5 2.1 需求分析 5 2. 1.1 系统的功能需求 5 2. 1.2 系统的非功能需求 5 2. 1.3 系统业…

Axios中每次发送post请求前都会发送options请求

今天写前端的时候,发现每次post请求都会失败, 反复调试过后发现axios在每次发送post请求前都发送了options请求, 在网络搜罗了一大圈, 发现了原因是因为web页面发送了请求给vue后, vue再请求后端过程中发生了跨域&…

Covalent(CQT)降低数据可用性成本,加快 Layer2 在 Web3 领域的扩张

Covalent Network(CQT)通过其统一 API,正在为 EVM Layer2 生态系统提供支持,减少了开发者需要导航多个数据供应商的需求,通过解决多链环境中的碎片化挑战,极大地提高了他们的效率。 通过其统一 API 支持 2…