一.为什么游戏需要脚本?
从灵魂、身体、行为三个层面来看,脚本(Script)为游戏注入了生动的元素。脚本代码并非独立运行的程序,它依赖于Unity引擎的运行环境,并需附加到特定对象上。在Unity脚本中,没有像传统程序中的"main"函数,而是用于更新游戏循环中的对象。Unity为脚本提供了API以便访问引擎功能,例如响应玩家输入、创建图形效果、控制物理行为、加载下一关卡以及处理逻辑和交互等。
1.创建脚本
脚本默认保存在资产(Assets)文件夹中,最佳实践是将其保存在“Script”文件夹下。创建脚本后,你将声明一个新的类,这个类将继承自MonoBehaviour。需要注意的是,脚本在运行时需要加载命名空间,就像引入"include"一样。类名应当是唯一的,且应与文件名匹配。在语法方面,每行代码都需要分号";"结尾,大括号"{}"必须前后匹配。
2.应用脚本
脚本的应用可以通过在Console窗口中打印文本来进行调试。在将脚本附加到对象时,你需要思考如何添加注释以及将其附加到哪个对象上。
3.编写后端脚本
Unity引擎的内部构建是使用本地的C/C++,但与之交互时使用了C#的包装器和开源.NET平台。脚本依赖于后端的执行,而Unity拥有两种脚本后端(默认情况下,Unity在各个平台上使用Mono后端):
- Mono runtime:单运行时,实时Just-in-time(JIT)编译(.net)
- IL2CPP:面向C++的中间语言,提前ahead-of-time(AOT)编译,整个应用程序在运行前进行编译
二.C#语言:编译型语言
如今,Unity只支持C#编程语言,它音译为“See Sharp”,是微软通用的编程语言。C#的含义是"C like Object Oriented Language",即“类似C的面向对象语言”,与Java语言竞争激烈。
C#是一种面向对象和面向组件的编程语言,基于类,它是强类型检查的语言,必须显式声明类型。
1.基本性质
它继承了C家族语言(C/C++/Java)的许多原则:
- 有表示语句结尾的分号;
- 圆括号“{}”用于对语句进行分组
- “=”用于赋值,“==”用于比较
- 没有全局变量或函数,所有内容都在类中声明
- static静态成员可以替代全局变量和函数
- 对指针的支持有限
-
2.编写基本脚本
面向对象编程概念:类/实例、公共/私有、继承
- 类:成员变量+函数(Functions)
- 脚本:是以与其文件名相同的类命名的,一旦作为组件被附加到对象上,它就变成了类的一个实例。
在面试中,经常会问到类和实例之间的区别,简而言之,类是宏观的,而实例是具体的。
3.变量(Variables):
Public可从外部访问的公共变量,如其他script / inspector;
Private从外部无法访问私有变量;
Public公共变量显示在inspector中,必须带有类型,用大写字母分隔;
Private私有变量不是在play期间,可以在检查器中调整公共变量,但这不会改变脚本中的默认值,大家可以想一想为什么?
“Static”(静态)变量/函数在所有实例中共享,像全局变量/函数
可以根据需求设定public或private,变量名称应以小写字母开头
最好是用有意义的词来命名,例如:苹果数量写为appleCount
声明类型,指定初始值。所有变量均为默认为零值
组件和脚本中初始值之间的差异
播放过程中的更改无法保持
4.组件访问
在Unity中,使用"."来访问成员变量和函数,组件是GameObject的成员变量。在脚本附加到对象时,它可以访问其他组件和GameObject。一些常用的组件有:
- Transform:对于所有游戏对象,变换
- Renderer:渲染器,渲染对象、材质、纹理等
- Rigidbody:刚体,一种物理财产
- Collider:碰撞器,用于碰撞检测
- Particle system:粒子系统,可以形成烟雾、爆炸、雪花等效果
5.函数(Functions)
*这一部分Unity面试时常考
函数按事件间歇调用,Unity将控制传递给一个函数,执行它,然后获取控制回位
函数名称应该以大写字母开头,带或不带变量列表
*初始化功能
- Awake():在场景加载时为每个对象调用,被称为"BEFORE start"
- Start():在第一帧或物理更新之前调用
(对每个对象都只调用一次)
*常规事件函数
- Update():每一帧执行一次,1秒不一定执行几次;处理帧更新,如对用户输入的响应;渲染前更改状态
- FixedUpdate():执行次数固定,是物理效果;在每次物理更新之前,以固定的时间间隔;会被Unity引擎自动调用
*物理功能
·物理引擎报告物理事件,如碰撞,调用该对象脚本上的事件函数
- OnCollisionEnter() #两个物体开始碰撞的时候发生什么
- OnCollisionStay() #接触在一起的时候
- OnCollisionExit() #碰撞分离的时候
*创建和销毁对象
可以在场景中创建恒定数量的对象,如player、treasure等
游戏过程中会创建和删除一些其他对象
使用“Instantiate(实例化)”创建现有对象的新副本prefab及其所有部件
使用“Destroy(销毁)”在帧更新或拍摄时间延迟后
A:为什么函数里要写Time.deltatime:即按1秒执行60*speed*▲t(≈1/fps)
Q:作用是与FPS消除,使得所有用户的电脑都是1秒执行同样内容,速度差不多。
-
6.脚本的事件顺序
脚本的事件按照特定顺序执行,这个顺序对于游戏开发至关重要。了解这个事件顺序可以帮助你更好地掌握脚本的使用。
以下是一个简要的脚本事件顺序流程图:
文章来源:https://www.toymoban.com/news/detail-776432.html
通过理解脚本事件的执行顺序,你可以更好地掌握Unity游戏开发中的脚本编程,为你的游戏增添更多的交互与创意。无论你是初学者还是有经验的开发者,脚本都是连接你与游戏世界的纽带,帮助你创造出令人惊叹的虚拟体验。文章来源地址https://www.toymoban.com/news/detail-776432.html
到了这里,关于【笔记】Unity编程(C#语言详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!