15587人加入学习
(100人评价)
通过实例学习:游戏的存档与读档(Unity 2017.2)

制作完成于2018-1-12

价格 免费

gameObject.GetComponent<BoxCollider>().enabled = false;

[展开全文]

前8个课程都是搭建场景的,未写代码

[展开全文]

PlayerPrefs.SetInt("score",100);

Float height=183.5f;

 

[展开全文]

①两个迭代器(IEnumerator)交叉调用,完成一个生命周期。

[展开全文]

Random.Range(x,y)//随机生成x到y之间的数,不包括y,包括x

协程

[展开全文]

//创建save对象(单独写一个save类脚本)并储存当前游戏状态信息
    private SaveManager CreatSave()
    {
        //新建SaveManager对象
        SaveManager save = new SaveManager();
        //遍历九组位置的怪物组
        foreach(GameObject allmonsters in AllMonsters)
        {
            //新建一个遍历出来的九组MonstersScript对象
            MonsterScript monsterScript = allmonsters.GetComponent<MonsterScript>();
            //把九组里(每组都有四种类型的怪物)激活的怪物的位置和种类储存下来
            if (monsterScript.activeMonster != null)
            {
                //储存九组里哪组的位置信息
                save.MonstersPosition.Add(monsterScript.MonsterPos);
                //储存每组当中激活状态的怪物种类
                int type = monsterScript.activeMonster.GetComponent<monstercollision>().monsterType;
                save.MonstersType.Add(type);
            }
        }
        //把UI面板上的分数和子弹数保存下来(因为只有一个UI分数所以可以适用单例模式)
        save.ShootNum = UIScript._instance.shootnum;
        save.Grade = UIScript._instance.grade;
        //返回SaveManager对象
        return save;
    }

[展开全文]

//二进制方法:存档和读档
    private void SaveByBinary()
    {
        //序列化过程(将Save对象转换为字节流)
        //创建Save对象并保存当前游戏状态
        SaveManager save = CreatSave();
        //创建一个二进制格式化程序
        BinaryFormatter bf = new BinaryFormatter();
        //创建一个文件流
        FileStream fileStream = File.Create(Application.dataPath + "/MyPro/Save" + "/ByBinary.txt");
        //用二进制格式化程序的序列化方法来序列化Save对象,参数:创建的文件流和需要序列化的对象
        bf.Serialize(fileStream, save);
        //保存完成之后关闭文件流
        fileStream.Close();

        //保存的时候跳出提示信息
        if (File.Exists(Application.dataPath + "/MyPro/Save" + "/ByBinary.txt"))
        {
            UIScript._instance.ShowMessage("保存成功");
        }
    }

[展开全文]

1 .找到围墙模型 调好一个围墙的位置 生成模型

2.围墙模型复制 成一排4个

//两个围墙中间留空放怪物

用unity模型 Cube(一个正方形)修改成 地板形状

放入4个围墙上面 材质黑色

4个围墙加地板 组成一个物体 这个物体复制 上移生成另一层 共3层  最下层加个地板就行

对围墙 地板 加 (Box ...)碰撞器       用来反弹子弹

 

 

 

[展开全文]

组件:

Animation:播放管理1animation:初始播放状态

                                  2animation: 次级播放

 Box collider:碰撞器

Mash menderer:物体实体

[展开全文]

当点击事件在toggle上时,isOn发生改变就调用该方法,而不是根据isOn的值判断

[展开全文]

游戏物体的激活与组件的激活不同

得到退出键键盘响应

(Input.GetKeyDown(KeyCode.Escape))

得到鼠标左键摁下的响应

(Input.GetMouseButtonDown(0))

//左键是0,右键是1

[展开全文]

private void LoadByJson()
    {
        string filepath=Application.dataPath+ "/MyPro/Save" + "/ByJson.json";
        if (File.Exists(filepath))
        {
            //创建一个StreamReader(跟存档反着来,这个是专门用来读取json格式文件的函数)
            StreamReader sr = new StreamReader(filepath);
            //将读取到的内容流赋值给string变量
            string jsonstr = sr.ReadToEnd();
            //关闭流
            sr.Close();
            //将读取到的json格式内容流字符串转换为SaveManager对象
            //利用jsonMapper将读取到的json格式内容流字符串转换成save对象
            SaveManager save = JsonMapper.ToObject<SaveManager>(jsonstr);

            UIScript._instance.ShowMessage("成功读取文档");
            StartCoroutine("IsMessage");

            //通过读档信息重置游戏状态
            SetGame(save);
        }
        else
        {
            UIScript._instance.ShowMessage("存档文件不存在");
            StartCoroutine("IsMessage");
        }
    }

[展开全文]

private void SaveByXML()
    {
        //创建Save对象并保存当前游戏状态
        SaveManager save = CreatSave();
        //创建一个XML的文件路径
        string filePath = Application.dataPath + "/MyPro/Save" + "/ByXML.txt";
        //创建XML文档
        XmlDocument Xmldoc = new XmlDocument();
        //创建根节点,最上层的节点
        XmlElement root = Xmldoc.CreateElement("SaveXML");
        //设置根节点中的值(键值对的值)
        root.SetAttribute("name", "XML储存信息");

        //继续创建根节点(怪物信息---(包含)怪物的位置,种类)
        XmlElement Monsters;
        XmlElement monstersposition;
        XmlElement monsterstype;

        //遍历save并将里面保存的数据转换成XML格式内容
        for (int i = 0; i < save.MonstersPosition.Count; i++)
        {
            //设置"怪物信息"节点名字
            Monsters = Xmldoc.CreateElement("怪物信息");
            //设置InnerText值,怪物位置和种类节点名字
            monstersposition = Xmldoc.CreateElement("位置");
            monstersposition.InnerText = save.MonstersPosition[i].ToString();
            monsterstype = Xmldoc.CreateElement("种类");
            monsterstype.InnerText = save.MonstersType[i].ToString();
            //设置节点间的层级关系root--Monsters--(monstersposition,monsterstype)
            Monsters.AppendChild(monstersposition);
            Monsters.AppendChild(monsterstype);
            root.AppendChild(Monsters);
        }

        //设置射击数和分数节点,并且设置层级关系
        XmlElement shootNum = Xmldoc.CreateElement("射击数");
        shootNum.InnerText = save.ShootNum.ToString();
        root.AppendChild(shootNum);
        XmlElement grade = Xmldoc.CreateElement("分数");
        grade.InnerText = save.Grade.ToString();
        root.AppendChild(grade);
        //里面子信息都设置好之后,将总root加到xmldoc文档里,并且保存
        Xmldoc.AppendChild(root);
        Xmldoc.Save(filePath);

        if (File.Exists(filePath))
        {
            UIScript._instance.ShowMessage("保存成功");
            StartCoroutine("IsMessage");
        }

    }

[展开全文]

private void LoadByXML()
    {
        //创建一个XML的文件路径
        string filePath = Application.dataPath + "/MyPro/Save" + "/ByXML.txt";
        if (File.Exists(filePath))
        {
            //创建save对象
            SaveManager save = new SaveManager();
            //创建XML文档出来读取filepath路径文件
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(filePath);

            //通过节点名字来获取元素,结果为xmlnodelist类型
            XmlNodeList Monsters = xmldoc.GetElementsByTagName("怪物信息");
            //遍历所有的Monsters里的节点,并获得子节点和子节点的InnerText
            if (Monsters.Count != 0)
            {
                foreach(XmlNode Monster in Monsters)
                {
                    //遍历"怪物信息"里的位置和种类,并把得到的值保存到save里
                    XmlNode monsterposition = Monster.ChildNodes[0];
                    int monsterpositionIndex = int.Parse(monsterposition.InnerText);
                    save.MonstersPosition.Add(monsterpositionIndex);
                    //这里的ChildNodes[1]指的是在Monster里第2个节点
                    XmlNode monstertype = Monster.ChildNodes[1];
                    int monstertypeIndex = int.Parse(monstertype.InnerText);
                    save.MonstersType.Add(monstertypeIndex);
                }
            }

            //得到存储的射击数和分数
            XmlNodeList shootNum = xmldoc.GetElementsByTagName("位置");
            int shootNumIndex = int.Parse(shootNum[0].InnerText);
            save.ShootNum = shootNumIndex;

            XmlNodeList grade = xmldoc.GetElementsByTagName("分数");
            int gradeIndex = int.Parse(grade[0].InnerText);
            save.Grade = gradeIndex;

            UIScript._instance.ShowMessage("成功读取文档");
            StartCoroutine("IsMessage");

            //通过读档信息重置游戏状态
            SetGame(save);
        }
        else
        {
            UIScript._instance.ShowMessage("存档文件不存在");
            StartCoroutine("IsMessage");
        }
    }

[展开全文]

    /// <summary>
    /// 生成怪物
    /// </summary>
    /// <returns></returns>
    IEnumerator AliveTimer()
    {
        while (true) {
            yield return new WaitForSeconds(Random.Range(1, 2));
            Debug.Log("生成");
            ActiceMoster();

            while (true) {
                Debug.Log("检测");
                if (activeMoster == null) {
                    break;
                }
                aliveTime -= Time.deltaTime;
                if (aliveTime < 0) {
                    Debug.Log("死亡");
                    DeActiceMoster();
                }
                yield return null;
            }

        }
    }

[展开全文]

 Json 保存游戏

Save save = CreateSaveGo();

string filePath = Application.dataPath + "StreamingFile" + "/byJson.json";

//利用JsonMapper将save对象转换为Json格式的字符串

string saveJsonStr = JsonMapper.ToJson(save);

//将这个字符串写入到文件中

//创建一个StreamWriter,并将字符串写入文件中

StreamWriter sw = new StreamWriter(filePath);

sw.Write(saveJsonStr);

//关闭StreamWriter

sw.Close();

[展开全文]

 金口难开没看看没开门,吗,吗,吗,吗,吗,m

[展开全文]

授课教师

SIKI学院老师

课程特色

图文(1)
下载资料(1)
视频(34)