Unity连连看插件制作

十一:连连看插件实践 11.1 基础知识
【Unity连连看插件制作】需要的技术前提
掌握Unity最老的GUI技术,也就是将代码写在OnGUI里面 。使用,进行布局使用进行编辑器资源加载窗口创建,将练练看的元素按照1---n进行命名(自己的规则,自己匹配即可)

Unity连连看插件制作

文章插图
设计界面如下所示:上面是棋盘,下面是当前选中的按钮 。点击确定的时候,将二维数组存储到一个txt文件之内即可 。
最终效果如图:存储二维数组到目录下的目录下的文本文件,方便后期动态加载关卡 。
Unity连连看插件制作

文章插图
具体代码如下:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using System.Text;using System.IO;public class WindowExample2 : EditorWindow{#region 窗口需要使用的变量public GUISkin skin;//皮肤public int currentIndex;//当前点击的下标public int[,] map = new int[5, 5];//二维数组#endregionprivate static WindowExample2 window;//窗体实例//显示窗体[MenuItem("MyWindow/Second Window")]private static void ShowWindow(){window = GetWindow("Window Example");window.Show();window.maxSize = new Vector2(400,500);}private void OnEnable(){//加载GUISkinskin = AssetDatabase.LoadAssetAtPath("Assets/skin.guiskin");}//绘制窗体内容private void OnGUI(){/*EditorGUILayout.BeginVertical("box");EditorGUILayout.LabelField("Your Second Window", EditorStyles.boldLabel);GUILayout.Label(new GUIContent("MyLaabel"));GUILayout.Space(20);GUILayout.TextField("对象名称");name = EditorGUILayout.TextField("StringValue", name);if (GUILayout.Button(new GUIContent("确定"), GUILayout.ExpandWidth(true))){Debug.Log("Clcik");}EditorGUILayout.EndVertical();*/GUI.skin = skin;for (int i = 0; i < 4; i++){if (GUI.Button(new Rect(i * 50, 300, 50, 50), "",skin.GetStyle((i + 1).ToString()))){ChangeIndex(i + 1);}}for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){//0是style里面的默认图片if (GUI.Button(new Rect(j * 50, i * 50, 50, 50), "", skin.GetStyle("0"))){MapClick(i * 5 + j);}}}for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){GUI.Button(new Rect(j * 50, i * 50, 50, 50), "",map[i, j].ToString());}}if (GUI.Button(new Rect(0, 350, 200, 30), "确定")){Debug.Log("自己保存在指定的路径");SaveToFile();}}private void SaveToFile() {//如何将一个二维数组写入到文件里面StringBuilder buider = new StringBuilder();for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){buider.Append(map[i, j]).Append(",");}//删除每一行的逗号buider.Remove(buider.Length - 1, 1);//追加换行buider.Append("\n");}//删除最后一个换行buider.Remove(buider.Length - 1, 1);string dir = "Assets/Resources/LevelInfo";if (!Directory.Exists(dir)){Directory.CreateDirectory(dir);}FileStream stream = File.Create(dir + "/01.txt");//将字符串写入到文件之中byte[] content = System.Text.Encoding.UTF8.GetBytes(buider.ToString());stream.Write(content, 0, content.Length);stream.Close();AssetDatabase.SaveAssets(); //保存AssetDatabase.Refresh();//刷新}//修改当前物体下标private void ChangeIndex(int tag){currentIndex = tag;}//点击修改对应的二维数组元素private void MapClick(int tag){map[tag / 5, tag % 5] = currentIndex;}}
(8)这里只是演示了一个基本的界面,比较丑陋,大家自己进行扩展即可 。点击菜单栏的--即可查看自定义的工具窗口