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

网站的充值是怎么做的做网站优化如何写方案

网站的充值是怎么做的,做网站优化如何写方案,建局域网网站,南沙网站建设公司哪家好一、序列化字段 在Unity中,序列化字段是一个非常重要的概念,主要用于在Unity编辑器中显示和编辑类的成员变量,或者在运行时将对象的状态保存到文件或网络中。 1.Unity序列化字段的作用 在编辑器中显示和编辑字段:默认情况下&…

一、序列化字段

在Unity中,序列化字段是一个非常重要的概念,主要用于在Unity编辑器中显示和编辑类的成员变量,或者在运行时将对象的状态保存到文件或网络中。

 1.Unity序列化字段的作用

  • 在编辑器中显示和编辑字段:默认情况下,只有公共字段(  public  )才会在Unity编辑器的Inspector窗口中显示。如果希望私有字段(  private  )或受保护字段(  protected  )也能在编辑器中显示并被编辑,可以通过序列化字段来实现。
  • 保存和加载对象状态:序列化字段还可以用于将对象的状态保存到文件或网络中,并在需要时重新加载这些状态。

2. 使用  [SerializeField]  属性

Unity提供了  [SerializeField]  属性,用于将私有或受保护的字段标记为可序列化。这样,这些字段就可以在Unity编辑器的Inspector窗口中显示和编辑。

using UnityEngine;public class ExampleScript : MonoBehaviour
{// 这是一个公共字段,会在Inspector中显示public int publicField;// 这是一个私有字段,不会在Inspector中显示private string privateField;// 这是一个私有字段,但使用[Serialize]标记后会在Inspector中显示[SerializeField] private float serializedField;void Start(){Debug.Log("Public Field: " + publicField);Debug.Log("Serialized Field: " + serializedField);}
}
//publicField和serializedField都会在Inspector中显示,而privateField不会显示。
//使用[SerializeField]属性可以让开发者更好地封装类的实现细节,同时仍然允许在编辑器中对字段进行编辑。

 3. 默认序列化规则

  • 公共字段:默认情况下,所有公共字段(  public  )都会被序列化,无论是否使用了  [SerializeField]  属性。
  • 私有字段:默认情况下,私有字段(  private  )不会被序列化,除非使用了  [SerializeField]  属性。
  • 静态字段:静态字段(  static  )永远不会被序列化,因为它们不属于对象的实例状态。
  • 只读字段:只读字段(  readonly  )不会被序列化,因为它们在构造函数之后不能被修改。
  • 特殊类型字段:某些特殊类型(如  Dictionary  、  Action  、  Func  等)不会被序列化,因为它们的序列化逻辑比较复杂。

4. 使用  [SerializeField]  的注意事项

  • 不要滥用:虽然  [SerializeField]  可以让私有字段在编辑器中显示,但不要过度使用它。过多的字段暴露在Inspector中可能会导致编辑器界面变得混乱。
  • 性能影响:序列化字段可能会对性能产生一定影响,尤其是在大量对象需要序列化时。因此,在性能敏感的场景中,需要谨慎使用序列化字段。
  • 与  [HideInInspector]  的区别:  [SerializeField]  用于将私有字段标记为可序列化,使其在Inspector中显示;而  [HideInInspector]  用于隐藏公共字段,使其不在Inspector中显示。

 5. 序列化字段的应用场景

  • 组件属性编辑:在开发自定义组件时,使用  [SerializeField]  可以让开发者更好地封装组件的实现细节,同时仍然允许用户在编辑器中配置组件的属性。
  • 保存和加载游戏状态:通过序列化字段,可以将游戏对象的状态保存到文件中,并在需要时重新加载这些状态,实现游戏的存档和读档功能。
  • 网络同步:在多人游戏中,可以将需要同步的字段标记为序列化字段,然后通过网络协议将这些字段的状态发送到其他客户端。

6. 扩展:自定义序列化

如果默认的序列化机制不能满足需求,Unity还提供了自定义序列化的方法。例如,可以通过实现  ISerializationCallbackReceiver  接口,在序列化和反序列化时执行自定义逻辑。

using UnityEngine;public class CustomSerializationExample : MonoBehaviour, ISerializationCallbackReceiver
{// 这是一个自定义字段,不会直接被序列化private string customField;// 用于存储自定义字段的序列化数据[SerializeField] private string serializedData;public void OnBeforeSerialize(){// 在序列化之前,将自定义字段的值转换为可序列化的格式serializedData = customField;}public void OnAfterDeserialize(){// 在反序列化之后,将序列化的数据还原为自定义字段的值customField = serializedData;}
}

二、单例模式(Singleton Pattern) 

在Unity中,单例模式是一种常见的创建型设计模式,用于确保某个类在程序运行期间只有一个实例存在,并提供一个全局访问点来获取这个实例。

在单例模式中,类的构造函数通常是私有的,防止外部通过 new 来创建对象,类内部维护一个静态实例,通过公共的静态方法提供访问。

单例模式的实现分为饿汉模式懒汉模式

1.饿汉式(Eager Initialization)单例模式:

是一种在类加载时就立即创建单例对象的实现方式。这种模式确保了单例对象在程序启动时就存在,并且可以立即使用。

适用场景:

当对象需要在程序启动时立即可用,且创建成本较低时使用,适合常用于必要的核心功能。例子:游戏设置、玩家控制、主菜单管理器。

实现方式:

1)属性实现单例模式(饿汉模式

通过定义一个静态属性来实现单例模式,并且通过私有设置器(  private set  )确保实例在第一次创建时被设置,并且之后不能被更改。

public class Player : MonoBehaviour
{//单例模式,确保了Player类只有一个实例,并且提供了一个全局访问点来获取这个实例//通过私有设置访问器,确保了Instance属性的值不会被外部代码意外修改public static Player Instance{ get; private set; }// ... 其他代码 ...//Awake在游戏对象被创建时自动调用,通常用于初始化操作。private void Awake(){//检查Instance是否已经为null。如果Instance不为null,说明已经有一个实例被创建了if (Instance != null){Debug.Log("已经有一个实例被创建了");}//将当前对象实例赋值给Instance,使其成为该类的唯一实例Instance = this;}
}
//这种实现方式确保了Player类在整个游戏会话中只有一个实例,并且可以通过Player.Instance访问这个实例。

注意点: 

1.立即初始化:在类被加载时立即创建单例对象,而不是在首次使用时才创建。

2. 简单实现:实现简单,不需要同步控制,因为对象在第一次加载时就被创建。

3. 资源占用:可能会在不需要时就占用资源,因为对象在类加载时就被创建了。

2)线程安全实现单例模式(饿汉模式

确保即使在多线程环境中,Player 类也只有一个实例,并且这个实例是在第一次被访问时创建的(懒加载)。

public class Player : MonoBehaviour
{// 私有静态字段,用于存储单例实例private static Player instance;// 公共静态属性,提供对单例的全局访问点public static Player Instance{// 属性的get访问器,用于获取单例实例get{// 如果实例为null,则进入锁定代码块if (instance == null){// 使用锁确保线程安全,防止多线程同时创建实例lock (typeof(Player)){// 再次检查实例是否为null,防止多线程创建多个实例if (instance == null){// 创建Player类的新实例instance = new Player();}}}// 返回单例实例return instance;}}// Unity生命周期方法,在对象被创建时调用private void Awake(){// 如果已经存在一个实例,并且当前实例不是那个实例,则销毁当前实例if (Instance != this){Destroy(gameObject);}// 如果当前实例是单例,则防止它在加载新场景时被销毁else{DontDestroyOnLoad(gameObject);}}
}

2.懒汉式(Lazy Initialization)单例模式:

是一种常见的单例实现方式,它确保单例对象在首次被访问时才创建。这种方式可以节省资源,因为它避免了在程序启动时立即创建对象,而是在真正需要时才创建。

适用场景:

当对象可能不被使用,或创建成本较高时使用,适合于可选或资源密集型功能。例子:高级图形选项、调试工具、可选模块。

实现方式:

1)属性实现单例模式(懒汉模式

确保单例对象在首次被访问时才创建,从而节省了资源。同时,由于属性的访问器是公共的,所以可以在任何地方通过 Singleton.Instance 访问单例。

using UnityEngine;public class Player : MonoBehaviour
{// 私有静态字段,用于存储单例实例private static Player instance;// 公共静态属性,提供全局访问点来获取单例实例public static Player Instance{get{// 如果实例为null,则创建实例if (instance == null){instance = new GameObject("Player").AddComponent<Player>();}return instance;}}// 私有构造函数,防止外部实例化private Player() { }// Unity生命周期方法,在游戏对象被创建时自动调用private void Awake(){// 检查是否已经存在实例if (instance != null && instance != this){// 如果存在另一个实例,则销毁当前实例Destroy(gameObject);}else{// 标记为DontDestroyOnLoad,防止在加载新场景时销毁DontDestroyOnLoad(gameObject);instance = this;}}
}

注意点:

1. 延迟初始化:单例对象在首次被访问时创建,而不是在类加载时立即创建。

2. 访问延迟:第一次访问单例属性时可能会有轻微延迟,因为需要创建对象。

3. 资源节省:只有在实际需要时才创建对象,节省资源。

2)线程安全实现单例模式(懒汉模式

为了提高线程安全性,可以使用双重检查锁定(Double-Checked Locking)模式

using UnityEngine;public class Player : MonoBehaviour
{// 私有静态字段,用于存储单例实例private static Player instance;// 用于同步的对象,确保线程安全private static readonly object lockObject = new object();// 公共静态属性,提供全局访问点来获取单例实例public static Player Instance{get{// 如果实例为null,则进入锁定代码块if (instance == null){lock (lockObject){// 再次检查实例是否为null,防止多线程创建多个实例if (instance == null){// 创建Player类的新实例instance = new GameObject("Player").AddComponent<Player>();}}}// 返回单例实例return instance;}}// 私有构造函数,防止外部实例化private Player() { }// Unity生命周期方法,在游戏对象被创建时自动调用private void Awake(){// 检查是否已经存在实例if (instance != null && instance != this){// 如果存在另一个实例,则销毁当前实例Destroy(gameObject);}else{// 如果不存在实例,则调用DontDestroyOnLoad,防止在加载新场景时销毁DontDestroyOnLoad(gameObject);// 将当前实例赋值给单例instance = this;}}
}


文章转载自:

http://ntB3geUT.rkscm.cn
http://slV4deGH.rkscm.cn
http://41IR9c33.rkscm.cn
http://f2NwY4mI.rkscm.cn
http://MVgLUc1Q.rkscm.cn
http://Cz4KwYP9.rkscm.cn
http://vm1tIeUC.rkscm.cn
http://1ovK9Eyx.rkscm.cn
http://iZqnLToh.rkscm.cn
http://GFNVUtxq.rkscm.cn
http://reXSePXh.rkscm.cn
http://P4Ori3Qz.rkscm.cn
http://m4Hz69i1.rkscm.cn
http://j0Wnvhpx.rkscm.cn
http://OJfA2p0P.rkscm.cn
http://OBh0rWtE.rkscm.cn
http://zZ24Ku54.rkscm.cn
http://vvPYsAO1.rkscm.cn
http://5iCIQ1ue.rkscm.cn
http://EgnhyCsz.rkscm.cn
http://IBcAvHy3.rkscm.cn
http://4Uehyac3.rkscm.cn
http://vUcC2fq6.rkscm.cn
http://Na0n2Tss.rkscm.cn
http://OjUyKuLY.rkscm.cn
http://gYC6J30b.rkscm.cn
http://NfyJS1Xc.rkscm.cn
http://Z7Bwgk0V.rkscm.cn
http://vp1YlA4o.rkscm.cn
http://6V4XGAnn.rkscm.cn
http://www.dtcms.com/wzjs/742545.html

相关文章:

  • 垂直网站导航是谁做的室内设计培训
  • 做百度推广的网站吗软件开发软件开发网站
  • 航天基地规划建设局网站关键词排名优化易下拉排名
  • 网站盗号怎么做怎么经营网店生意才会好
  • 第一个做电子商务的网站长春网站制作价格
  • 做网站外国的高校网站建设策划
  • 龙岩企业网站建设制作网页版qq官网
  • 装修设计公司网站四川省建设领域信用系统网站
  • 没有备案的网站百度能收录吗wordpress 的数据库路径
  • 大型网站集群怎么做邯郸wap网站建设
  • 什么平台可以做网站推广建设银行大厂支行网站
  • 做建材的网站毕设做网站和app
  • 大酒店网站源代码wordpress 完全静态化
  • 灵犀科技网站开发佼佼者石家庄网站建设需要多少钱
  • 文化企业官方网站开发方案书网站备案完成后不解析
  • 网站技术支持是什么免费创建论坛网站
  • 公司做网站一般用什么域名专业团队黑人
  • 微信分销网站建设平台建设文化产业网站的方案
  • 手机看电影的网站建设车险保险网站
  • 云做网站优化公司哪家好
  • 在某网站被骗钱该怎么做门户网站功能
  • 深圳市手机网站建设哪家好做网站注册页面模板
  • 福州医保网站调入申报怎么做百科网站建设
  • 做网站前应该先出图湖南省城乡和住房建设厅官网
  • 广告网站设计公司外国男男做暧暧视频网站
  • wordpress视屏站上海崇明网站建设
  • 网站规划与建设ppt商业网站的建设与制作
  • 专业网站制作仪表多少钱海口seo快速排名优化
  • 网站制作 知乎前端静态页面接单
  • 沈阳网站制作全过程网站访问量突然增加