记录一下自己Unity的学习经历,这次最终将实现一个类似微信跳一跳的小游戏。
Unity项目基本组成
在Unity中物体是一个场景中最基本的组成部分,物体又由物体的组件来实现不同的功能,所以在Unity中,主要的组成流程便是:
·项目-> 场景->游戏物体->组件->组件参数
脚本也属于组件的一种,而熟练的使用各种组件或者插件也是编写脚本的基础,同时运用组件也能够减少脚本的编写量。
创建基本物体
以Unity2020为例,在默认界面下,左侧的Project可以创建各种基本的物体,同时也是场景中所以物体的展示视图:
而在下侧的Hierarchy界面可以创建各式组件和其他东西,同时也是所以资源的管理器和展示视图:
物体的基本属性
大部分物体都拥有一个基本属性:Transform
(点击物体后在右侧检查视图中出现)
他代表这这个物体在场景中的位置、旋转和缩放。
注意:Transform分为世界坐标和本地坐标,在默认情况下Transform视图展示的是本地坐标,在单个物体时不会出现问题,但是如果有物体存在父物体或者子物体:
,那么子物体的在场景中展示的坐标便会变成父物体的Transform和子物体的Transform的相加。
例:Parent的位置是-10/0/0,Cube的位置是10/0/0,他们的关系如上图所示,那么Cube在场景中的位置与单独Cube物体的0/0/0相同。而如果要通过脚本修改Transform,则提供世界坐标和本地坐标两种对象可以修改,注意甄别即可。
物体的基本操作
场景的左上角有物体的控制方法,点击物体之后选择操作就可以在视图上看到可操作的额外显示。(快捷键为QWERTY)
碰撞与重力
在Unity中,想要物体能够产生碰撞,必须要添加各类型的Collider(碰撞器)组件,如果一个物体没有Collider组件,那么它就会像贴图一样被所有物体穿过。
不同的Collider组件在入门使用时基本上只有形状上的不同,碰撞器的形状可以与模型外形相同也可以不同,取决于自己的需求。
(红色物体是可以看到的物体,绿框是实际的碰撞区域,绿框的位置、形状大小都可以进行调整)
同时所有物体默认不具备重力,在添加了Rigidbody组件之后物体就会受重力影响掉落,并且与其他的Collider组件产生碰撞
(如果没有碰到碰撞器让它停下来它就会无限下落)
了解脚本基础
语言的相关基础就不在这里写了,在Unity中入门使用脚本的话不需要太深入的知识,先介绍一下Unity中脚本的基本组成。
在下方项目资源面板中右键可以创建C#脚本,创建后立即更名。创建后打开可以看到默认脚本的格式:
注意:第五行中的PlayerControl类名需要与你创建的脚本名字相同,如果不同会导致报错,后面的MonoBehaviour为继承的类不要变动
我们编写脚本主要要在这个类中进行编写(即图中7行之后)。
其中两个默认的函数是脚本生命周期中会被运行的标志,在Unity中,一个脚本的运行会按照启动时、运行时、结束时分别进行。
写在Start中的代码会在这个脚本在被启用时自动运行一次,写在Update中的代码会在这个脚本被启动之后的每一帧都运行一次。Unity中不止有这两种生命周期,其他的先不做介绍。
自写的函数的调用不一定需要通过Start、Update这类Unity的脚本生命周期调用,也能通过其他方法调用,比如后面使用的InputSystem插件。
角色控制
新输入系统InputSystem是2019年Unity新推出的插件,我们选择他取代原本的输入管理器。
在窗口-包管理器中选择左上角的包:Unity注册表,寻找InputSystem安装,点击Yes后会重启Unity完成安装。
为物体添加组件Player Input,添加之后我们的操作就可以对应到这个物体上了。
点击物体-在查看器中的最下方添加组件,搜索Player Input进行添加。
添加后点击Create Actions…添加默认控制配置,先创建在自己喜欢或者好管理的位置即可,创建完成后的配置窗口可以先不动。
将Behavior选项选择为Invoke Unity Events,点开事件之后可以看到Player和UI选项,查看Player选项可以看到三个列表框,它们代表了我们操作后要运行的函数,运行的函数需要我们自己编写脚本。
此时在资源视图中创建一个脚本,如图进行编写:
编写完成之后的步骤是:将资源中的脚本添加到你的角色对象上->在PlayerInput组件的事件-Player-Move中点击+号,将组件中的脚本拖入出现的无(对象)框中->点开NoFunciton框选择要运行的函数(OnMove)->修改Rigidbody的Constraints,冻结所有旋转->启动游戏,点击游戏窗口,按键盘的WASD或者方向键移动物体。