文章目录

  • 一、前言
  • 二、导入水果图片素材
  • 三、制作水果预设
  • 四、水果生成器
  • 五、挂FruitSpawner脚本
  • 六、运行测试

一、前言

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

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

游戏运行效果如下:

最终的Demo工程已上传到GitHub,感兴趣的同学可以自行下载下来学习。
GitHub地址:https://github.com/linxinfa/UnityXiaoXiaoLeDemo
注:我使用的Unity版本为2020.1.14f1c1


本篇讲随机生成水果的实现,本篇的效果:

二、导入水果图片素材

导入水果图片素材到工程中。

如下:

注意图片格式设置为Sprite (2D and UI)

三、制作水果预设

创建一个GameRes文件夹用来存放预设。

在场景中创建一个FruitSpawner空节点。

把水果的图片拖到FruitSpawner子节点中,再拖到GameRes文件夹中,这样就制作好一个水果预设了。

同理,制作其他水果预设。

四、水果生成器

现在,我们要使用代码来随机生成水果。
我们先分析一下,每一个水果有什么字段属性?有水果类型、图片、索引…
现在创建一个FruitItem.cs脚本。

代码如下:

// FruitItem.csusing UnityEngine;/// <summary>
/// 水果脚本
/// </summary>
public class FruitItem : MonoBehaviour
{/// <summary>/// 行号/// </summary>public int rowIndex;/// <summary>/// 列号/// </summary>public int columIndex;/// <summary>/// 水果类型/// </summary>public int fruitType;/// <summary>/// 水果图片/// </summary>public GameObject fruitSpriteObj;
}

我们需要什么行为呢?
1 创建水果图片;
2 根据行号列号设置坐标。
添加对应的函数。

// FruitItem.csprivate Transform m_selfTransform;private void Awake()
{m_selfTransform = transform;
}/// <summary>
/// 创建水果图片
/// </summary>
/// <param name="fruitType">水果类型</param>
/// <param name="prefab">水果图片预设</param>
public void CreateFruitBg(int fruitType, GameObject prefab)
{if (null != fruitSpriteObj) return;this.fruitType = fruitType;fruitSpriteObj = Instantiate(prefab);fruitSpriteObj.transform.localScale = Vector3.one * GlobalDef.CELL_SIZE;fruitSpriteObj.transform.SetParent(m_selfTransform, false);
}/// <summary>
/// 设置坐标
/// </summary>
public void UpdatePosition(int rowIndex, int columIndex)
{this.rowIndex = rowIndex;this.columIndex = columIndex;var targetPos = 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);m_selfTransform.localPosition = targetPos;
}

现在,我们再创建一个生成器脚本:FruitSpawner.cs,用来随机生成多行多列的水果。

代码如下:

// FruitSpawner.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FruitSpawner : MonoBehaviour
{/// <summary>/// 水果预设/// </summary>public GameObject[] fruitPrefabs;/// <summary>/// 生成出来的水果二维数组/// </summary>public ArrayList fruitList;/// <summary>/// 水果的根节点/// </summary>private Transform m_fruitRoot;private void Awake(){m_fruitRoot = transform;}private void Start(){SpawnFruitArrayList();}/// <summary>/// 生成多行多列水果/// </summary>private void SpawnFruitArrayList(){fruitList = new ArrayList();for (int rowIndex = 0; rowIndex < GlobalDef.ROW_COUNT; ++rowIndex){ArrayList temp = new ArrayList();for (int columIndex = 0; columIndex < GlobalDef.COLUM_COUNT; ++columIndex){var item = AddRandomFruitItem(rowIndex, columIndex);temp.Add(item);}// 存到数组中fruitList.Add(temp);}}/// <summary>/// 随机一个水果/// </summary>private FruitItem AddRandomFruitItem(int rowIndex, int columIndex){// 随机一个水果类型var fruitType = Random.Range(0, fruitPrefabs.Length);var item = new GameObject("item");item.transform.SetParent(m_fruitRoot, false);item.AddComponent<BoxCollider2D>().size = Vector2.one * GlobalDef.CELL_SIZE;var bhv = item.AddComponent<FruitItem>();bhv.UpdatePosition(rowIndex, columIndex);bhv.CreateFruitBg(fruitType, fruitPrefabs[fruitType]);return bhv;}
}

五、挂FruitSpawner脚本

FruitSpawner脚本挂到FruitSpawner节点上。

把之前做的所有水果预设赋值给脚本的Fruit Prefabs数组。

六、运行测试

运行Unity,测试效果如下:

我们显示有点异常,调整一下FruitSpawnerz轴,确保它在冰块的前面。

再调整FruitSpawnerIceSpawner为相同的缩放值。

再次运行Unity,效果正常了。

场景中的层级如下:

下一篇讲水果的拖动交换逻辑的实现。
[点击进入下一篇]

【游戏开发实战】使用Unity制作水果消消乐游戏教程(二):随机生成水果相关推荐

  1. 【游戏开发实战】Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)

    文章目录 一.前言 二.思考问题与解决方案 1.思考问题 2.解决方案 2.1.Unity中如何开启摄像头并对图像进行采样 2.2.图像如何中转给其他客户端 2.3.如何实现清晰度切换 2.4.客户端 ...

  2. 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...

  3. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  4. 【游戏开发实战】Unity快速搭建体素风格关卡地图(Tile3D | 我的世界 | Voxel | 场景 | 编辑器)

    文章目录 一.前言 二.本文最终效果 三.MAST工具基本操作 1.工具下载:Modular Asset Staging Tool(MAST) 2.导入工具:Import 3.创建场景:Scene 4 ...

  5. 【游戏开发实战】Unity 2D游戏物理运动曲线轨迹预测,以愤怒的小鸟为例,轨迹曲线云团圈圈

    文章目录 一.前言 二.思考分析 三.场景搭建 1.导入图片素材 2.鸟预设 3.地面环境 4.曲线的点预设 5.预览效果 四.代码 1.鸟脚本:Bird.cs 2.曲线预测器:Trajectory. ...

  6. 【游戏开发实战】Unity使用ShaderGraph配合粒子系统,制作子弹拖尾特效(Fate/stay night金闪闪的大招效果)

    文章目录 一.前言 二.实现原理 三.ShaderGraph 四.图片素材 五.结束 一.前言 点关注不迷路,持续输出Unity干货文章. 嗨,大家好,我是新发,之前写了一篇文章:<Shader ...

  7. 【游戏开发实战】Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)

    文章目录 一.前言 二.ShaderGraph入门 三.ShaderGraph制作2D Loading水球 1.创建Unlit Shader Graph 2.创建一个圆 3.从下到上填充的效果 4.填 ...

  8. 【游戏开发实战】Unity UGUI制作雷达图/天赋图/属性图/能力图,因为太怕痛就全点了防御力

    文章目录 一.前言 二.最终效果 三.原理 四.具体实现 1.雷达图背景图 2.封装UIPolygon.cs 3.制作预设 4.测试脚本RadarTest.cs 五.运行测试 六.结束语 七.附录:U ...

  9. 【游戏开发实战】Unity老工程师开始搞Laya了,不想看官方文档,那就看我的教程吧(Laya2.12.0版本 | 案例 | 入门 | 教程)

    文章目录 一.前言 二.我做的Laya案例集合工程 三.LayaAir IDE下载 四.Hello World工程 1.新建空项目 2.新建场景:HelloWorld.scene 3.创建一个Labe ...

  10. 【游戏开发实战】Unity粒子在UI界面中的裁切、蒙版、层级问题的解决(ScrollView裁切、Mask蒙版、UI粒子层级关系)

    文章目录 一.前言 二.最终效果 三.使用方法 1.引入插件dll 2.制作粒子特效 3.粒子材质球使用UIAdditive.shader 4.将粒子摆放在UI节点下 5.挂UIParticle组件 ...

最新文章

  1. 机器学习(13)岭回归(线性回归的改进)
  2. 【树莓派】为Ubuntu for ARM 更换中国软件源
  3. zz bond配置网络: 两个网卡一个ip
  4. CentOS 6 安装Hadoop 2.6 (二)配置Hadoop
  5. 重写toString()方法(Java篇)
  6. HP Z840 工作站配sSAS Raid 安装 Ubuntu 16.04 系统
  7. php变量的判空和类型判断
  8. docker 安装 mysql和Navicat Premium 远程连接
  9. 北大cls_战报 | 第七届CLS“联合杯”篮球联赛
  10. Nginx教程负载均衡机制
  11. Python爬虫实战源码合集(持续更新)
  12. linux面试题线程与进程,​一道面试题:说说进程和线程的区别
  13. CentOS 7 安装PHP7+Nginx+Mysql5.7开发环境
  14. python使用matplotlib可视化柱状图(bar plot)、自定义柱状图的填充色、柱状图柱体的边缘色、配置字体使用中文轴标签
  15. 网站建设项目管理——8个步骤教你管理网站建设项目
  16. 键入一个字母,如果小写字母输出大写,大写字母输出小写字母
  17. linux免密码互信,Linux建立SSH免密码互信方法
  18. 阿里、京东、拼多多都来了,互联网+疫苗是一门好生意吗?
  19. ldap服务器配置信息错误,ldap服务器概念配置看这一文就够了!
  20. 【技法操作】UI界面设计,用PS绘制闹钟页面教程

热门文章

  1. 计算机视觉 | 哥大读博五年总结(一)
  2. 纳多德视点 | 一文读懂PON无源光网络
  3. python爬虫框架——scrapy(1)scrapy爬虫框架介绍
  4. 以太网帧格式 以及 认识MAC地址(局域网的通信原理)
  5. 如果焊接也需要打怪升级,你在哪一级?
  6. 《疯狂java讲义》学习(25):正则表达式
  7. 网页调用php网页,在HTML网页中利用js调用php的内容_PHP教程
  8. kubernete连接报java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.readTimeout(Ljava/time/Duratio
  9. PADS LogicPADS Layout软件常用的快捷键
  10. java程序员的大数据之路(12):Hadoop的守护进程