当前位置: 首页 > article >正文

【日志】网络传输协议TCP/UDP/HTTP // unity泛型类单例模式

2024.10.23

【力扣刷题】

暂无

【数据结构】

暂无

【其他】

TCP(传输控制协议)(长连接):

TCP 是一种面向连接的、可靠的协议,它通过三次握手建立连接,客户端发送请求到服务器,服务器响应并返回数据,确保数据的可靠传输。

UDP(用户数据报协议)

UDP 是一种面向无连接的协议,它不需要建立连接,直接发送数据包。

HTTP(超文本传输协议)(短连接)

HTTP 是建立在TCP协议上。HTTP协议是无连接的,即每次请求和响应之间是独立的,服务器不会保存客户端的状态信息。

【Unity】

泛型单例模式

// 泛型单例模式
public class Singleton<T> where T:new()
{
    protected static T m_Instance;
    public static T instance
    {
        get
        {
            if(m_Instance == null)
            {
                m_Instance = new T();
            }
            return m_Instance;
        }
    }
}
public class SingletonMono<T> : MonoBehaviour where T : SingletonMono<T>
{
    private static T m_Instance;
    public static T instance
    {
        get
        {
            if(m_Instance == null)
            {
                m_Instance = FindObjectOfType<T>();
                if(m_Instance == null)
                {
                    GameObject singleObj = new GameObject("Singleton",typeof(T));
                    m_Instance = singleObj.AddComponent<T>();
                }
            }
            return m_Instance;
        }
    }
    public virtual void Awake()
    {
        // 将当前gameObject设置为常驻对象
        DontDestroyOnLoad(gameObject);
        if (m_Instance == null)
        {
            m_Instance = this as T;
        }
        else
        {
            GameObject.Destroy(gameObject);
        }
    }
}

        这段代码定义了一个泛型类 SingletonMono<T>,它继承自 MonoBehaviour,并且要求 T 必须是 SingletonMono<T> 的子类。在这个单例模式的实现中,Instance 属性会检查是否已经有一个该类型的实例存在。如果没有,它会创建一个新的游戏对象,并添加相应的组件。这样,你可以确保在整个游戏场景中,只有一个该类型的实例存在。使用这种方式,你可以确保你的单例组件在整个场景中只有一个实例,并且可以通过Instance 来访问它。

最后记得唤醒该单例模式。

从缓存加载资源 

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

public class ResMgr : SingletonMono<ResMgr>
{
    // 用于缓存已加载好的资源
    // 创建哈希表对象
    private Hashtable m_HashTable = null;
    private Hashtable hashTable
    {
        get
        {
            if(m_HashTable == null)
            {
                m_HashTable = new Hashtable();
            }
            return m_HashTable;
        }
    }

    // 用于从Resources中加载相关预制体
    public GameObject LoadAsset(string path, Transform parent = null, bool isCache = false)
    {
        GameObject prefab = null;
        // 通过哈希表判定该预制体是否已经缓存
        if(hashTable.ContainsKey(path))
        {
            prefab = hashTable[path] as GameObject;
        }
        else
        {
            prefab = Resources.Load<GameObject>(path);
            if(isCache)
            {
                hashTable.Add(path,prefab);
            }
        }

        // 实例化对象
        GameObject go = Instantiate(prefab, parent);
        return go;
    }
}

需要调用时就可以直接使用单例调用。 

GameObject obj = ResMgr.instance.LoadAsset(path, transform);

【奇思妙想】 

        我感觉《斗罗大陆》、《斗破苍穹》这一类小说,完全可以改成一个开放世界的RPG游戏。目前游戏界里能看到成熟的例子就有《原神》,那既然都有原神了,我为什么还要提呢?我单纯的觉得这些小说完全可以打造一批属于我们国家的超级3A大作,这些小说作者都还健在,并且这些玄幻类的小说自带废柴成长,完整的世界观,以及无数可以想象的地方。

        这体量完全就是一个超级3A,超过一千多章节的内容,可以分多少DLC,而且玩法还能不一样,还能探索世界,那Boss要人有人,要怪物有怪物,加上国内比国外更好的优质服务器,完全可以和好朋友一起开黑打Boss。

        如果是做《斗破苍穹》完全可以是做主线、支线剧情,还能顺便探索一下这个斗破世界,收集异火,去看一看自己的后宫佳丽,打一打除主线剧情外的其他Boss以及隐藏Boss,这本小说好像还有炼药师吧,如果炼药系统做得有创意并且不枯燥的话,将会是一个耐玩的系统。

        如果是做《斗罗大陆》那就是玩魂环了,根据书中的大师的《十大核心竞争理论》就能开发基本的玩法,玩家选择不同的职业就应该只能玩一种职业(准确来讲是不能再战斗过程中切换角色),这样的话是希望提高玩家对拥有队友的需求,对魂环的追求。魂环系统,魂骨系统,宗派系统(氪金点),以及各种试炼,但凡看过原著或者动漫,玩这个游戏恐怕都想搞个封号斗罗回家。

        接下来就是各种人物,NPC,相关敌对对象和场景的问题了,关于人物服饰,我想无需多言,包走国风潮流或者二次元路线的,这可是一个能向世界展示我们文化底蕴的机会,现在的审美观都已经被西方冲的稀稀跨跨的,现在不是钱突很多,就是夹子御姐小萝莉。国外的3A女性角色有被sweetBaby刻意改丑,但我们完全不受限制,再说老外也喜欢漂亮的女性角色,像《黑神化:悟空》的蜘蛛精四妹,至少符合国内的玩家审美才是正道。

        剩下的除了技术难题,就剩策划和创意问题了,这可以主打一个剧情向的,每年出一个DLC来一步一步补全小说中的内容,跟追番一个道理,也可以做自由开放探索世界,就是不知道这要是做出来得花多少时间。


——每天努力十五分钟,一年就努力了5475分钟,也就是91.25小时。(记得乘上0.7,这是扣去双休和法定的节假日的时间的)


http://www.kler.cn/news/362792.html

相关文章:

  • 海南聚广众达电子商务咨询有限公司靠谱吗怎么样?
  • 复旦大学全球供应链研究中心揭牌,合合信息共话大数据赋能
  • kebuadm部署k8s集群
  • TiDB替换Starrocks:业务综合宽表迁移的性能评估与降本增效决策
  • js 精确计算(加减乘除)
  • [mysql]mysql的全部单行函数
  • 基于yolov5只进行人物目标检测
  • 简单的 curl HTTP的POSTGET请求以及ip port连通性测试
  • autMan框架对接Kook机器人
  • 线性回归(一)
  • 大数据-185 Elasticsearch - ELK 家族 Logstash 安装配置 Input 插件-stdin stdout
  • RabbitMQ与Kafka的使用场景差异
  • Sparksql 动态shuffle partition
  • 写了一个SpringBoot的后端管理系统(仅后端)pine-manage-system
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (四):状态码的使用
  • 软件测试与软件缺陷的基础知识
  • Triton语言:机器学习领域的新星,能否挑战CUDA的霸主地位? ​​​​​​​
  • Zookeeper面试整理-分布式系统知识
  • Oracle OCP认证考试考点详解082系列01
  • perl统一修改文件前缀并排序
  • Embedding实现GPT回答和知识库内容相关的内容
  • LabVIEW继电器视觉检测系统
  • CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用
  • 项目打包不同环境
  • 【D3.js in Action 3 精译_036】4.1 DIY 实战:在 Observable 平台实现 D3折线图坐标轴的绘制
  • AudioSegment 提高音频音量 - python 实现