您要开始学习Unity中的代码这样就鈳以开始制作第一款游戏,但您不知道该从哪里开始我们经过深思熟虑,推荐以下Unity中脚本元素和一些学习材料的详细目录您可以使用這些资料来完成更高级的游戏,例如这应该包括以下几个方面:编码的基础知识,例如变量、函数和类以及如何使用它们。
如果您是┅位经验丰富的工程师则应该从这里开始,.
脚本告诉GameObjects如何表现;它是附加到GameObjects的脚本和组件;它们如何互相交互,从而構建游戏玩法现在,在Unity中编写脚本与纯编程不同如果您已经完成一部分纯编程,例如已创建一个正在运行的应用程序则应该知道在UnityΦ不需要创建运行应用程序的代码,因为Unity会创建这些代码相反,您只需要专注于脚本中的游戏玩法
Unity在一个大循环中运行。它读取游戏場景中的所有数据例如,它通过光照或网格进行读取读取数据采取的行为,并且它会处理所有这些信息
如果想想电视,例如在北美為29.5帧/秒Unity需要做同样的事情。它需要相继依次运行单个离散帧您可以使用在脚本中编写的指令指导Unity,并且Unity会尽可能快地逐帧执行
实现高帧率意味着不仅游戏看起来将更加流畅,而且脚本执行也会更频繁从而使得控件的响应更加快速。
必须将脚夲附加到场景中的GameObject才能被Unity调用。脚本应该使用Unity可以理解的语言编写并且,我们可以通过该语言与引擎进行沟通并提供指令
Unity中使用的语訁称为C#(发音为C-sharp)。Unity使用的所有语言都是面向对象的脚本语言与任何语言一样,脚本语言具有语法或词性并且主要部分称为变量、函數和类。
如果您使用的是Unity 2017.3及之前的版本就会注意到它包含一个名为MonoDevelop的文本编辑器:它可以帮助我们完成代码,如果我们编写的代码有错它会告诉我们,并且允许我们采用快捷方式从2018.1版开始,您还可以使用或其他文本编辑器,例如Visual
以下是包含一些示例代码的脚本(基於):
如您所见有变量、函数和类。
变量保存值并引用对象(可以将对象看作是“更大的”变量)变量就像一个装有供我们使用的东西的盒子。变量以小写字母开头
函数是比较和操作这些变量的代码的集合。函数以大写字母开头我们在函数中组织代码,以便可以在程序嘚不同部分轻松地多次重复使用它们
类是一种构造代码以将变量和函数的集合包装在一起的方法,以创建用于定义对象的属性的模板
腳本主要是用于比较这些对象及其当前状态和值。它基于确定结果或解决方案的逻辑
在Unity中,脚本首先在顶部布局所需的工具这通常是通过声明变量来实现。您可以看到声明变量前面带有可见性关键字“public”或"private"后跟类型和名称。
当我们声明您的变量时可以使用几种可见性类型,但最重要的是两种:public和private
如果在代码编辑器中使用上述文本创建脚本,然后返回Unity并将脚本分配给GameObject则可以访问并查看在Inspector中声明为公共变量的光照变量,但看不到私有变量这是因为定义为“私有”变量的内容只能在此特定类中的该特定脚本中访问。
如果将其定义为公共变量则可以访问其他脚本和其他类,并且可以在Unity编辑器的Inspector中进行更改因此,这意味着其他用户可以访问并更改其值
既可以选择私有变量,私有变量可以让代码变得更清晰因为这些变量的值只能在该类中更改。这使得调试和维护代码变得更容易
如果选择“公共”变量并且遇到问题,则需要查看整个代码库以便跟踪源代码因为任何其他对象都可以访问该变量。但是如果希望对象在它们本身之間进行通信,则需要将一些变量(或函数)变成公开变量(或函数)
变量的另一个重要方面是类型。类型定义在内存中保存变量的值的類型例如它可以是数字、文本或更复杂的类型,如下图所示:下图中的Transform、Light和Demo Script实际上是对Components的引用Unity需要知道对象的类型,以便知道如何进荇处理
关于变量的另一个重要方面是名称。需要注意的是命名变量不能以数字开头,并且不能包含空格因此,编写名称有一种固定嘚格式在C#中,命名约定采用camelCase形式:以小写字母开头后接以大写字母开头的单词(不带空格),例如"myLight"
当Unity编译脚本时,它会使公共变量茬编辑器中可见请参见Inspector中的下图。
脚本可以通过使用函数操作变量Unity中包含许多可以自动运行的函数。请参见下文:
Awake只能在实例化具有該组件的GameObject时调用一次如果GameObject处于非活动状态,则在使其变为活动状态之前不会调用但是,即使GameObject处于活动状态但未启用组件(其名称旁边帶有小复选框)也会调用Awake。您可以使用Awake初始化需要为其分配值的所有变量
Start — 与Awake类似,如果GameObject处于活动状态则会调用Start,但前提是已启用該组件有关与Awake的区别的更多详细信息,请观看.
Update在每帧执行时调用一次这是您放置代码以定义连续运行的逻辑的位置,如动画、AI和游戏Φ必须不断更新的其他部分
FixedUpdate是您在执行物理工作时调用。
如您所见还有FixedUpdate和Update函数,在我们的脚本教程部分中您可以了解.
LateUpdate是类似于Update的函數,但LateUpdate是在帧结束时调用Unity将查看所有游戏对象,查找所有Update然后调用LateUpdate。该函数适用于某些组件如摄像机。假设您要在游戏中移动角色然后该角色被另一个角色偶然碰到并最终位于不同的位置。如果我们在与移动角色的同时移动摄像机则会出现抖动,并且摄像机也不會出现在所需的位置因此,基本上该函数是非常方便的第二个循环。
编写函数时请记住函数以开始时函数的返回类型开头,后跟函數的名称然后是用括号括起来的参数(如果有)。函数名称以大写字母开头函数主体用大括号括起来。以下是关于如何编写函数的示唎:
函数可以进行计算然后返回一个值。您可以要求函数执行某些操作处理信息,然后返回答案如果使用"void"类型,则函数不返回任何徝
类是这些变量和函数的集合。例如此脚本是一个类:
请记住,类名称必须与C#脚本的文件名匹配才能生效然后,要将其附加到GameObject它必须从首次创建脚本时自动放置在此的另一个名为MonoBehaviour的类派生。类也可以是公共类或私有类
在Unity中,如果创建自定义类如下例所示,则必須要求它这意味着它将转换为Unity可以在Inspector中查看的简单数据。执行转换操作时可以看到拥有的类将出现在Inspector中。
变量、函数和类只是在Unity中开始编写代码的基础知识可以找到一系列帮助您从头开始学习编程,然后继续为项目创建详细的代码
谢谢楼主!!!!!!!!!!!!
学习zhong....学习了!!!!!!!!
场景看上去不错场景看上去不错
这么贵买不起,能免费不
游戏完整项目+完整C#源代码 下载
赞赞赞赞赞贊赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
感謝大大分享,看看多貴再說....
3月23日我们在GitHub上发布了Unity引擎和编辑器的C#源代码仅供Unity学习参考使用。
为了了解或改进自己的Unity项目一直以来有用户对Unity .NET程序集反汇编,我们的服务条款明确允许这样做但反彙编有二大缺点:
尽管这不难做,但过程还是十分麻烦
反汇编后导出的结果不会给出最初的注释和变量名,这样要理解代码会很困难
為了提供方便,不少社区成员不辞辛劳向GitHub仓库提供反汇编的代码实话说,我们对这件事的感觉比较复杂一方面,我们很高兴看到用户為壮大Unity社区提供实用的服务但另一方面,这种行为从严格意义上说是违法的虽然我们的服务条款允许进行反汇编,但服务条款里却不尣许将这些代码发布
我们经过良久的考虑,决定解决这些问题的最好办法只有一个:那就是我们自己发布源代码
为了防止产生误解和標题党,我们认为需要花些篇幅具体解释一下我们的做法
我们不会将Unity开源。抱歉我们也没有开源的计划。我们并非不喜欢开源事实仩我们其实有很多开源项目,例如:UI系统Networking等。请参考:
如果将来我们再也不需要源代码,而且这样做不会影响我们的业务我们会开源所有Unity的代码。但在可以预见的将来中我们会保有主引擎的所有权,C#参考源代码会在特定协议下发布用户仅可以阅读代码,不可以修妀代码请查看完整的协议文本,请先了解所有细节以免触及底线做违法的事
我们也不会接受C#参考源代码的合并请求。我们既没有法律框架也没有组织框架来处理这些合并请求更不用说准备合并请求这个行为本身就已经违反了参考协议。
我们希望能从中了解到C#参考源代碼有哪些错误请使用Unity Bug Reporter来汇报错误,不要只是在GitHub上提交合并请求注意,使用Unity Bug Reporter来汇报错误时候需要详细描述问题,指出在参考源代码中囿哪些与问题相关的代码行或文件
所有进入UnityEngine和UnityEditor托管程序集中的C#源,其每个版本都会从在未来的日子里,这个库将会在每次新版本发布後不久进行更新
通过查看每次提交,你可以发现在后续版本之间发生了哪些变化例如:你可以看到Unity patch 2的更新中修改了这些文件:
Unity引擎及編辑器C#源代码地址:
以上就是这篇文章的所有内容。请享受将其用于Unity学习参考的过程并且继续unity支持c#版本Unity吧!