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

怎么样下载网页上的视频seo关键词优化平台

怎么样下载网页上的视频,seo关键词优化平台,asp.net网站的验证码怎么使用,数码电子产品网站建设策划书本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 有一些插件就是利用本篇的方法做"自动"处理的 目录 1.情景: 2.介绍与举例: 自定义特性API与使用 反射搜索自定义API 3.优化 4.处理带有自定义特性的类…

        本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正

        有一些插件就是利用本篇的方法做"自动"处理的

目录

1.情景:

2.介绍与举例:

  自定义特性API与使用

  反射搜索自定义API

3.优化

4.处理带有自定义特性的类


1.情景:

        你肯定见过这个东西,序列化私有字段的特性 将其变量可以显示在编辑器

[SerializeField]
private int hp;

         他是怎么实现的呢?F12进去看 其继承了C#之中的特性 [Atttibute]

        结合以前的知识,特性本质上就是一个标记,肯定还有其他什么代码去处理这个标记

所以就涉及Unity的序列化系统

  • 序列化流程

    1. 收集可序列化字段:Unity在导入脚本时,通过反射分析所有字段,检查是否标记了[SerializeField]或是否为公共字段。
    2. 生成序列化数据:将符合条件的字段(公共字段或标记了[SerializeField]的私有字段)的信息(名称、类型、值)保存到场景或预制体文件中。
    3. 反序列化:加载场景或预制体时,根据字段信息通过反射设置对应字段的值。
  • 私有字段访问

    • Unity使用反射的BindingFlags.NonPublic标志访问私有字段:
      FieldInfo field = type.GetField("_health", BindingFlags.NonPublic | BindingFlags

 其中有一个关键字叫做反射,所以今天就来看看怎么去自己实现[特性----反射处理]这个机制

2.介绍与举例:

  自定义特性API与使用


//参数一: 限定属性的作用对象, 这里是类
//参数二: 是否允许多个属性, 这里是false
//AttributeUsage 不做任何处理, 仅仅作为标记使用,此时Att就是一个特性了
[AttributeUsage(AttributeTargets.Class,AllowMultiple =false)]
public class Att : Attribute
{}
[Att]
public class Test { }

  反射搜索自定义API

using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;public class Rel : MonoBehaviour
{private void Awake(){GetAtt();}private  List<Type> attList = new List<Type>();private  void GetAtt() {//从当前应用程序域中加载所有程序集Assembly[] assArray = AppDomain.CurrentDomain.GetAssemblies();foreach (var ass in assArray){//获取程序集中所有类型Type[] typeArray = ass.GetTypes();foreach (var type in typeArray){Att att = type.GetCustomAttribute<Att>();if (att != null){// 将应用了 Att 特性的类型添加到列表中attList.Add(type);}} }Debug.Log(attList.Count);}
}

当前程序域下的所有程序集:

一个程序集可以包含一个或多个类型(类、接口等)的定义 

        这些是 Unity 引擎提供的程序集,每个模块对应了 Unity 引擎的不同功能部分,比如 UnityEngine.AIModule 可能包含了与人工智能相关的功能,UnityEngine.AnimationModule 包含了动画相关的功能。它们为开发者在 Unity 中创建游戏和互动内容提供了丰富的 API 

然后是单个程序集中的所有内容(因为是foreach遍历)

最后再foreach一遍直到在所有类型中找到想要的那个打了Att特性的类

3.优化

        你也看出来了,几千上万个甚至十几万个类型不断foreach 是很消耗性能的,所以可以用UnityEngine提供的一个方法进行优化

  1. 程序集范围限定
    只处理 Assembly-CSharp,避免无关程序集的反射遍历

  2. 利用 TypeCache
    Unity 内部缓存机制直接获取标记了特性的类型,无需手动反射

  3. 条件编译兼容旧版本
    通过 #if UNITY_2020_1_OR_NEWER 确保代码在旧版 Unity 中仍可运行

using System.Collections.Generic;
using UnityEngine;
using System.Reflection;
using System;#if UNITY_2020_1_OR_NEWER
using UnityEditor; // 需要 Unity 2020.1+ 的 TypeCache
#endifpublic class Rel : MonoBehaviour
{private List<Type> attList = new List<Type>();private void Awake(){GetAtt();}private void GetAtt(){// 优化1:限定在 Assembly-CSharp 程序集Assembly targetAssembly = null;foreach (var ass in AppDomain.CurrentDomain.GetAssemblies()){if (ass.GetName().Name == "Assembly-CSharp"){targetAssembly = ass;break;}}if (targetAssembly == null){Debug.LogError("Assembly-CSharp not found!");return;}// 优化2:使用 TypeCache 替代手动遍历(仅限 Unity 2020.1+)
#if UNITY_2020_1_OR_NEWERvar types = TypeCache.GetTypesWithAttribute<Att>();foreach (var type in types){// 优化3:进一步过滤确保类型属于 Assembly-CSharpif (type.Assembly == targetAssembly){attList.Add(type);}}
#else// 回退方案:手动遍历目标程序集中的所有类型foreach (var type in targetAssembly.GetTypes()){if (type.GetCustomAttribute<Att>() != null){attList.Add(type);}}
#endifDebug.Log(attList.Count);}
}

       你还可以将其作为编辑器下运行的方法 从开发阶段就可以运行获取该特性的类 然后做处理

 [InitializeOnLoadMethod]

4.处理带有自定义特性的类

        只是举一个简单的例子,该例子没有任何实用性

        但是可以突出我们获取到了带有自定义特性的类这一点

#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(Rel))]
public class RelEditor : Editor
{public override void OnInspectorGUI(){base.OnInspectorGUI();Rel rel = (Rel)target;// 显示所有标记 [Att] 的类型GUILayout.Label("Att-marked Types:");foreach (var type in rel.attList){GUILayout.Label(type.Name);}}
}
#endif

http://www.dtcms.com/wzjs/359924.html

相关文章:

  • 俱乐部网站php源码线上营销策略有哪些
  • 定制网站建设和运营简述网站推广的意义和方法
  • 网站地图的使用化妆品软文推广范文
  • 古典风格网站模板html网站模板搭建
  • 十大搜索引擎排名关于seo如何优化
  • 一个完整网站制作的实例百度pc网页版
  • 怎样进行站点优化百度seo简爱
  • 香港做鸡网站杭州网站设计公司
  • 网站怎么做直播功能吗百度联盟点击广告赚钱
  • 公司平台建设怎么写深圳抖音seo
  • wordpress前台上传图片seo优化招聘
  • 网络架构分析优化排名推广教程网站
  • 网站一般用什么软件做市场营销案例150例
  • 网站正在建设中的网页怎么做南京seo招聘
  • 专做logo网站叫什么西安百度关键词排名服务
  • 做网站dreamwa网站推广seo设置
  • 汕头设计网站建设游戏搜索风云榜
  • 武汉做家电的团购网站手机刷网站排名软件
  • 视频教做家常菜的网站国内能用的搜索引擎
  • 做网站的项目介绍现在百度推广有用吗
  • 建设委员会网站我想做app推广怎么做
  • 网站开发项目管理文档企业培训计划方案
  • 网站建设推广公司需要哪些岗位百度登录个人中心
  • 番禺建设网站策划谷歌seo技巧
  • 南京哪里有做网站的双11销售数据
  • 客栈网站建设代码推广平台下载
  • 淘宝网站基础建设 托管引擎优化是什么意思
  • 企业网站的优势中国网站排名网
  • 如何建设网站效果好网站百度百科
  • 网站网页设计百度网盟官网