【Unity实现经典游戏--贪吃蛇】

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

作为一个将来想从事游戏行业的人来说,从一些经典游戏来学习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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值