Unity-3d 用JSON 文本控制程序
2016-05-23 14:06
597 查看
本次的作业是,修改飞碟程序。它使用以下 JSON 文本控制程序(你可以自由添加内容)
1、远程控制目录(有四个Json文件)
game_info.json - {“version”:1.2 ,”totolRound”:3, …}
disk_level_1.json - {“title”:”Round 1”, “turn”:10, “diskEachTurn”:1, “speedMax”:10, “speedMin”:8, “color”=”gray,red”, … }
2、修改飞碟程序,并发布
由于我是二年级生,所以很多大的思路都来源于大三师兄的博客。
尤其是胡江川师兄。他的博客写的十分的完整、易懂。所以这门课在他的博客上面我真的是受益匪浅。
传送门:Simba的博客
好了我们来看下这一次的作业。要求用json文件来存储游戏的信息。这是一个在实际游戏中常见,也是十分重要的功能。这一次我们用json简单地模拟一下其读写。
首先我们创建一个FileManager.cs的脚本
可以通过如下的方法拿到我们的数据:
拿到数据后返回给SceneController,里面创建相关的函数对拿到的数据进行赋值。
而在SenceController处赋值方法如下:
同样的方法适用于disk_level_1.json
这样子我们就完成了FileManager.cs文件。将其挂载主摄像机上。
强制unity去序列化一个私有域
这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,这个时候可以使用[SerializeField]这个Attribute:
在Unity最新的UI系统中,UI属性上方全部添加[SerializeField] ,如下所示
SerializeField参考文档:
http://game.ceeger.com/Script/Attributes/SerializeField.html
因此,我们在SceneController中gameinfo和disklevel进行序列化
我们将这些数据都写在我们的控制器中,并将其置为Public变量。
然后在UI中对Text进行赋值
小小的游戏展示:可以看到显示了json文件存储的内容,
1、远程控制目录(有四个Json文件)
game_info.json - {“version”:1.2 ,”totolRound”:3, …}
disk_level_1.json - {“title”:”Round 1”, “turn”:10, “diskEachTurn”:1, “speedMax”:10, “speedMin”:8, “color”=”gray,red”, … }
2、修改飞碟程序,并发布
由于我是二年级生,所以很多大的思路都来源于大三师兄的博客。
尤其是胡江川师兄。他的博客写的十分的完整、易懂。所以这门课在他的博客上面我真的是受益匪浅。
传送门:Simba的博客
好了我们来看下这一次的作业。要求用json文件来存储游戏的信息。这是一个在实际游戏中常见,也是十分重要的功能。这一次我们用json简单地模拟一下其读写。
一 、先根据要求创建json文件
其中保存了每一关的信息。包括飞碟的颜色,发射的位置,发射的方向,发射的速度,第几回合等等。根据这些信息在初始化的时候我们就可以直接读取json文件,提取相应信息,赋值即可。二、将json文件的内容提取出来。
创建完json文件之后我们要考虑的问题就是如何将json文件变成data.根据课上的内容以及一些文档的提示。首先我们创建一个FileManager.cs的脚本
可以通过如下的方法拿到我们的数据:
// 输入关卡文件名,启动协程读取文件 public void loadLevelJson(string name) { url = "file://" + Application.dataPath + "/Data/" + name; Debug.Log(url); StartCoroutine(LoadLevel()); } IEnumerator LoadLevel() { if (url.Length > 0) { WWW www = new WWW(url); yield return www; if (!string.IsNullOrEmpty(www.error)) Debug.Log(www.error); else scene.stageLevel(www.text.ToString()); // 返回json字符串给scene } }
拿到数据后返回给SceneController,里面创建相关的函数对拿到的数据进行赋值。
而在SenceController处赋值方法如下:
public void stageLevel(string json) { //获取相关json数据 LevelData data = LevelData.CreateFromJSON(json); int emitNum = data.emitNum; float speed = data.speed; _judge.disksEachRound = emitNum; _judge.round = data.round; //配置发射环境 Vector3 emitPos = new Vector3(data.emitPosX, data.emitPosY, data.emitPosZ); Vector3 emitDir = new Vector3(data.emitDirX, data.emitDirY, data.emitDirZ); _gameModel.setting(1, color, emitPos, emitDir.normalized, speed, emitNum); }
同样的方法适用于disk_level_1.json
这样子我们就完成了FileManager.cs文件。将其挂载主摄像机上。
三、利用SerializeField对私有域进行序列化
[SerializeField] Attribute强制unity去序列化一个私有域
这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,这个时候可以使用[SerializeField]这个Attribute:
在Unity最新的UI系统中,UI属性上方全部添加[SerializeField] ,如下所示
[SerializeField] private Button btn1;
SerializeField参考文档:
http://game.ceeger.com/Script/Attributes/SerializeField.html
因此,我们在SceneController中gameinfo和disklevel进行序列化
[SerializeField] public class GameInfo { public string version; public int totalRound; public static GameInfo CreateFromJSON(string json) { return JsonUtility.FromJson<GameInfo>(json); } } [SerializeField] public class LevelData { public string color; public int emitNum; public float emitPosX, emitPosY, emitPosZ; public float emitDirX, emitDirY, emitDirZ; public float speed; public int round; public static LevelData CreateFromJSON(string json) { return JsonUtility.FromJson<LevelData>(json); } }
四、UI界面做相关的显示
拿到game_info的数据后肯定要显示在主界面上。我们将这些数据都写在我们的控制器中,并将其置为Public变量。
public string _version; public int _totalRound; public Color color;
然后在UI中对Text进行赋值
string gameinfo = "version : " + SceneController.getInstance()._version; gameInfoText.text = gameinfo; roundText.text = "Round: " + queryInt.getRound().ToString() + "/" + SceneController.getInstance()._totalRound; scoreText.text = "Score: " + queryInt.getPoint().ToString();
小小的游戏展示:可以看到显示了json文件存储的内容,
相关文章推荐
- Unity 对象池简单使用
- Unity中WheelCollider的Slip曲线
- Unity3D控制物体移动
- unity中声音的优化问题
- unity 中TXT文件的获取与读取
- unity4.6之UGUI之与代码结合及Text讲解
- Unity3D 点击模型某部分出其属性信息框
- Unity3D Layer要点
- Unity学习日常问题记录三 -- Slider的使用
- Easy Code Scanner + Vuforia + unity5.3.4f1 + android + ios
- Unity实现json格式的序列化并发布
- ROLL A BALL (Unity 3D 入门) 游戏制作指导 - 移动游戏对象
- Unity3D在android系统下调试
- Unity3D 之UGUI 切换开关(toggle)
- Unity3D 游戏序列化及发布
- Unity3D 之UGUI 滑动条(Slider)
- Unity 简单读取txt文档内容的方法
- ubuntu16.04的启动栏(Unity)方向更改
- Unity3D 之UGUI 面板
- unity资源包的依赖关系(2)