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

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

本文主要来自<>哈里森.费隆 著,仅用为做笔记。

定义变量


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

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

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

image.png

变量可以理解为是我们程序可以操作的内存区域的名称,在 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脚本中创建变量,不必担心语法:

image.png

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


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


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


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

15f232c7e6b1400fb77c36182af0f6c1.png

刚刚发生了什么

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

image.png

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


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


LearningCurve脚本的第7行声明了carDoors变量,因此可以更改其中存储的值。更新后的值会在代码中使用了carDoors变量的地方起作用,让我们看看实际效果。(1)如果场景还在运行,请单击Play按钮以停止运行。

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

image.png

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

疯狂的方法


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


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


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

方法驱动行为


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

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

方法也是占位符


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

someNumber+anotherNumber

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

AddNumbers
{
 someNumber+anotherNumber
}

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

实践---简单方法

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

image.png

刚刚发生了什么

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

image.png

类的引入


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

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

一直在使用类


默认情况下,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

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

image.png

实践---添加注释

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

image.png

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


将脚本附加到游戏对象上

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

脚本成为组件


 所有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面板中所做的任何更改,可以把脚本重置为默认值(有时称为初始值)。

image.png

来自MonBehaviour的帮助


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

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


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

类与组件通信


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

输入点符号

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

PostOffice.Address

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

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

PostOffice.DeliverMail()

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

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

PostOffice.DeliverMail()



相关文章
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
20 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
77 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
58 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
数据采集 前端开发 C#
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
Twitter是全球最大的社交媒体平台之一,包含丰富的音频资源。用户可以在Twitter上发布、转发、评论和收听各种音频内容,如音乐、播客、新闻、故事等,直接从Twitter抓取音频数据并非易事,尤其是在考虑到可能的封锁和反爬虫机制。Twitter会对频繁访问的IP地址进行限制或封禁,以防止恶意爬虫的行为。因此,我们需要使用一些技术手段来规避这些障碍,确保稳定而高效的数据访问。
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
|
3月前
|
程序员 C#
深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。 要创建枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔枚举项:
38 0
|
4天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
4天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
|
5天前
|
IDE 程序员 C#
C#编程入门:从零开始的旅程
【4月更文挑战第20天】本文引导初学者入门C#编程,从环境搭建开始,推荐使用Visual Studio Community版作为IDE。接着,通过编写&quot;Hello, World!&quot;程序,介绍基本语法,包括数据类型、运算符和表达式。文章还涉及控制结构、函数和方法,以及面向对象编程概念。通过学习,读者将对C#有初步了解,并激发进一步探索编程世界的兴趣。
|
5天前
|
开发框架 .NET Java
探索 C#编程的奥秘与魅力
【4月更文挑战第20天】C#是微软开发的现代、面向对象的编程语言,以其简洁语法、强大功能和跨平台支持脱颖而出。它支持自动垃圾回收、泛型、委托、LINQ,并广泛应用于桌面、Web、移动和游戏开发。C#拥有活跃的开发者社区和丰富的资源,是Unity游戏开发的首选语言。随着.NET Core,C#可在多个操作系统上运行,持续创新,未来发展潜力巨大。