C#编程的构成要素(结合unity做实例分析)

news2025/7/22 14:10:34

目录

定义变量

变量的名称很重要

将变量作为占位符

疯狂的方法

方法驱动行为

方法也是占位符

类的引入

一直在使用类

日常蓝图

注释是关键

将脚本附加到游戏对象上

脚本成为组件

类与组件通信


本文主要来自<<C#实践入门>>哈里森.费隆 著,仅用为做笔记。

定义变量

首先,什么是变量?目前存在如下几种观点:

  • 从概念上讲,变量是编程的最基本单位,就好比原子,一切都基于变量,没有变量,程序就不可能存在。
  • 从技术角度看,变量是用于存储指定值的一小部分计算机内存。变量会跟踪信息的存储位置(称为内存地址)以及值与类型(例如:数字,单词).
  • 实际上,变量相当于容器。可以随意创建新变量,然后赋值,移动位置,并在需要的地方引用。即便空的变量也是有用的。

举个粒子--邮箱,如图所示,邮箱是可以装信件,账单,照片等任何东西的。关键是在于邮箱中的东西是可变的。

变量可以理解为是我们程序可以操作的内存区域的名称,在 C# 中每个变量都有自己特定的类型,这个类型确定了变量所占内存的大小、布局、取值范围以及可以对该变量执行的操作。

可以将变量当作一种通过符号(变量名)表示某个内存区域的方法,变量的值可以更改,并且可以多次重复使用。C# 中的基本变量类型可以归纳为以下几种:

类型示例
整型sbyte、byte、short、ushort、int、uint、long、ulong、char
浮点型float、double
十进制类型decimal
布尔型true、false
空类型可为空值的数据类型

 

变量的名称很重要

如果你去打开邮箱,你的第一反应可能是问:"打开哪一个?",如果告诉你打开史密斯家的邮箱,棕色的邮箱,你就知道该怎么做了。

类似地,在创建变量时,必须为它们指定唯一的名称,以便以后引用。我们会在后面讨论有关格式化和命名变量的更多细节。

将变量作为占位符

实际上,创建和命名变量相当于给需要存储的值创建占位符,以如下简单的数学算式为例:

2+9=11

如果想把数字9改成变量的话,考虑以下代码:

myVariable=9

现在,我们可以在任何地方使用myVariable变量代替数字9.

2+myVariable=11

尽管还不是真正的C#代码,但以上示例演示了变量的功能以及如何将它们作为占位符进行引用。

1.实践---创建变量 

介绍的理论知识已经足够了,现在在LearningCurve脚本中创建变量,不必担心语法:

 首先双击Unity项目中的LearningCurve脚本,打开VS编辑器,参照上面的代码。在Unity中运行脚本时,需要把脚本附加到场景中的游戏对象(在UNITY中称为GameObject)上。此时,项目中只有相机和方向灯。因此,我们选择把LearningCurve脚本附近到相机上,这样比较简单。

(1)把LearningCurve脚本拖到Main Camera上

(2)选择Main Camera,它将出现在Inspector面板中,检查LearningCurve脚本是否已正确附加到Main Camera上

(3)单机play按钮,查看Console面板中的输出。

刚刚发生了什么

Debug. Log语句用于打印括号之间的数学算式的结果。如图所示,变量方程式使用起来与数学算式一样。

 到了本章的最后,我们会讨论Unity如何将Unity如何将C#脚本转换为组件。

 2.实践---更改变量的值

LearningCurve脚本的第7行声明了carDoors变量,因此可以更改其中存储的值。更新后的值会在代码中使用了carDoors变量的地方起作用,让我们看看实际效果。

(1)如果场景还在运行,请单击Play按钮以停止运行。

(2)在Inspector面板中将Car Doors的值改为3,再次单击Play按钮,在Console面板查看新的输出。

注意:这里的目的不是复习变量的语法,而是演示当把变量作为容器时,,如何创建和在代码中引用变量。 

疯狂的方法

就变量而言,除了跟踪指定的值之外,并不能做更多的事情。就创建有意义的应用程序而言,它们本身并不是很有用。那么,如何在代码中创建操作(action)和驱动行为囊?答案是使用方法(method).

在讨论什么是方法以及如何使用方法之前,我们需要澄清术语上的一个小问题。在编程世界里,你会看到方法和函数这两个属于经常互换使用,Unity中也不例外。C#是一门面向对象的编程语言,因此为了符合标准的C#准则,本书统一使用方法这一术语。

注意:当你在参考脚本或其他文档中遇到函数一词时,请当作方法进行理解。

方法驱动行为

与变量类似,方法的定义可能繁琐冗长,也可能十分简短。可以从下面三个方面考虑:

  • 从概念上讲,方法是在应用程序中完成工作的方式
  • 从技术上讲,方法是包含可执行语句的代码块,这些语句在调用方法时运行。方法可以接受参数,并且需要在方法的作用域内使用。
  • 实际上,方法是每次执行时都会运行一组指令的容器。这些容器可以接收变量作为输入,这些变量只能在方法内部使用。

方法也是占位符

这个概念可以使用数字相加的例子来理解,编写脚本实际上是在设定代码行以便计算机按顺序执行,要把两个数字相加,可以像如下代码行一样简单粗暴地进行处理:

someNumber+anotherNumber

得到的结论是,当其他地方也需要把这些数字相加时,可以创建方法来处理这些行为,而不是赋值和粘贴一行代码

AddNumbers
{
 someNumber+anotherNumber
}

AddNumbers就像变量一样会分配内存,但其中存储的不是值,而是指令块。可在脚本中的任何地方使用方法名(调用指定的方法),进而执行方法中存储的指令,以免代码重复。

实践---简单方法

再次打开LearningCurve脚本,看看c#方法是如何工作的,就像之前的变量示例一样,把代码复制到脚本,为使代码更整洁,这里删掉了前面的示例代码,你也可以把代码保留在脚本中以便参考。

刚刚发生了什么

firstNumber和secondNumber这两个变量都会相加并将结果打印到控制台,如图所示,即使它们的值发生变化。

类的引入

前面已经了解了变量和类,但是编译工具仍然有一定局限性,我们需要一种方式来创建超级容器,这种容器有自己的方法和变量,于是,我们引入了类:

  • 从概念上讲,类能够将相关信息,操作,行为存储到单个容器中,类之间可以相互通信
  • 从技术上讲,类是数据结构,其中包含了变量和方法和其他编程信息,
  • 实际上,类就是蓝图。类为创建对象制定了规则。

一直在使用类

默认情况下,Unity创建的每个脚本都是类,这可以从脚本中的class关键字看出来。

public class LearningCurve:MonoBehaviour

MonoBehaviour用于将类附加到Unity场景中的游戏对象上,C#中的类是可以单独存在的。 

日常蓝图

举个示例--邮局,邮局是独立,封闭的环境,既有属性[如物理地址(变量)],也有执行行为的能力[比如发送票据(方法)].邮局是拿来诠释类的最好示例,代码如下:

postoffice
{
 //Variables
  Address="1234 Letter Opener Dr."
  //Methods
  DeliverMail()
  SendMail()
}

当信息和行为遵循预定义的蓝图,实现复杂的行为和类之间的通信变得有可能。

例如,另一个类想通过postoffic类寄信,不用考虑在哪里执行这一行为,而是可以简单地从postoffice类调用SendMail方法

postoffic.SendMail()

注释是关键

LearingCurve脚本中的注释是单行注释。VS会忽略任何以两个反斜杠开始的代码行:

//this is

没错,单行注释只能应用于一样。如果多行想要注释,则需要使用反斜杠加上星号:

实践---添加注释 

vs提供了便利的自动注释功能。在任何代码行的上方键入三个反斜杠,结果如下所示:

 可以看到VS自动添加了三行注释,这些注释夹在两个标签之间。可以像文本文档那样通过按Enter建来改变文本或添加新行。

将脚本附加到游戏对象上

本章介绍了编程的构成要素,在结束本章之前,下面做一些 Unity 特定的整理工作。具体来说,我们需要了解 Unity 如何处理附加到游戏对象上的C#脚本。比如,如何处理附加到Main Camera上的 LearingCurve脚本。

脚本成为组件

  所有GameObiect组件都是脚本,而无论它们是由谁编写的。Unity 特定的组件(如Transform组件)以及它们各自的脚本是不允许我们进行编辑的。
  一旦将创建的脚本拖放到游戏对象上,脚本就变成游戏对象的另一个组件,这就是脚本会出现在Inspector 面板中的原因。对于Unity而言,脚本可以像其他组件一样工作,组件的下方带有可随时更改的公共变量。即使不允许我们编辑 Unity 提供的组件,我们也可以访问它们的属性和方法,从而使它们成为强大的开发工具 。

注意:当脚本成为组件时,Uniy 还会自动进行一些可读性调整。你可能已经注意到,当把LeamingCurve 脚本附加到Main Camera 上时,Unity 会把LearningCurve脚本中的firstNumber 显示为First Number。

变量和Inspector 面板

  前面的实践部分展示了如何在 Inspector 面板中更改变量,但重点是为了更深入地了解变量是如何工作的。当修改变量的值时,存在如下两种模式:

  • Play模式
  • 开发模式

  在Play模式下,所有的更改将马上生效,这对于测试和微调游戏很有用。但需要注意的是,当停止游戏并返回开发模式时,Play模式下的所有更改都会丢失。

   在开发模式下,Unity 会保存变量的所有更改。这意味着如果重启 Unity,那么之前的更改仍会保留。

注意:在 Inspector面板中,我们对变量值所做的更改不会同步更新到脚本中。更改脚本中的这些变量的唯一方法就是在 Visual Studio 中编辑它们各自的值Inspector 面板中显示的值会覆盖脚本中分配的值。

如果需要撤销在Inspector面板中所做的任何更改,可以把脚本重置为默认值(有时称为初始值)。

 

来自MonBehaviour的帮助

  C*脚本是类,那么 Uniy 如何识别出某个脚本是组件呢? 答案很简单,LeaminCuve 脚本(以及 Unity 创建的任何脚)继承自 MonoBehaviour(这是另一类),这让Unity 获知这个C#类可以转换成组件。

  类的继承对于新手来说有点难,这里可以理解为 MonoBehaviour 类将自己的一些变量和方法提供给LeamingCurve。第5章将详细介绍类的继承。

  我们使用的 Start 和 Update 方法都属于 MonoBehaviour,Unity 将在任何附加到游戏对象的脚本中自动运行它们。Stat 方法会在场景开始时运行一次,而 Update 方法每帧运行一次(取决于计算机的帧率)。

类与组件通信

  到目前为止,我们把类乃至 Unity 组件描述为独立的实体;事实上,它们之间确实有着紧密的联系。没有类之间的某种交互和通信,就很难创建任何有意义的应用程序。

输入点符号
  是否还记得前面的邮局示例?当时,示例代码使用句点来引用类、变量和方法。如果把类当作信息目录,那么点符号相当于索引工具:

PostOffice.Address

  类中的任何变量、方法或其他数据类型都可以使用点符号进行访问。这也适用于嵌套类,我们将在第5 章介绍这些主题。

  点符号也能够驱动类之间的通信。当一个类需要另一个类的信息或者执行后者的方法时,就可以使用点符号:

PostOffice.DeliverMail()

注意:点符号有时称为点运算符。因此,如果你在文档中看到这样的描述,请不要感到困惑。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

甘露糖-聚乙二醇-氨基|mannose-PEG-NH2|氨基-PEG-甘露糖

甘露糖-聚乙二醇-氨基|mannose-PEG-NH2|氨基-PEG-甘露糖 氨基&#xff08;Amino&#xff09;由一个氮原子和两个氢原子构成&#xff0c;化学式为-NH2。在有机化学中&#xff0c;氨基是基本碱基&#xff0c;大多数含有氨基的有机物都有一定碱的特性&#xff0c; 中文名称&…

基于数学形态学的路面裂缝图像处理技术-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、图像预处理✳️ 三、路面裂缝图像的边缘检测✳️ 3.1 裂缝识别✳️ 3.2 裂缝区域信息获取✳️ 3.3 裂缝特征提取✳️ 四、参考文献✳️ 五、Matlab代码获取✳️ 一、引言 对于路面裂缝而言&#xff0c; 采用图像处理技术对其进行识别与计…

③计算机病毒实验实验报告

班级 计科2101 姓名 彭彭头 学号 时间 2022年5月6日 成绩 实验项目名称 计算机病毒实验二 实验目的 1、了解脚本病毒的感染方式。 2、了解脚本病毒的手工清除方法。 实验内容 通过批处理文件进行计算机病毒和编写&#xff0c;了解脚本病毒的感染方式。 实验环…

Java笔记(十三)

文献种类&#xff1a;专题技术总结文献 开发工具与关键技术&#xff1a; IntelliJ IDEA、Java 语言 作者&#xff1a; 方建恒 年级&#xff1a; 2020 撰写时间&#xff1a; 2022 年 11 月 18 日 Java笔记(十三) 今天我给大家继续分享一下我的Java笔记&#xff0c; 我们继续来…

【Linux】环境基础开发工具使用

Vim Vim 是一个编辑器 只能编辑&#xff0c;只能写代码 直接输入vim &#xff1a; q就是退出 touch新文件&#xff0c;vim 进入 vim是一款多模式的编辑器 命令模式&#xff08;默认打开的模式&#xff09; 按 i 进入编辑模式/插入模式 esc回到命令模式 冒号进入底行…

【前沿技术RPA】 一文了解UiPath的代码审查工具Workflow Analyzer

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时也是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;UiPath &#x1f980;专栏简介&#xff1a;UiPath在传统的RPA&#xff08;Robotic…

[附源码]java毕业设计企业员工管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Azdio-PEG-Maleimide,N3-PEG-MAL,叠氮-PEG-马来酰亚胺化学试剂供应

1、名称 英文&#xff1a;Azdio-PEG-Maleimide&#xff0c;N3-PEG-MAL 中文&#xff1a;叠氮-聚乙二醇-马来酰亚胺 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Azide PEG Maleimide PEG 4、分子量&#xff1a;可定制&#xff0c;N3-PEG 20k -MAL、N3-PEG 10k -MAL…

EFK部署centos7.9(四)Filebeat 部署

下载安装包 wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz tar xzvf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/ 解压安装包 cd /usr/local/ mv filebeat-6.5.4-linux-x86_64 filebeat cd filebeat/ mv filebe…

Springboot导出Excel,支持大数据量

1、添加maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> 2、ExcelUtil工具类 import org.apache.poi.ss.usermodel.Cell; import org.…

【附源码】Python计算机毕业设计天气预报APP

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

甘露糖-聚乙二醇-炔基|mannose-PEG-Alkyne|炔基-PEG-甘露糖

甘露糖-聚乙二醇-炔基|mannose-PEG-Alkyne|炔基-PEG-甘露糖 中文名称&#xff1a;甘露糖-炔基 英文名称&#xff1a;mannose-Alkyne 别称&#xff1a;炔基修饰甘露糖&#xff0c;炔基-甘露糖 mannose-PEG-Alkyne 甘露糖-聚乙二醇-炔基 炔基-PEG-甘露糖 纯度&#xff1a;…

统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理

目录 一、搭建网关服务 二、路由断言工程Route Predicate Factory 三、路由过滤器 四、全局过滤器GlobalFilter 过滤器执行顺序 五、跨域问题处理 一、搭建网关服务 网关的作用&#xff1a; 对用户请求做身份认证&#xff0c;权限校验 将用户请求路由到微服务&#xff0…

吴恩达机器学习课程笔记二

文章目录神经网络基础知识神经网络前向传播伪代码前向传播中单个神经元的作用矩阵加速运算训练模型的细节常用激活函数ReLUSigmoidLinear activation functiontanh选择激活函数选择输出层的激活函数选择隐藏层的激活函数为什么需要非线性激活函数Softmax激活函数多标签分类问题…

Metabase学习教程:提问-2

查询编辑器中的自定义表达式 何时应该使用自定义表达式&#xff0c;以及为什么要在Metabase的查询编辑器中利用它们。 在数学中&#xff0c;表达式是符号的集合&#xff0c;它们一起表示一个值。如果你以前使用过电子表格软件&#xff0c;表达式就是公式&#xff0c;比如SUM&…

从安装python到使用opencv进行人脸检测

一、python与PyCharm的安装 1.python主要有三种安装方式 参考自&#xff1a;2、Python安装 - 哔哩哔哩 Python安装教程&#xff08;2022最新&#xff09;_北京精神病康复中心的博客-CSDN博客 python下载官网&#xff1a;Python Releases for Windows | Python.org 1&#…

EDI系统如何恢复历史映射关系?

在知行之桥EDI系统中&#xff0c;由XML Map端口来处理不同 XML 之间的映射关系&#xff0c;主要的功能为&#xff1a;通过鼠标拖拽建立关系映射&#xff0c;将输入的源XML文件转换为目标XML文件。 XML Map端口的基本设置为&#xff1a; 源文件&#xff1a;配置源XML文件的模板…

【Java篇】备战面试——你真的了解“数组”的吗?

目录 数组概念 声明数组 数组默认值 数组拷贝及数组类型VS基本类型 Arrays类 二维数组 数组概念 在JAVA语言中数组是一种数据结构&#xff0c;是用来存储同一类型数据的集合或者序列&#xff0c;我们可以通过整型下标&#xff08;index&#xff0c;异或索引&#xf…

Centos7 docker搭建onlyoffice

注意&#xff1a;本文的命令使用的是 root 用户登录执行&#xff0c;不是 root 的话所有命令前面要加 sudo 一、安装docker 1、更新 yum 包&#xff08;使用 root 权限&#xff0c;生产环境中此步操作需慎重&#xff09; yum -y update yum -y update 升级所有包同时也升级软…

Set接口和常用方法

Set接口基本介绍 无序&#xff08;添加和取出顺序不一样&#xff09;&#xff0c;没有索引不允许重复元素&#xff0c;所以最多包含一个nullSet接口的常用方法和List一样&#xff0c;Set接口也是Collection的子接口&#xff0c;因此&#xff0c;常用方法和Collection接口一样 …