1、游戏界面分辨率和相机调节:
(1) Game界面下,点击Free Aspect,选择16:9
(2) 相机调节:
2、创建墙:
(1)Hierarchy界面,右键-Create-2D Object-Sprites-Square 重命名为Wall,重置位置(Position),Y坐标改为10。Scale中X改为45
(2)选中Wall,Ctrl+D,Position中Y改为-10;
(3)选中Wall(1),Ctrl+D,Position中Y改为0,Rotation中,Z改为90,Scale中,X改为20,Position中X改为-22;
(4)选中Wall(2),Ctrl+D,Position中X改为22,用同样的方法做最后一道Wall
(5)Create Empty,将四面墙放入其中
拖放被吃物体,放在适当位置
3、创建背景:
(1)Create-2D Object-Sprites-Square,重命名为bp;Scale中X=44,Y=20,选适当颜色
(2)选中bp,找到Additional Settings,使Order in Layer的值=-1(设定当前图片需要显示的位置——类似于置于底层)
(3) 观察另外两个物体的层级,按需要进行设定
4、移动游戏对象(蛇)之前的测试:
(1)重置游戏对象的Transform
(2)测试代码绑定情况:新建脚本Snake
(3)测试得到游戏对象的transform组件中的Position:
(4)测试移动位置功能:
(5)用按键移动游戏对象:
W:向上(移Y轴);S:向下(移Y轴);D:向右(X轴);A:向左(X轴)
5、移动游戏对象
(1)声明一个类型为Vector3(包含3个数据),名字为direction的变量(名字可以自定),
(2)给direction赋值:up(向上);down(向下);left、Right
(3)获得当前游戏对象的位置并注释位置信息——游戏对象持续移动
(4)阻止游戏对象(蛇)直接反向移动(不转弯的回头)
同样更改其他方向的运动
(5)更改游戏对象的移动速度:(游戏通常用到的方法):
注 1 :Time.DeltaTime :一帧所经历的时间
注 2:本游戏用(6)的方法
(6)使贪吃蛇一格一格地移动(使用慢动作的方法)
A. 在Void Update()方法之后 新建另一个方法
B. 进一步降低游戏速度(本游戏使用步骤C.的方法):
注意:使用小数时,在数字的后面加f
TimeScale:在Unity中游戏执行的速度;正常的运行速度是1,
0.1f:游戏运行速度放慢,是正常速度的1/10
C. 进一步降低游戏运行速度的另一种方法(本游戏使用的方法):
把变量放在Unity编辑器的Inspector面板的Script面板中,在面板中修改数据
声明一个公共类型(在面板中显示)的变量,变量类型为Float(小数类型),变量名字为Speed:
把Speed赋值给游戏运行速度后,Unity中显示Speed选择框,可直接设定游戏运行速度
6、让游戏对象与其他物体产生碰撞(蛇碰到苹果)
(1)给游戏对象(蛇)添加Circle Collider 2D组件(2D模板下的碰撞体):Add Component-Circle Collider 2D
(2)编辑Collider 的大小:点击Edit Collider右侧图标,在Scene界面出现绿色方点,拉动即可调整Collider的大小
也可通过下方Offset和Radius中的数字进行调整:X=0,Y=0
(3)给被吃物体添加Collider 2D组件,修改它的大小
(4)给游戏对象(蛇)添加刚体(Rigidbody)组件,并在Body Type 右侧框中选择Kinematic(无视物理效果但仍有刚体特性)
(5)把两个物体的碰撞体转变为触发器:在两个物体的Collider 组件中勾选Is Trigger(无视物理效果,只有检测到接触的功能)
(6)检测触发器功能:
A.给被吃物品新建一个C#,命名为Food(被吃物品Add Component-New Script;或者直接新建C#,拖放到被吃物品的Inspector空白处)
B.打开Food,
collision:触发对象(蛇)
7、确定墙的位置范围(给墙一个碰撞效果)
(1)创建一个名为foodarea(食物出现的区域)的空物体:Create Empty,重置这个物体的位置
(2)选中该物体,添加Box Collider 2D组件,Offset中x=0,y=0;Size中,x=42,y=18
(3)在food脚本声明一个名字为foodArea,类型为Collider 2D的变量
(4)Unity中出现Food Area变量框(承载碰撞体的物体),将Hierarchy面板中的Foodarea拉进右侧变量框(或按右侧图标选择)
(5)调整FoodArea碰撞体的范围(用Edit Collider右侧图标,或者Size调整)
将苹果拖放到墙的边缘,取苹果的一半位置为碰撞体的大小(如下图)
8、使被吃物体出现在墙内的任一位置(发生在蛇与苹果接触后):
(1)测试墙的边界数据:
打开Food.cs,在触发器后写入脚本Debug.Log(foodArea.bounds.min.x);分别获取墙的边缘的x、Y轴的最小、大值
(2)获取墙内的任一位置:
在X/Y轴上的最小值和最大值之间随机产生一个数值:Random.Range(foodArea.bounds.min.x,foodArea.bounds.max.x);
(3)将(2)中产生的位置赋予被吃的食物
9、游戏开始运行时苹果位置随机:
(1) 方法1:将步骤7(3)中的35~39行代码复制到Start事件中
(2) 方法2——把重复使用的代码打包:创建一个方法:void RandomPosition(){}
在需要调用的方法中输入:方法的名字();
10、创建身体并使身体在物体接触事件(蛇吃掉苹果)时出现
(1) 创建身体图片:Create-2D Object-Sprite-Circle,命名body,重置位置,更改颜色
(2) 把图片变为预制体:
把图片拖放到Project面板中的Asset文件夹中(也可以放入新创建的Prefabs文件夹中)
(3) 删除Hierarchy面板中的预制体
(4) 通过脚本使body出现(在吃到苹果后)
A. 打开Snake脚本,声明一个名为bodyPrefab的变量,保存脚本
B. 打开Unity,在Snake的脚本面板上出现该变量,把body这个预制体拖放到右侧可选框中
C. 在Snake脚本中,当蛇吃到苹果时,body被加载到游戏场景中(Instantiate:生成物体)
注意:运行游戏时,系统默认Snake与foodArea(冲突碰撞体)产生接触一次,因此,在游戏开始蛇未与苹果碰撞前,body自动加载一次
D.判断冲突碰撞体的方法
运行游戏可见冲突碰撞体为foodArea
E.给苹果添加一个新的标签,并选择这个新增标签
F.打开Snake脚本
11、创建一个List用来装载陆续增长的身体
(1) 在Snake脚本中,声明一个变量,名字自取(如bodies),类型为Transform
public:在unity中的Snake脚本中会出现一个Bodies图标,用来显示加载的物体
目前Bodies右侧的数据为0,说明没有加载物体
List:创建一系列格子,每个格子都可以保存一个物体,如下表
0 | 1 | 2 | 3 | 4 |
注:0 的位置放置蛇的头部,1、2、3、4……放置陆续出现的蛇的身体
(2)使蛇的头部在游戏运行开始时就出现
注:当前角色是指脚本挂载的物体,在这里是指Snake
运行游戏,可见加载1个物体,加载的物体名称为Snake:
(3) 接触到标签为food的碰撞体时(蛇吃掉苹果时),生成bodyPrefab,并将之储存在List中:
12、使游戏对象(蛇及生成的身体)移动:
(1) 打开Snake脚本,找到移动事件
(2) 使用for循环使生成的物体移动:
bodies.Count:bodies的长度(Count:系统自带)
int i = bodies.Count - 1; // 初始值等于bodies这个List的长度-1
(3) 改变生成物体的初始位置和角度:
13、角色撞到墙,游戏结束
(1) 给四道墙增加box Collider 2D,勾选Is Trigger(无物理碰撞效果,只是一个触发器)
(2) 添加一个专属标签:自主命名,如:obstacle(障碍物)
(3) 在Snake脚本,找到OnTriggerEnter2D事件,写入代码并测试
(4) 当游戏对象接触到墙,游戏对象回到初始位置(0,0,0),且游戏停止
(5) 游戏结束时,删除加载到游戏中的bodyPrefab物体(bodies数组中的物体)
14、游戏对象撞到bodyPrefab,游戏结束
(1) 改变游戏对象(蛇)、被吃物体(苹果)的碰撞体大小(调节Edit Collider或Size都可以)
(2) 给预制体body添加Collider 2D,并修改预制体的标签为obstacle
15、使每次运行游戏时,游戏对象(蛇)都在界面的中心点
16、调整代码,使程序更安全和有效率
(1) 在最后一行大括号之前,创建一个方法以重置场景
(2) 打包步骤14(5)中游戏结束的代码,使挂载本脚本的物体回到场景的中心点,并停止移动,删除后生成的预制体,把本脚本的物体放入bodies这个数组中
具体操作:剪切上述代码,把它们粘贴到重置场景的这个方法中
(3) 重新编写游戏结束代码:ResetStage();如下图
(4) 回到脚本Start位置
(5) 删除22~24行
(6) 输入打包好的方法:ResetStage();
17、增加得分记录
(1) 新建UI文本(UI——游戏用户可见的界面)
在Hierarchy界面右击空白处,UI-Text-TextMeshPro,加载字体等资源、重命名文本为Score(记录得分)
(2) 将文本拖到Canvas内的合适位置
(3) 设定字号为 50 ,在Text InPut中填写 0,文字颜色为白色;若默认文字不换行,选择Wrapping中的disabled,文字左对齐,上下居中
(4) 创建新脚本,重命名(如:GameUI)
(5) 打开脚本
(6) Create Empty,重命名为UI,关联GameUI脚本,管理游戏中所有的UI
(7) 在Uinty中把得分文本拖放到Inspector面板中Game UI的Score Text右侧可选框中
(8) 声明一个变量score,并使这个变量在游戏运行时显现在用户面板的得分上
(9) 创建分数重置为0的方法(注意:方法的名字第一个字母一定要大写!!)
(10)创建统计得分的方法
18、在Snake脚本中调用打包好的得分记录
(1) 打开Snake.cs,添加调用程序(获取打包程序所在的脚本信息)
(2) 回到GameUI脚本,公开打包程序的信息,方便Snake脚本调用(在void前面加public)
(3) 回到Snake.cs脚本,添加打包程序:
(4)在Unity中给Snake脚本中的GameUI脚本赋值:回到Unity,选中Snake,在GameUI右侧选择UI物体
19、制作游戏的开始界面
(1) 在Canvas上右击,UI-Image,名字自取,如:bgImage
(2) 选择bgImage,在Image面板添加准备好的图片
(3) 改变图像信息——Rect Transform组件
A.Rect Transform组件:设定UI物体(游戏用户看到的界面中的物体)在Canvas中的位置
B.使图片完美覆盖整个场景:点击stretch,弹出如下图对话框,按住Alt键,选择右下角图标
(4) 创建开始界面上的文字:Hierarchy界面右击,UI-Text TextMeshPro,名字自取,如titleText
(5) 安装中文字体,添加需要显示的文字(游戏名称titleText、玩法infoText等)
(6) 创建开始按钮:UI-Button TextMeshPro,适当位置,在Image组件改变颜色
(7) 选择按钮下的文本,输入"开始游戏"
(8) 选中开始界面所有元素,右击,Create Empty Parent,重命名这个空物体如StartMune
(9) 设定按钮,使按钮按下时,StartMenu不显示,效果如图(实现取消勾选startMenu的效果)
(10) 选择Hierarchy上的按钮,找到On Click()面板,按下面的加号
出现下图
(11) 将StartMenu拖放到None(Object)的位置
(12) 打开No Function,选择GameObject-setActive
说明:取消勾选表示按钮按下时,StartMenu不显示
20、添加音效:
(1) 把素材音乐拖入文件夹
(2) Create Empty,名字自取,如:Audio、 Add component(添加组件)-Audio Source
(3) 选中Audio,在AudioClip中选择导入的背景音乐
21、Audio Source组件的一些常用功能:
Play On Awake :勾选时,游戏开始时直接播放
Loop:决定音乐重复播放。勾选时重复
Volume:决定音乐声音大小
22、设置背景音乐在点击开始游戏按钮时才播放
(1) 在Hierarchy面板,选择开始游戏按钮,右侧Inspector面板找到Button,On Click(),添加事件(点击加号)
(2) 将Hierarchy面板中的Audio拖放到None……上,使按钮事件与音乐关联
(3) 打开No Function,选择AudioSource-play()
23、游戏结束时,背景音乐重复播放
(1) Create-C#Script,名字自取,如:GameAudio
(2) 在GameAudio.cs中,引用AudioSource组件:
(3) 给Audio添加刚刚创建的脚本(GameAudio.cs)
(4) 将Inspector面板中的Audio Source拖放到AudioPlayer上
(5) 打开GameAudio.cs,创建一个新的方法,用于其他方法调用
(6) 打开Snake.cs,声明一个变量,以便调用GameAudio.cs脚本中的内容
(7) 找到游戏结束的方法,调用GameAudio中的方法
(8) 打开Unity,给新建的Game Audio赋值:选择Audio
24、角色吃掉苹果的声音特效
(1) 导入音乐素材
(2) 打开GameAudio.cs,声明一个名字自取的变量,如:eatClip
(3) 回到Unity,选中Audio物体,
在Eat Clip中选择音乐素材
25、在播放背景音乐的同时,播放吃苹果的声音
(1) 打开GameAudio.cs,新建一个方法
(2) 写入代码
(3) 打开Snake.cs,找到吃苹果事件
(4) 添加播放声音事件
26、稳定的输入2个音乐的方法:分别创建Audio Source组件,分别写入程序
27、发布游戏
(1) File-Build Settings
(2) 选择需要发布的场景和添加需要发布的场景
(3) 选择发布平台
(4) 点击Player Settings
(5) 打开Resolution and Presentation
(6) 点击Fullscreen,选择Windowed
(7) 默认分辨率,关闭窗口
(8) 在Building Setting窗口点击Switch Platform
(10) 点击Building,新建一个文件夹装载这个游戏