引言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",