接出来我们使用unity制做第一个小游戏,我恐怕这也是所有unity开发者都十分熟悉的一个类似“HelloWorld”标致的游戏了——滚动小球
一、创建项目(名子自取),创建场景,起名为
二、创建一个地面对象(滑鼠右键->3D->Plane),并将其设置为0,0,0,之后把其长宽扩大1倍(即Scale设置为2,1,2)
之后我们想要改变地面对象的颜色须要这样做:首先在目录下新建一个文件夹,之后右键如图创建一个并命名为
之后键盘拖动此材质到对应的游戏对象上
下边介绍下Plane游戏对象的组件构成,组件用于指定对象的位置、旋转、缩放;Mesh组件用于指定该对象是一个哪些类型对象;Mesh用于设置对象形态属性;Mesh用于设置碰撞检查(通常会做两套建模,一套拿来显示对象具体形象,另一套会简化用于碰撞测量的模型,比如RPG游戏,人物会用软膏体作为碰撞测量模型,但FPS类游戏就不行)。我们在点击Gound步入到设置界面,之后单击这个位置都会弹出选色卡,最后选择自己喜欢的颜色就可以了
实现逻辑:
悉心的人会发觉在Plane对象中也会把材质展示下来,这显然是为了便捷我们快速对应材质并更改(当材质和对象好多时这样是很便捷的)
三、创建小球,并命名为,指定为0,3,0,同时我们给之前的Plane也起个名子命名为,同时根据相同的方式创建另一个命名为给小球着色
设置小球光滑程度(不让它反光太厉害)
同样的方式地面也可以设置
最终疗效如图:
unity引擎外置了碰撞估算和测量,我们只须要指定碰撞后须要做哪些(如主角扣血或死亡)
四、为小球添加钢体组件(即重力、摩擦力、弹力)
点击小球对象->Add->->
之后运行游戏即可见到小球落在了地板上
五、给小球添加滚动风波
两种方式创建:
法一:点击小球->Add->New->填入文件名->点击创建,即可在下创建对应,且早已与小球对象关联
法二:在下新建文件夹,右键->->C#->命名,之后将此拖到小球对象上即可邦定
注意:组件前有一个打钩选项,代表组件是否要使用,请保证使用时是选中状态
双击创建的文件即可用vs打开(确保此文件名与类名一致),代码中start方式用于游戏开始前的初始化工作,方式用于游戏运行中的更新操作(每帧调用一次,每秒60帧)
添加测试代码:
将钢体组件与脚本关联,便于后续进行业务逻辑的操作
方式一:使用代码
rd = GetComponent();
方式二、拖动钢体组件到简本,即拖动到如图位置(但这些方式使用较少)
之后我们再给钢体添加一个往右的力(不指定大小默认是1N),注意要再中添加此代码,这样小球就会仍然运动
假如定义钢体时设为则不会显示对应设置,同时也未能通过拖放绑定钢体
为小球设置一个自定义大小的力
rd.AddForce(new Vector3(10, 0, 0));
六、通过鼠标控制小球的滚动
获取鼠标左右方向输入(按下A或方向左键,返回0~-1之后仍然为-1;按下D或方向右键,返回0~1之后仍然为1;为何要有一个从0到1的过程?由于数学中物体运动时有一个加速度的疗效)
float h = Input.GetAxis("Horizontal");
Debug.Log(h);
之后我们将鼠标输入值形参到力中
float h = Input.GetAxis("Horizontal");
rd.AddForce(new Vector3(h, 0, 0));
同理获取按键前后方向输入(按下W或方向上键,返回返回0~-1,按下S或方向下键,返回0~1)
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(h, 0, v));
假如认为小球滚动的太慢,可以改变力的大小,如
rd.AddForce(new Vector3(h, 0, v)*10);
若果不想用WASD去控制上下左右,可以在这儿设置:->Input->Axes->/(其中与我们代码中floath=Input.("")的相对应)
七、调整单反位置(使视野愈发宽阔)且追随小球
如图,在Scene面板下调整单反的高度和旋转度(即带动红色箭头往上一些,旋转黄色环使单反朝下一些),之后将小球置于地板上(不要一开始增长了,注意小球本身半径为1m,所以设座标为0,0.5,0)
给单反添加脚本(Add)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowTarget : MonoBehaviour
{
public Transform playTransform;
public Vector3 offset;
// Start is called before the first frame update
void Start()
{
playTransform = GameObject.Find("Player").GetComponent();//获取小球的初始位置
offset = transform.position - playTransform.position;//获取初始时小球和相机间的距离
}
// Update is called once per frame
void Update()
{
transform.position = playTransform.position + offset;//相机的位置随小球的位置改变
}
}
可以看见滚动小球时单反会随着一起动
八、添加院墙避免小球落到地面以外的地方
新建Cude,起名为Wall(注意位置为0,0.5,0),并拉伸使其布满一边(如这儿缩放比是1,1,20),之后放在地面的各边(位置变为:10,0.5,0),并设置(不光滑、颜色)
之后我们ctrl+d进行复制,制造另外的墙,对边直接联通过去即可,领边设置旋转读书为90°即可
假如认为边上的棱角不好看可设值任意两个对边宽度为21
这样小球在滚动时就不会掉到外边去了
为了便捷,我们将所有和场景有关的对象放在一个空对象下滚动摩擦力方向判断,便捷后期对象的管理,我们新建一个键盘右键->Empty,命名为Env,之后reset一下(这一步很重要,不做会造成场地错乱),之后将Wall和放在此对象之下
八、制作一个最简单的类似贪吃蛇的游戏,小球类比贪吃蛇,六面体类比食物
新建Cude,命名为Food,缩放比为0.5,0.5,0.5,旋转度数随便,设置(不光滑、颜色)。创建预制体文件夹,将刚刚创建好的Food拖到该文件夹中,这样此Food就可以作为模板多次使用且更改配置只需更改此模板即可
使用预制体创建相同类型游戏对象滚动摩擦力方向判断,技巧一:在面板,直接拖到游戏场景中;方式二:直接复制面板的Food(推荐,由于可以保留位置等属性)(预制体和其子对象,可以理解为类和对象的关系)
更改面板下预制体属性会影响所有Food属性,但更改下某Food属性只会更改该对象的属性
假如想让一个子对象的属性赋给预制体,可旋转如图ApplyAll
为预制体设置脚本,便于实现Food旋转的功能,设置Food旋转(1s旋转60此,每次向下旋转1°)
查看文档:Help->Unity/API
英文文档:Unity用户指南2020.3(LTS)-Unity指南
为小球()设置碰撞检查逻辑,在脚本下新建三个方式,如图:
:碰撞发生了(即两个物体刚才接触)
:碰撞进行中(即两个物体接触中)
:碰撞结束了(即两个物体脱离接触)
添加一个Food标签,之后将预制体的Tag设置因此标签(设置标签是为了批量处理某一些相同标签的对象,如这儿是为了判定小球碰撞到了什么物体)
当小球碰撞到标签为Food的物体时,销毁被碰撞物体
但我们在实际操作过程中会发觉,当碰撞后小球会被Food抵挡一下,特别影响游戏体验,所以我们改用触发检查(即不会发生碰撞,小球会穿过物体)
将预制体的碰撞器更改为触发器,这样就不会执行方式了
并将逻辑代码改为在中调用
九、计分(每吃一个Food计1分)和胜利提示
在脚本中添加计数变量
创建UI组件以显示分数,右键->UI->->Text即可,之后切换到2D模式下,双击随后,如图,所有的UI组件就会置于下,用于UI的风波处理(如点击等)
调整文字居中显示
调整文本框位置为右上角(右侧的设置是为了保证不管屏幕宽度多长一直都在右上角)调整字体大小和文本内容
之后在代码中定义一个Text对象,并在小球吃食后将分数复制到Text
使用代码将对象与之前创建的文本框绑定
创建胜利提示:再创建一个Text(同上),置于屏幕中央,调整下字体颜色,之后编码如下
十、打包发布
File->Build->AddOpen,假如右多个场景则将其拖到大文本框中,默认显示第一各场景,其他场景须要代码调整才能跳转
选择发布平台:
之后点击Build即可,之后会生成如下文件
游戏运行后默认是全屏显示
假如想窗口显示,可在中设置
假如想在联通端发布,须要下载相关模块,打开,勾选相关模块下载
后续操作同理