作为一个将来想从事游戏行业的人来说,从一些经典游戏来学习Unity是最好不过的了,在这里我就介绍一下这次做的贪吃蛇。
贪吃蛇制作教学
详细的可以从上面链接进去学习,素材也从上方链接中取得。如果只是想了解整体框架和一些技术问题可以继续往下看。
我这篇博客更像是学习笔记,所以各位读者在一些细节的,不懂的地方,可以在评论区留言给我,我会尽我所能帮大家解决。
首先是场景的搭建:
我们需要两个场景,一个是开始界面场景,一个是游戏场景。
开始界面

开始界面内容清单:
包含模式选择和皮肤选择(详细的处理在后文)

游戏场景:

游戏场景内容清单:

这里的Up,Down,Right和Left是四条边界
两个场景的ScriptsHolder是脚本控制器,分别用于控制不同的场景。
那么游戏场景就搭建好了,接下来是组件的一些注意事项:
1.开始界面的Skin和Model选择,需要让它们的子项属于同一个ToggleGroup中,这样就可以保证只有一个被选中。
2.记得给能碰撞到的物体都添加碰撞检测(BoxCollider)组件,而蛇头需要添加Ridbody2D和BoxCollider组件。
3.在File->Building Setting中添加这两个场景

4.预制体!

这四个预制体没什么好说的,一个是食物,一个是奖励物,一个是蛇头,一个是蛇身,需要注意的是都要添加碰撞检测组件。
接下来是最关键的脚本环节(所有脚本我都添加好注释了,直接挂载然后拖动元素赋值即可)
在开始场景的Scripts挂载StartUIController脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class StartUIController : MonoBehaviour
{
public Text lastText;
public Text bestText;
public Toggle white;
public Toggle colors;
public Toggle border;
public Toggle noBorder;
void Awake() {
lastText.text = "上次:长度" + PlayerPrefs.GetInt("lastl",0) + "分数" + PlayerPrefs.GetInt("lasts",0);
bestText.text = "最好:长度" + PlayerPrefs.GetInt("bestl",0) + "分数" + PlayerPrefs.GetInt("bests",0);
}
void Start()
{
if(PlayerPrefs.GetString("sh","sh01")=="sh01")//这个是让数据随场景跳转传递的代码
{
white.isOn=true;
PlayerPrefs.SetString("sh","sh01");
PlayerPrefs.SetString("sb01","sb0101");
PlayerPrefs.SetString("sb02","sb0102");
}
else
{
colors.isOn=true;
PlayerPrefs.SetString("sh","sh02");
PlayerPrefs.SetString("sb01","sb0201");
PlayerPrefs.SetString("sb02","sb0202");
}
if(PlayerPrefs.GetInt("border",1)==1)
{
Debug.Log("边界模式启动");
border.isOn = true;
PlayerPrefs.SetInt("border",1);
}
else
{
Debug.Log("无边界模式启动");
noBorder.isOn = true;
PlayerPrefs.SetInt("border",0);
}
}
//以下代码为模式和皮肤选择
public void WhiteSelected(bool isOn)
{
if(isOn)
{
PlayerPrefs.SetString("sh","sh01");//存储皮肤文件的文件名,我这里都用SnakeHead
PlayerPrefs.SetString("sb01","sb0101");
PlayerPrefs.SetString("sb02","sb0102");
}
}
public void ColorsSelected(bool isOn)
{
if(isOn)
{
PlayerPrefs.SetString("sh","sh02");
PlayerPrefs.SetString("sh01","sb0201");
PlayerPrefs.SetString("sh02","sb0202");
}
}
public void BorderSelected(bool isOn)
{
if(isOn)
{
PlayerPrefs.SetInt("border",1);
}
}
public void NoBorderSelected(bool isOn)
{
if(isOn)
{
PlayerPrefs.SetInt("border",0);
}
}
public void StartGame()//开始游戏按钮
{
UnityEngine.SceneManagement.SceneManager.LoadScene(

本文详细介绍了使用Unity制作贪吃蛇游戏的过程,包括场景搭建、组件配置、脚本编写等关键步骤。从开始界面的皮肤和模式选择到游戏场景的边界设定,再到游戏逻辑的实现,如蛇的移动、食物生成和碰撞检测。同时,文章提到了一些技术细节,如使用PlayerPrefs进行数据存储、利用协同程序实现延迟加载、单例模式在脚本间通信的应用。此外,还分享了作者在实践中印象深刻的几点,如场景数据跳转、加速功能实现和边界处理方式。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



