【笔记】Unity编程(C#语言详解)

一.为什么游戏需要脚本?

从灵魂、身体、行为三个层面来看,脚本(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.编写基本脚本

面向对象编程概念:类/实例、公共/私有、继承

  1. 类:成员变量+函数(Functions)
  2. 脚本:是以与其文件名相同的类命名的,一旦作为组件被附加到对象上,它就变成了类的一个实例。

在面试中,经常会问到类和实例之间的区别,简而言之,类是宏观的,而实例是具体的。

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.脚本的事件顺序

脚本的事件按照特定顺序执行,这个顺序对于游戏开发至关重要。了解这个事件顺序可以帮助你更好地掌握脚本的使用。

以下是一个简要的脚本事件顺序流程图:

通过理解脚本事件的执行顺序,你可以更好地掌握Unity游戏开发中的脚本编程,为你的游戏增添更多的交互与创意。无论你是初学者还是有经验的开发者,脚本都是连接你与游戏世界的纽带,帮助你创造出令人惊叹的虚拟体验。

猜你喜欢

转载自blog.csdn.net/AlbyGu/article/details/132235547