【游戏开发实战】使用Unity制作水果消消乐游戏教程(一):生成冰块阵列

一、前言

嗨,大家好,我是新发。下班坐地铁的时候,好几次看到其他人在玩消消乐,既然大家都这么喜欢玩,那我就写个Unity制作水果消消乐的教程吧。

我会根据内容点分成好几篇文章来讲,希望对想学Unity的同学有所帮助,创作不易,喜欢的同学欢迎关注、点赞、收藏,文章目录如下:
第一篇:生成冰块阵列
第二篇:随机生成水果
第三篇:水果拖动与交换逻辑
第四篇:使用DOTween插件实现水果的滑动效果
第五篇:水果的消除检测,实现消除效果
第六篇:水果下落与新水果生成
第七篇:水果消除特效
第八篇:游戏得分加分效果
第九篇:使用UGUI显示游戏UI

游戏运行效果如下:
在这里插入图片描述
最终的Demo工程已上传到GitHub,感兴趣的同学可以自行下载下来学习。
GitHub地址:https://github.com/linxinfa/UnityXiaoXiaoLeDemo
注:我使用的Unity版本为2020.1.14f1c1
在这里插入图片描述


本篇讲冰块阵列的生成,本篇的效果:
在这里插入图片描述

二、创建工程

我们要做的是一个2D的水果消消乐游戏,所以直接创建一个2DUnity工程,工程名称叫UnityXiaoXiaoLeDemo
在这里插入图片描述
创建成功。
在这里插入图片描述

三、导入冰块图片素材

新建一个RawAssets文件夹。
在这里插入图片描述
再新建Textures子目录,用于存放图片素材。
在这里插入图片描述
把冰块和水果图片素材导入到工程中。
在这里插入图片描述
如下:
在这里插入图片描述

注意图片类型设置为Sprite (2D and UI)
在这里插入图片描述

四、创建冰块阵列

在场景中创建一个空物体(Create Empty),重名名为Play,坐标归零。
在这里插入图片描述
同理创建一个空子节点IceSpawner
在这里插入图片描述
把冰块图片拖入到IceSpawner子节点中,此时会自动创建一个Sprite Renderer来显示图片。
在这里插入图片描述
可以看到场景中显示了冰块了。
在这里插入图片描述
我们现在要创建一个9行7列的冰块阵列,先定义一些全局变量,因为要写脚本了,所以先创建一个Scripts文件夹。
在这里插入图片描述
创建一个GlobalDef.cs用于定义全局变量。
在这里插入图片描述

// GlobalDef.cs
// 定义一些全局变量
public class GlobalDef 
{
    /// <summary>
    /// 行数
    /// </summary>
    public const int ROW_COUNT = 9;
    /// <summary>
    /// 列数
    /// </summary>
    public const int COLUM_COUNT = 7;  
    /// <summary>
    /// 每个格子大小
    /// </summary>
    public const float CELL_SIZE = 0.9f;
}

再创建一个脚本:IceSpawner.cs,用于动态生成冰块阵列。
在这里插入图片描述

// IceSpawner.cs

using UnityEngine;

/// <summary>
/// 冰块生成器
/// </summary>
public class IceSpawner : MonoBehaviour
{
    public GameObject iceObj;

    void Start()
    {
        // 生成冰块整列
        for (int rowIndex = 0; rowIndex < GlobalDef.ROW_COUNT; ++rowIndex)
        {
            for (int columIndex = 0; columIndex < GlobalDef.COLUM_COUNT; ++columIndex)
            {
                // 实例化冰块物体
                var obj = Instantiate(iceObj);
                obj.transform.SetParent(iceObj.transform.parent, false);
                obj.transform.localPosition = new Vector3((columIndex - GlobalDef.COLUM_COUNT / 2f) * GlobalDef.CELL_SIZE + GlobalDef.CELL_SIZE / 2f, (rowIndex - GlobalDef.ROW_COUNT / 2f) * GlobalDef.CELL_SIZE + GlobalDef.CELL_SIZE / 2f, 0);
            }
        }
        iceObj.SetActive(false);
    }
}

IceSpawner脚本挂到场景中的IceSpawner节点上,并赋值Ice Obj物体。
在这里插入图片描述
运行Unity,效果如下:
在这里插入图片描述
我们调节一下IceSpawner节点的Scale缩放为0.8,可以看到冰块阵列可以完整在屏幕中显示了。
在这里插入图片描述

五、分辨率适配

上面我们看到冰块阵列创建出来后,我们在720*1280分辨率下可以完整显示冰块阵列了,但是在其他分辨率中,则依然可能会出现显示不全的情况,比如在1080*2280分辨率下的显示:
在这里插入图片描述
我们要确保在不同分辨率下都能让冰块阵列完整地显示在屏幕中。
创建一个Resolution.cs脚本,用来做分辨率适配。
在这里插入图片描述

// Resolution.cs

using UnityEngine;

/// <summary>
/// 分辨率适配
/// </summary>
public class Resolution : MonoBehaviour
{

    public float BASE_WIDTH = 720f;
    public float BASE_HEIGHT = 1280f;

    private Transform m_tranform;
    private float baseRatio;
    private float percentScale;

    void Start()
    {
        m_tranform = transform;
        SetScale();
    }

    void SetScale()
    {
        // 根据宽高比进行缩放
        baseRatio = BASE_WIDTH / BASE_HEIGHT * Screen.height;
        percentScale = Screen.width / baseRatio;
        if (percentScale < 1)
            m_tranform.localScale = new Vector3(m_tranform.localScale.x * percentScale, m_tranform.localScale.y * percentScale, 1);
    }
}

Resolution脚本挂到Play节点上。
在这里插入图片描述
再次运行,可以看到,在不同分辨率下都可以正常显示了。
在这里插入图片描述 在这里插入图片描述

六、添加背景图

我们加上游戏背景图,导入背景图素材。
在这里插入图片描述
显示到场景中。
在这里插入图片描述
运行效果如下:
在这里插入图片描述

下一篇讲水果的随机生成。
[点击进入下一篇]

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值