运行效果:

制作过程:

第一步:

新建项目,添加 UI 中的 canvas 对象 , 在 canvas 对象下创建一个空游戏对象 GameObject ,更名为 Grid . 为 Grid 添加 Grid layout Group 组件,设置属性如下:

  • Cell Size:Vector2类型,默认值为(100,100),网格中的每个单元格的大小
  • Spacing:这里的Spacing不同于水平布局、垂直布局,是Vector2类型,既然是网格布局,当然存在水平方向的间隔和垂直方向的间隔。这里我将其设置为 5 .
  • Constraint:枚举类型。其中 Fixed Column Count 约束指定数量的行数

这里我设置约定的行数 Constraint Count 为 3 (因为我这里制作的是 3*3 的拼图)

第二步:

在 Grid 下创建九个空游戏对象 GameObject , 用来存放分割的图片块。为每一个空游戏对象 GameObject 依次添加 Canvas Render , Image , Button 组件。如下图:

做完这些后,在 Game 界面可以看到如下图所示:

第三步:

在项目中建立文件夹,取名为 Resources ,在 Resources 文件夹下新建文件夹,取名为 picture ,拖一张图片到文件夹 picture 下。

  

将图片属性设置如下:

点击 Sprite Editor 键

在弹出界面中点击 Slice .

设置 Type 为 Grid By Cell Count

在 Column $ Row 一栏设置为 3*3 (即将整张图片分割成 3*3 块)

最后点击 Slice 按钮后 ,点击 Apply 完成设置。完成设置后图片上会多一个播放键,如下图所示:

第四步:

新建 C# 文件,更名为 pintu ,代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;public class pintu : MonoBehaviour
{Item[] itemImg;Sprite[] UIShowImage;int length = 0;int sqrt = 0;void Start(){var RSLoadAllImages = Resources.LoadAll("picture");   //从文件夹Texture1中导入图片length = transform.childCount;  //length 为小图片块的个数sqrt = (int)Mathf.Sqrt(length); // sqrt为行列数//childLength-1——其中某一张为空白,即后下角为空白UIShowImage = new Sprite[length];for (int i = 0; i < length; i++){Debug.Log(i);UIShowImage[i] = (Sprite)RSLoadAllImages[i + 1];  //将导入图片分块装入Sprite[] UIShowImage数组}//初始化图片的id,col,rowInitItemImg(length);//打乱图片Shuffle(UIShowImage);InitShow();}//数组打乱T[] Shuffle<T>(T[] Array){for (int i = 0; i < Array.Length; i++){ //对于数组中的每一小块图片都让它与数组中随机一块图片互换位置T temp = Array[i];int randomIndex = UnityEngine.Random.Range(0, Array.Length);Array[i] = Array[randomIndex];Array[randomIndex] = temp;}return Array;}// 初始化图片id,col,rowvoid InitItemImg(int count){itemImg = new Item[length];for (int i = 0; i < count; i++){itemImg[i] = new Item();itemImg[i]._id = i;itemImg[i]._col = i / sqrt;itemImg[i]._row = i % sqrt;}}void InitShow(){//初始化显示图片for (int i = 0; i < UIShowImage.Length; ++i){var t = transform.GetChild(i);t.GetComponent<Image>().sprite = UIShowImage[i];//指定SpriteitemImg[i]._sprite = t.GetComponent<Image>().sprite;//指定ObjitemImg[i]._Obj = t.gameObject;var item = itemImg[i];itemImg[i]._Obj.GetComponent<Button>().onClick.AddListener(delegate () {this.OnClickEvent(item);});}itemImg[length - 1]._Obj.GetComponent<Image>().sprite = null;itemImg[length - 1]._sprite = null;}void OnClickEvent(Item item){if (canMovie(item)){var t = NoneImage();t._sprite = item._sprite;t._Obj.GetComponent<Image>().sprite = item._Obj.GetComponent<Image>().sprite;item._sprite = null;item._Obj.GetComponent<Image>().sprite = null;}if (Success()){Debug.Log("胜利");}}// 判断是否可以移动bool canMovie(Item item){if (item._sprite == null)return false;var t = NoneImage();if ((t._col == item._col - 1 && t._row == item._row) || (t._col == item._col + 1 && t._row == item._row) || (t._col == item._col && t._row == item._row + 1) || (t._col == item._col && t._row == item._row - 1)){return true;}else{return false;}}//m获取空白图片Item NoneImage(){for (int i = 0; i < length; i++){if (itemImg[i]._sprite == null){return itemImg[i];}}return null;}// 判断胜利bool Success(){for (int i = 0; i < length - 1; i++){if (itemImg[i]._Obj.GetComponent<Image>().sprite != null){if (itemImg[i]._Obj.GetComponent<Image>().sprite.name != "Image_01_" + i.ToString())return false;}}return true;}
}public class Item
{public int _col;public int _row;public int _id;public GameObject _Obj;public Sprite _sprite;
}

将代码文件 pintu 添加到 Grid .

项目完成,单击运行即可开始游戏。

PS: 如需参考完整项目,请移步:https://download.csdn.net/download/qq_42185999/11915482  进行下载

unity3D制作拼图游戏相关推荐

  1. C#利用控件拖拽技术制作拼图游戏

    C#利用控件拖拽技术制作拼图游戏 这篇文章主要介绍了C#利用控件拖拽技术制作拼图游戏的方法以及核心代码,需要的朋友可以参考下 主要实现的功能: 1.程序附带多张拼图随机拼图. 2.可手动添加拼图. 3 ...

  2. cs6制作拼图游戏 dreamweaver_教你做简单的拼图游戏[图、实例]

    其实照着教程做起了很简单,就是代码要研究明白了需要废点时间,我把我学的那个教程copy了一遍,大家都来做做看,真得不难! --------------------------------------- ...

  3. cs6制作拼图游戏 dreamweaver_Dreamweaver拼图游戏的实现

    龙源期刊网 http://www.qikan.com.cn Dreamweaver 拼图游戏的实现 作者:罗月红 来源:<读与写 · 教育教学版> 2015 年第 08 期 摘要:随着计算 ...

  4. Unity3D制作3dRPG游戏——主角移动控制实现

    Unity3D制作3dRPG游戏--主角移动控制实现 目录 Unity3D制作3dRPG游戏--主角移动控制实现 实现原理 具体操作 问题解决 总体代码及效果展示 完整代码(镜头控制由之前的文章修改得 ...

  5. Unity3D制作3dRPG游戏——登录系统

    Unity3D制作3dRPG游戏--登录系统 目录 Unity3D制作3dRPG游戏--登录系统 设定辅助摄像机(登录界面背景) UI界面设计 编写代码GameManage思路过程 代码GameMan ...

  6. Unity3D制作3dRPG游戏——镜头控制

    Unity3D制作3dRPG游戏--镜头控制 镜头控制 Unity3D制作3dRPG游戏--镜头控制 直接控制镜头围绕玩家角色旋转 控制镜头跟随鼠标上下左右滑动围绕玩家角色旋转 控制镜头跟随鼠标中键滚 ...

  7. unity 制作拼图游戏

    Unity中material.mainTextureOffset和material.mainTextureScale的作用和用法 mainTextureOffset和mainTextureScale是 ...

  8. 使用Unity3D制作2D游戏的重点做法

    官网上有提供一个2D游戏的教学范例,这个游戏只不过把镜头摆放在横向位置跟随角色移动,游戏内物件运动时固定一个轴不动,使他像横轴式的2D游戏来玩,本质上其实还是个3D游戏,所以如果没有3D建模的话不就没 ...

  9. cs6制作拼图游戏 dreamweaver_DIY硬纸板拼图华容道游戏盘

    家里给小孩子买过大大小小的拼图,同一个图案的拼图玩的多了小孩子的兴趣也就没有了.而且,买来的拼图都有同样的问题:容易散落,容易缺失.怎么样保持小孩子对拼图的兴趣,当然是要不停地让他可以有新的图案可以玩 ...

  10. html5制作拼图游戏教程,用HTML5制作视频拼图的教程

    几天前同事给我看了一个特效,是一个拼图游戏,不同的是,拼图里的是动画.他让我看下做个DEMO,于是就自己整了一会,也确实不难.用canvas很容易做.所以这篇博文不适合高手看....就是随便写来玩玩的 ...

最新文章

  1. 使用Gearman做分布式计算
  2. 使用NFS启动Tiny4412开发板根文件系统
  3. mysql 绕过空格_SQL注入篇-绕过方法
  4. 原根与指标(离散对数)
  5. 2.3 Logistic 回归损失函数-深度学习-Stanford吴恩达教授
  6. Android之INSTALL_FAILED_INSUFFICIENT_STORAG解决办法
  7. hibernate--
  8. 直入灵魂的Python教学:《看动漫学Python》让学习不再枯燥
  9. 记conda 安装geopandas遇到的一个小错误
  10. CentOS node,npm,cnpm 环境部署
  11. [原]Linux 命令行浏览器
  12. LoadRunner11下载以及详细破解说明
  13. 机器学习算法对比分析
  14. linux安装时路径错误,科学网—安装Linux版的hysplit及相关问题集锦-系统Centos - 周勤迁的博文...
  15. mysql stmt
  16. QOS端口限速EMAIL流量限速
  17. 【Python项目】贪吃蛇小游戏
  18. 华为策略路由原理与实验
  19. 伪蒙特卡洛(Quasi-Monte Carlo, QMC)随机
  20. 【Python爬虫】爬取猫眼电影票房

热门文章

  1. c语言程序设计小球弹跳,C++Dos游戏设计——弹跳小球
  2. 游戏CG音效制作技巧
  3. Minimum Class Confusion for Versatile Domain Adaptation
  4. 如何将Nios II硬件和软件合成一个文件(NIOS II)(硬件)(软件)(合并)
  5. unity3d 任务系统设计 mmo
  6. 推荐一款网络测试APP-网络百宝箱
  7. C++ 类(继承中的构造和析构)
  8. 组建团队和调整团队结构
  9. AH快递单打印软件3.82免费版
  10. 【SpringBoot学习】35、SpringBoot 简易文件服务器