【unity之IMGUI实践】单例模式管理数据存储【二】

这篇具有很好参考价值的文章主要介绍了【unity之IMGUI实践】单例模式管理数据存储【二】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unityUI专题篇
【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


⭐单例模式管理面板对象⭐



🎶前言


🅰️


🎶(A)常用关键API


【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


🎶(B)需求分析


【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


🎶(C)逻辑封装——游戏音乐数据存储


【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


😶‍🌫️:步骤实现

1.首先将音乐数据封装在类中,不采用单例模式
2. 而后封装一个游戏数据类为单例模式:功能:利用Playerfabs进行数据存储音乐数据
3.读取存盘中的数据更新游戏数据


1.首先将音乐数据封装在类中,不采用单例模式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   音乐相关数据存储类      
//___________功能:    记录音乐相关的数据 
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class MusicData 
{
    
    //记录音乐,音效的开关状态和拖动条
    public bool  musicSwitch;
    public bool  soundSwitch;
    public float musicRoll;
    public float soundRoll;
    public bool isFirst;
}

2. 而后封装一个游戏数据类为单例模式:功能:利用Playerfabs进行数据存储音乐数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据类   
//___________功能:    记录游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

public class GameData         
{
    static private GameData dataContorl = new GameData ();
    static public  GameData DataContorl => dataContorl ;
    public MusicData musicData ;

    private GameData()
    {
        musicData = new MusicData();
        musicData = PlayerfabsClass.Chats.GetDataMess(typeof(MusicData), "Music") as MusicData ;
        if ( !musicData.isFirst ) //如果是第一次进入游戏
        {
            musicData.musicSwitch = true;
            musicData.soundSwitch = true;
            musicData.musicRoll = 0.5f;
            musicData.soundRoll = 0.5f;
            PlayerfabsClass.Chats.SaveDataMess(musicData, "Music");   //设置为自定义的默认值后进行存储             
        }
    }
    
}

3.读取存盘中的数据更新游戏数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  设置面板功能
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class SetPlane : BeginFather<SetPlane>
{
  //将功能控件拖拽对应的成员变量中
    public Button closeButt;
    public Slider sliderMusic;
    public Slider sliderSound;
    public ToggleM toggleMusic;
    public ToggleM toggleSound;

    private float toggle1;
    private float toggle2;

    private void Start()
    {
        
        //按钮中事件的添加
        closeButt.triggerEvent += () => {
            this.gameObject.SetActive(false);
            BeginPlane.SingleInstance.Show();
        };
        //滑条中事件的添加
   
        sliderMusic.triggerEvent += (value) =>
        {
            
        };
        sliderSound.triggerEvent += (value) =>
        {

        };
        //多选框中事件的添加

        toggleMusic.triggerEvent += (value) =>
        {

        };
        toggleSound .triggerEvent += (value) =>
        {

        };
        this.Hidden();
    }

    private void MusicDataUpdate()
    {
        MusicData data = GameData.DataContorl.musicData;
        sliderMusic.NowValue = data.musicRoll;
        sliderSound.NowValue = data.soundRoll;
        toggleMusic.IsSwitch = data.musicSwitch;
        toggleSound.IsSwitch = data.soundSwitch;
    }

    public override void Show()
    {
        base.Show();  //保留父类的封装逻辑
        MusicDataUpdate();
    }
}


实现音乐数据的同步更新——最终代码

目的: 将游戏游戏数据保存至硬盘,下次开启游戏实现数据同步

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据类   
//___________功能:    记录游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

public class GameData         
{
    static private GameData dataContorl = new GameData ();
    static public  GameData DataContorl => dataContorl ;
    public MusicData musicData ;

    private GameData()
    {
       
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;

        if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时)
        {
            musicData.isFirst = true;
            musicData.musicSwitch = true;
            musicData.soundSwitch = true;
            musicData.musicRoll = 1f;
            musicData.soundRoll = 1f;
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                
        }
    }
    
    //音乐开关数据的更新存储

    public void ChangeMusicS( bool value)
    {
        musicData.musicSwitch = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music");
    }

    //音效开关数据的更新存储

    public void ChangeSoundS(bool value)
    {
        musicData.soundSwitch  = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //音乐滑条数据的更新存储

    public void ChangeMusicR(float value)
    {
        musicData.musicRoll  = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //音效滑条数据的更新存储

    public void ChangeSoundR(float value)
    {
        musicData.soundRoll  = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  设置面板功能
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class SetPlane : BeginFather<SetPlane>
{
  //将功能控件拖拽对应的成员变量中
    public Button closeButt;
    public Slider sliderMusic;
    public Slider sliderSound;
    public ToggleM toggleMusic;
    public ToggleM toggleSound;

    private float toggle1;
    private float toggle2;
    private MusicData musicData;

    private void Start()
    {
        
        //按钮中事件的添加
        closeButt.triggerEvent += () => {
            Hidden();
            BeginPlane.SingleInstance.Show();
        };
        //多选框中事件的添加

        toggleMusic.triggerEvent += (value) => GameData.DataContorl.ChangeMusicS(value);

        toggleSound.triggerEvent += (value) => GameData.DataContorl.ChangeSoundS(value);
        //滑条中事件的添加

        sliderMusic.triggerEvent += (value) => GameData.DataContorl.ChangeMusicR(value);

        sliderSound.triggerEvent += (value) => GameData.DataContorl.ChangeSoundR(value);
      
        Hidden();
    }


    private void MusicDataUpdate() //将已存盘的数据读取后更新
    {
        MusicData data = GameData.DataContorl.musicData;

        toggleMusic.IsSwitch = data.musicSwitch;
        toggleSound.IsSwitch = data.soundSwitch;
        sliderMusic.NowValue = data.musicRoll;
        sliderSound.NowValue = data.soundRoll;
    
    }

    
    public override void Show()
    {
        base.Show();        //保留父类的封装逻辑
        MusicDataUpdate();  //在展示时更新
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 开始面板类
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class BeginPlane : BeginFather<BeginPlane>
{
    // 获取开始面板中的各个按钮控件

    public Button but1;
    public Button but2;
    public Button but3;
    public Button but4;
   
    private void Start()
    {
        but1.triggerEvent += () => { SceneManager.LoadScene("Start"); };                 //点击“开始游戏”
        but2.triggerEvent += () => { Hidden(); SetPlane.SingleInstance.Show();   };      //点击“游戏设置”
        but3.triggerEvent += () => { Application.Quit(); };                              //点击“退出游戏”
        but4.triggerEvent += () => { Hidden();  };                                       //点击“排行榜”
    }


}


🎶(D)逻辑封装——游戏排行榜数据存储


界面设计

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript

  • 效果演示:【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript

😶‍🌫️:步骤实现

  • 1.封装排行榜数据类(无参构造做new ,有参构造做一键赋值)

  • 2.以数据管理类为载体进行更新API封装——只存储排行榜中的数据到盘(注册表)中

  • 3.封装排行榜面板类进行实时显示


【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript-----【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript

封装排行榜数据类(无参构造做new ,有参构造做一键赋值)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:   
//___________功能: 排行榜数据的载体    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class RankData
{ 
    public string name;
    public int score;
    public int time;
    public RankData() //用来new
    {

    }
    public RankData(string name, int score, int time ) //用来一键赋值
    {
        this.name = name ;
        this.score = score ;
        this.time = time;
    }
}

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript ----------------------【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
以数据管理类为载体进行更新API封装

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据管理类   
//___________功能:    记录和更新游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

public class GameData         
{
    static private GameData dataContorl = new GameData ();
    static public  GameData DataContorl => dataContorl ;
    public MusicData musicData ;
    public List<RankData> rankTopData;//固定承载前六名的数据信息

    private GameData()
    {
       
        //初始化读取音乐数据
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;
        //初始化读取排行榜数据
        rankTopData = PlayerPrefsDataMgr.Instance.LoadData(typeof(List<RankData>), "Rank") as List<RankData>;

        if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时)
        {
            musicData.isFirst = true;
            musicData.musicSwitch = true;
            musicData.soundSwitch = true;
            musicData.musicRoll = 1f;
            musicData.soundRoll = 1f;
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                
        }
      
          }       
    //------------------------排行榜数据的更新封装-------------------------------

        
    //在排行榜中添加数据

    public void SaveRankData(string name, int score, int time)
    {
        rankTopData.Add(new RankData(name, score, time));
        Debug.Log(rankTopData);
        rankTopData.Sort((a, b) => { return a.score > b.score ? -1 : 1; }); //添加排序规则

        //但list大于6时
        for (int i = rankTopData.Count - 1 ; i > 5; i--)
        {
            rankTopData.RemoveAt(i); //删除
        }
        
        PlayerPrefsDataMgr.Instance.SaveData(rankTopData, "Rank" );
    }


    //------------------------音乐数据的更新封装------------------------------

    //音乐开关数据的更新存储

    public void ChangeMusicS( bool value)
    {
        musicData.musicSwitch = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music");
    }

    //音效开关数据的更新存储

    public void ChangeSoundS(bool value)
    {
        musicData.soundSwitch  = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //音乐滑条数据的更新存储

    public void ChangeMusicR(float value)
    {
        musicData.musicRoll  = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //音效滑条数据的更新存储

    public void ChangeSoundR(float value)
    {
        musicData.soundRoll  = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }
}


【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript-----------【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
3.封装排行榜面板类进行实时显示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//-------------------------------------
//—————————————————————————————————————
//___________脚本名:  排行榜面板
//___________功能:   掌控排行榜面板相关控件
//___________创建者: 秩沅_______________
//_____________________________________
//-------------------------------------


public class RankPlane : BeginFather<RankPlane >
{

    public Button closeButton;

    //采用列表的方式进行排行数据的暂时存储

    private List<Label> RK_Name = new List<Label>();
    private List<Label> RK_Score = new List<Label>();
    private List<Label> RK_Time = new List<Label>();
  
    private void Start()
    {
        //通过API获取排行榜中的标签
        for (int i = 1; i <= 6; i++)
        {        
            RK_Name.Add(this.transform.Find("RKName/player" + i ).GetComponent<Label>());
            RK_Score.Add(this.transform.Find("RKScore/Score" + i ).GetComponent<Label>());
            RK_Time.Add(this.transform.Find("RKTime/time" + i ).GetComponent<Label>());       
        } 

        //为按钮中的事件添加方法
        closeButton .triggerEvent += ()=>{
            Hidden(); BeginPlane.SingleInstance.Show();
        };
        Hidden();    
    }

    public override void Show()
    {
        base.Show();
        ShowRankData();
    }

    public void ShowRankData()  //读盘排行榜数据并显示
    {
        GameData.DataContorl .SaveRankData("nibb", 100, 342);
        List<RankData> data = GameData.DataContorl.rankTopData;
        
        for (int i = 0; i < data.Count; i++)
        {
            string showTime = "";
            int hour, min, second;
            print(data[i].name);
            RK_Name[i].ContorlContent.text = data[i].name;
            RK_Score[i].ContorlContent.text = data[i].score.ToString();
            RK_Time[i].ContorlContent.text = "";
            //时间格式转化
            hour = data[i].time / 3600;
            min = data[i].time / 60 % 60;
            second = data[i].time % 60;
            showTime = $"{hour}小时{min}分钟{second}秒";

            RK_Time[i].ContorlContent.text = showTime;
        }
    }
}

总UML图

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript


🎶(E)逻辑封装——音乐数据管理类


😶‍🌫️步骤:

  • 1.封装音乐数据管理类——单例
  • 2.在游戏数据管理类中,更新音乐数据更新方法

封装音乐数据类

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  更新音乐
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class MusicContol : MonoBehaviour
{
    static private MusicContol singleMusicContol;
    static public MusicContol SingleMusicContol => singleMusicContol;

    private  AudioSource beginAudio;
    private MusicData nowMusicData;
 
    void Awake()
    {
        singleMusicContol = this;
        
        //达到一运行游戏就有音乐的效果
        beginAudio = GetComponent<AudioSource>();      
        //从盘中读取
        nowMusicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData;
        beginAudio.enabled = nowMusicData.musicSwitch;
        beginAudio.volume = nowMusicData.musicRoll;

    }

    //----将其变成外界可调用的方法------ 

    public void ChangeMusicSwitch(bool value) //改变音乐开关
    {
        beginAudio.enabled = value;
    }

    public void ChangeMusicRoll(float  value) //改变音乐大小
    {
        beginAudio.volume  = value;
    }

    public void ChangeSoundSwitch(bool value) //改变音效开关
    {
      
    }

    public void ChangeSoundRoll(float  value) //改变音效大小
    {

    }
}

游戏数据管理类,也需要更新——在方法中更新逻辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据管理类   
//___________功能:    记录和更新游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

public class GameData         
{
    static private GameData dataContorl = new GameData ();
    static public  GameData DataContorl => dataContorl ;
    public MusicData musicData ;
    public List<RankData> rankTopData;//固定承载前六名的数据信息

    private GameData()
    {
       
        //初始化读取音乐数据
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;
        //初始化读取排行榜数据
        rankTopData = PlayerPrefsDataMgr.Instance.LoadData(typeof(List<RankData>), "Rank") as List<RankData>;

        if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时)
        {
            musicData.isFirst = true;
            musicData.musicSwitch = true;
            musicData.soundSwitch = true;
            musicData.musicRoll = 1f;
            musicData.soundRoll = 1f;
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                
        }
      
          }       
    //【------------------------排行榜数据的更新封装----------------------------------】

        
    //在排行榜中添加数据

    public void SaveRankData(string name, int score, int time)
    {
        rankTopData.Add(new RankData(name, score, time));
        Debug.Log(rankTopData);
        rankTopData.Sort((a, b) => { return a.score > b.score ? -1 : 1; }); //添加排序规则

        //但list大于6时
        for (int i = rankTopData.Count - 1 ; i > 5; i--)
        {
            rankTopData.RemoveAt(i); //删除
        }
        
        PlayerPrefsDataMgr.Instance.SaveData(rankTopData, "Rank" );
    }




    //【------------------------音乐数据的更新(存盘)封装----------------------------------】

    //音乐开关数据的更新存储

    public void ChangeMusicS( bool value)
    {
        musicData.musicSwitch = value;
        MusicContol.SingleMusicContol.ChangeMusicSwitch(value);  //实时改变音乐大小_下同
        PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music"); //实时进行音乐数据存盘_下同
    }

    //音效开关数据的更新存储

    public void ChangeSoundS(bool value)
    {
        musicData.soundSwitch  = value;
        MusicContol.SingleMusicContol.ChangeSoundSwitch(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //音乐滑条数据的更新存储

    public void ChangeMusicR(float value)
    {
        musicData.musicRoll  = value;
        MusicContol.SingleMusicContol.ChangeMusicRoll(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //音效滑条数据的更新存储

    public void ChangeSoundR(float value)
    {
        musicData.soundRoll  = value;
        MusicContol.SingleMusicContol.ChangeSoundRoll(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    
}

过程中的错误——优化思维

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript
进行优化__________==>

【unity之IMGUI实践】单例模式管理数据存储【二】,# UnityGUI篇,# unity简单游戏demo制作,unity,单例模式,javascript

结论:


👌结论:

  • 1.进行模块化处理,数据管理就是数据管理,面板显示就是面板显示,各司其职,员工不得乱工作
  • 2.抽象行为,分配行为,你就是掌控者
  • 3.如果某个行为/操作,不仅限于一个对象,要将其封装成外界可以调用的API
    (例如修改主界面音频时,自己直接获取,却没想到将其封装成外界调用的方法)

相关文章


⭐【2023unity游戏制作-mango的冒险】-6.关卡设计

⭐【2023unity游戏制作-mango的冒险】-5.攻击系统的简单实现

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!文章来源地址https://www.toymoban.com/news/detail-599221.html

到了这里,关于【unity之IMGUI实践】单例模式管理数据存储【二】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【unity之IMGUI实践】游戏结束流程封装实现【七】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.坐标三个转化 2.GUI的原点和屏幕的原点 3.结构体的特点回顾——涉及Rect_结构体类型 4.血条的

    2024年02月14日
    浏览(35)
  • 【unity之IMGUI实践】抽象父类继承实现【三】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 总效果图 😶‍🌫️:步骤 1.创建游戏面板,进行组件管控 2.创建提示面板进行退出确定 3.同步面板直接的显隐和复

    2024年02月16日
    浏览(42)
  • 【unity之IMGUI实践】通用API实现抽象行为封装【五】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤 1.添加道具预制体(随机生成武器) 2.封装道具基类 3.封装武器道具逻辑 1.封装道具基类 封装武器道具

    2024年02月15日
    浏览(30)
  • 【Unity之IMGUI】—编译模式下控件可视化及其封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 此图可忽略 UML类图 性能优化代码 完整代码: 按钮封装代

    2024年02月10日
    浏览(32)
  • 【Unity之IMGUI脚本封装】—编译模式下控件可视化及其封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 此图可忽略 UML类图 性能优化代码 完整代码: 按钮封装代

    2024年02月15日
    浏览(47)
  • 单例模式的理论与实践

    本文实践代码仓库:https://github.com/goSilver/my_practice 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点以访问该实例。单例模式常用于需要共享资源或控制某个唯一资源的场景,例如数据库连接、线程池等。 单例模式可以确保在整个应用程

    2024年02月12日
    浏览(25)
  • C++ 单例模式的各种坑及最佳实践

    单例模式是设计模式中最简单、常见的一种。其主要目的是确保整个进程中,只有一个类的实例,并且提供一个统一的访问接口。常用于 Logger 类、通信接口类、线程池等。 限制用户直接访问类的构造函数,提供一个统一的 public 接口获取单例对象。 这里有一个“先有鸡还是

    2024年02月08日
    浏览(27)
  • Unity中 单例模式

    单例模式 1.静态方法访问 在Unity中,\\\"单例模式\\\"(Singleton Pattern)是一种常见的软件设计模式。它用于确保一个类只有一个唯一的实例,并提供一种全局访问点,使得其他类可以轻松地访问该唯一实例。 在游戏开发中,特别是使用Unity引擎时,单例模式经常用于管理全局的状态

    2024年04月25日
    浏览(22)
  • Unity设计模式之单例模式

    单例模式(Singleton)是设计模式中很常见的一种设计模式,目的是为了让一个类在程序运行期间有且仅有一个实例,且方便全局访问。 1、私有的构造函数。 2、含有一个该类的静态私有对象。 3、静态的公有函数或属性,方便用户创建或者获取它本身的静态私有对象。 当项目

    2023年04月09日
    浏览(57)
  • unity 单例模式(实例详解)

    以下是一个简单的C#实现Unity中单例模式的例子: 在C#中, protected SingletonClass() {} 这个构造函数的作用是限制类的实例化方式。在这个单例模式实现中,将构造函数设为 protected 有以下几点意义: 防止外部直接创建实例 :由于构造函数是受保护的(protected),所以其他类无法

    2024年01月23日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包