游戏开发日志17(保存技能树信息)

这篇具有很好参考价值的文章主要介绍了游戏开发日志17(保存技能树信息)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最开始的想法是这样的:在GameManage中写一个public List<SkillData> skills=new List<SkillData>();与unity中的SkillData资源文件联系起来,在Save类中创建

 public List<bool> IsUnlocked=new List<bool>();

 public List<int> skillLevel=new List<int>();

来记录技能的解锁状态以及技能等级。

通过二进制来存储/加载Save类,

以及通过Playerprefs来记录技能点数,实现如下:

首先记录技能点数:

 public void SaveByPlayerprefs()
    {
        PlayerPrefs.SetInt("projectile",projectile.itemHeld);

        PlayerPrefs.SetFloat("PlayerPosX",rubby.transform.position.x);
        PlayerPrefs.SetFloat("PlayerPosY",rubby.transform.position.y);
        //save ruby's hp infomation
        PlayerPrefs.SetFloat("hp",rubby.CurrentHealth);
        //save SkillTree
        //save Points
        PlayerPrefs.SetInt("Points",SkillManage.instance.skillPoint);
    }
 public void LoadByPlayerprefs()
    {
        projectile.itemHeld=PlayerPrefs.GetInt("projectile");
        InventoryManage.RefreshItem();

        position.x=PlayerPrefs.GetFloat("PlayerPosX");
        position.y=PlayerPrefs.GetFloat("PlayerPosY");
        rubby.transform.position=new Vector2(position.x,position.y);
        rubby.CurrentHealth=PlayerPrefs.GetFloat("hp");
        UIHealth.instance.SetValue( rubby.CurrentHealth/ rubby.MaxHealth);
        //Read Points
        SkillManage.instance.skillPoint=PlayerPrefs.GetInt("Points");
        SkillManage.instance.updatePointUI();
    }

记录技能信息:

using System.Net.Mime;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManage : MonoBehaviour
{
    public static GameManage instance;
    public bool IsPaused;

    public List<EnemyController> enemies=new List<EnemyController>(); 
    public List<SkillData> skills=new List<SkillData>();
   

    private void Awake() {
        if(instance==null)
        { 
            instance=this;
        }else{
            if(instance!=this)
            {
                Destroy(gameObject);
            }
        }
        DontDestroyOnLoad(gameObject);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Save 
{
    //save enemies position and hp information
    public List<float> positionX=new List<float>();
    public List<float> positionY=new List<float>();
    public List<bool> broken=new List<bool>();
    //save SkillTree
    public List<bool> IsUnlocked=new List<bool>();
    public List<int> skillLevel=new List<int>();

}

把public List<SkillData> skills=new List<SkillData>();中的信息写入Save类

 private Save createSaveGameObject()
    {
        Save save=new Save();
        foreach(EnemyController enemy in GameManage.instance.enemies)
        {
            save.broken.Add(enemy.broken);
            save.positionX.Add(enemy.PositionX);
            save.positionY.Add(enemy.PositionY);
        }
        foreach(SkillData skill in GameManage.instance.skills)
        {
            save.IsUnlocked.Add(skill.isUnlocked);
            save.skillLevel.Add(skill.SkillLevel);
        }

        
        return save;
    }

将Save类以二进制类型存储

 private void SaveBySerialization()
    {
        Save save=createSaveGameObject();
        BinaryFormatter bf=new BinaryFormatter();
        FileStream fileStream=File.Create(@"F:\unity games\learning\My project\Assets\scripts\LoadGame\Data.text");
        bf.Serialize(fileStream,save); //将save以二进制存入fileStream
        fileStream.Close();
    }

读取Save类里的信息至skills

private void LoadByDeSerialization()
    {
        
            //load SkillTree
            for(int i=0;i<GameManage.instance.skills.Count;i++)
            {
                GameManage.instance.skills[i].isUnlocked=save.IsUnlocked[i];
                GameManage.instance.skills[i].SkillLevel=save.skillLevel[i];
            }
            SkillManage.instance.updateSkillByLoad();
        }

    }

其中的updateSkillByLoad函数

 public void updateSkillByLoad()
    {
        foreach(SkillData skill in GameManage.instance.skills)
        {
            if(skill.isUnlocked==true)
            {
                skillButtons[skill.SkillID].GetComponent<Image>().color=Color.white;
                skillButtons[skill.SkillID].transform.GetChild(1).gameObject.SetActive(true);
                skillButtons[skill.SkillID].transform.GetChild(1).GetComponent<Text>().text=
                skill.SkillLevel.ToString();
            }
        }
    }

经测试,通过Save/Load按钮,可以正确实现技能树信息存储了,但是会有问题,当保存后继续加点其它技能,再load后,保存后继续加点的其它技能依然显示,经检查数据保存是没有问题的,只是忘了把之后技能的颜色返回原本的灰色,所有我先在Awake中去记录最初的阴影颜色

 private Color origional;
    private void Awake() {
        if(instance==null)
        {
            instance=this;
        }
        else{
            if(instance!=this)
            {
                Destroy(gameObject);
            }
        }
        DontDestroyOnLoad(gameObject);

        origional=skillButtons[0].GetComponent<Image>().color;
    }

再在updateSkillByLoad函数中添加一个else

public void updateSkillByLoad()
    {
        foreach(SkillData skill in GameManage.instance.skills)
        {
            if(skill.isUnlocked==true)
            {
                skillButtons[skill.SkillID].GetComponent<Image>().color=Color.white;
                skillButtons[skill.SkillID].transform.GetChild(1).gameObject.SetActive(true);
                skillButtons[skill.SkillID].transform.GetChild(1).GetComponent<Text>().text=
                skill.SkillLevel.ToString();
            }else{
                skillButtons[skill.SkillID].GetComponent<Image>().color=origional;
                skillButtons[skill.SkillID].transform.GetChild(1).gameObject.SetActive(false);
                }
        }
    }

至此,技能树的UI功能已经大功告成了!文章来源地址https://www.toymoban.com/news/detail-497080.html

到了这里,关于游戏开发日志17(保存技能树信息)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive命令行运行SQL将数据保存到本地如何去除日志信息

    先有需求需要查询hive数仓数据并将结果保存到本地,但是在操作过程中总会有日志信息和表头信息一起保存到本地,不符合业务需要,那如何才能解决该问题呢? 废话不多少,直接上代码介绍:

    2024年01月17日
    浏览(77)
  • python-自动化篇-办公-批量新建文件夹并保存日志信息

    因为业务需要,每天都需要按当天的日期创建很多新文件夹。把这种重复又繁重的操作交给Python来做,一直是我的目标。先说下要求: 默认在桌面新建文件夹。 文件夹命名方式,“月.日-1”,比如7.8-1,7.8-2。7是代表当天的月份,不能显示07。8是代表当天的日期,不能显示

    2024年02月20日
    浏览(50)
  • 如何开发一款游戏?【游戏开发所需技能和开发流程】

    开发一款游戏需要的技能包括:编程、设计、音效和项目管理。每个角色都需要掌握其特定领域的知识和技能,并与其他团队成员合作。在本文中,我们将深入探讨如何开发一款游戏。   1. 游戏开发流程 游戏开发流程可以分为以下几个阶段:     • 游戏概念:这是游戏开发

    2024年02月08日
    浏览(91)
  • unity存储信息的方式,保存读取背包、游戏进度,连接MySQL数据库

    为了在Unity中存储信息,有几种方法可供选择。最常见的方法是 PlayerPrefs、Serialization和Database 。 PlayerPrefs是一种简单的存储小量数据(如玩家偏好或游戏设置)的方法。它易于使用,不需要任何外部库。但是,不建议用于存储大量数据或敏感信息。 Serialization是另一种在Unit

    2024年02月09日
    浏览(63)
  • NetApp E系列(E-Series)OEM产品介绍以及如何收集日志和保存配置信息

    NetApp E系列是NetApp收购LSI存储后建立的一条新的产品线,由于LSI存储的历史悠久,所以这条产品线给NetApp带来了很多的OEM产品,可以说E系列是世界上OEM给最多公司的存储产品线也不为过,因为最早LSI的产品销售测率就是OEM,从最早赫赫有名的IBM DS系列,到DELL的PowerVault Vault

    2024年01月22日
    浏览(44)
  • 从零开始的种田生活-Unity游戏开发

    大家好,这里是暴躁老哥酒九。最近了我们的童年记忆《摩尔庄园》在手机上面复活了,不知道大家有没有沉迷于种菜无法自拔呢(反正我是累了)。 种田才是这个游戏本质吧~ 在《摩尔庄园》中了为我们玩家提供了很多的玩法比如:钓鱼,烹饪,开餐厅,庄园和玩家自身装

    2024年02月02日
    浏览(46)
  • 从零开始的PICO教程(1)Pico游戏开发项目配置

    1、大纲 经过该教程你将学会 配置好Pico游戏开发需要的环境 只有成为Pico开发者才可以发布可以在Pico上运行的游戏,所以这也是我们开始Pico开发生涯的第一步了。 1、注册 PICO 开发者帐号 你需要注册一个 PICO 开发者帐号,以便在 PICO 开发者平台管理应用。对于中国大陆地区

    2024年02月09日
    浏览(56)
  • NES(FC) FPGA游戏卡开发笔记(1)---- 开始篇

    目录 简介 技术要求 参考 1) 国内玩家自制游戏卡 2)N8 N8pro 3)powerpak 4)FC模拟器软件 N8 pro的实现方案的信息收集 先了解一下各个芯片的功能 N8开发者提供的资源信息 Powerpak  Nesdev wiki和forum 整个开发的目的就是做一个FPGA实现的,可以支持多种FC游戏(多种mapper)的游戏卡。

    2024年02月07日
    浏览(47)
  • 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP ShaderGraph Decal)(1)

    [Toggle(_SupportOrthographicCamera)] _SupportOrthographicCamera(“_SupportOrthographicCamera (default = off)”, Float) = 0 } SubShader { // 关于tags的内容可以查阅官网手册:https://docs.unity3d.com/Manual/SL-SubShaderTags.html // 为了避免渲染顺序问题, Queue必须 = 2501, 它位于透明队列中 // 在透明队列中,Unity总是从后

    2024年04月16日
    浏览(55)
  • Cocos独立游戏开发框架中的日志模块:Bug无所遁形

    本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。 在Cocos独立游戏开发框架中,一个强大的日志模块是不可或缺的组成部分。日志不仅仅是记录应用程序的运行状态,还可以用于故障排除、性能监测和安全审计。本文将探讨如何设计和实现

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包