Unity独立游戏基础:DontDestroyOnLoad单例和PlayerPrefer记录持久化数据

本文介绍了如何在Unity中利用DontDestroyOnLoad实现单例模式,以及PlayerPrefs进行持久化数据记录。通过具体案例讨论了在游戏场景切换和退出时保存玩家数据的方法,包括血条、UI、背包等属性的处理,并提到了在不同场景应用的注意事项。
摘要由CSDN通过智能技术生成

引言0:

这是一个适用于关卡切换和退出游戏时自动记录玩家数据的通用案例,虽然该例功能简易,旨在说明实现例子,但用了较多时间优化了常见bug(其实就是稍微学习了一下然后匆忙记录)。可拓展性较高。

引言1:

关于PlayerPrefer,个人在《Unity5权威讲解》中制作PUN多人游戏开房间记录玩家NickName时使用过,后在《Unity3D案例开发大全》的台球案例等里见过多次。本次实习,个人在搭载设置界面时,要求使用公司lua中的一个持久化API记录音效和音乐设置选项,记录过相关功能。而本次将结合SceneManager里面的记录当前ActiveScene,buildindex和name等作为记录。旨在用于自定义用户属性结构体,level,exp,hp,attack,money等的拓展引用。而个人也有幸研究和制作过Unity c# 封装TcpClient下的通过连接c++DB服务器再连接mysql进行保存玩家账号,登录注册和位置信息的持久化处理,比起c++的mysql API,比较起来,PlayerPrefer学习成本极低。

引言2:

关于DontDestroyOnLoad,个人最早在学习RougeLike2D官方案例时接触过,而在淘宝网店淘来的手游闯关项目里见过广泛应用。之前个人常做的是场景转换后不记录前一个场景的用户数据的闯关游戏或从游戏大厅加入特定房间的单场景游戏。对该API的一些重复加载问题有一些了解和初步尝试避免。本次会进行优化。
这两个功能都非第一次接触,但使用经验并不成熟,若有建议指导欢迎指出

1.关于DontDestroyOnLoad单例实现:

使用抽象类模板提供虚函数给子类继承重写,而可通过其他脚本调用特定函数激活

public abstract class DontDestroyOnLoadSingleton<T> : MonoBehaviour where T : DontDestroyOnLoadSingleton<T>
{
   
    protected static T _instance = null;

    public static T Instance
    {
   
        get
        {
   
            if(_instance == null)
            {
   
                GameObject go = GameObject.Find("Player");
                if(go == null)
                {
   
                    Vector3 position_ = new Vector3(
                        PlayerPrefs.GetFloat("Posx",
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值