Unity Attribute特性全解析:从Inspector美化到编辑器自动化
1. 项目概述为什么Unity开发者必须掌握Attribute如果你在Unity里写过脚本大概率见过[SerializeField]、[Range(0, 10)]或者[Header(“分组标题”)]这样的标记。这些方括号里的东西就是Attribute中文常译作“特性”或“属性”注意不是类的Property。很多朋友尤其是刚入行的新人往往把它们当作一种“魔法注释”来用知道加上去Inspector面板会变好看但不太清楚其背后的原理和更广阔的天地。我干了十多年Unity开发从早期的Unity 4用到现在可以说Attribute是贯穿整个编辑器扩展和代码组织能力的核心骨架。它远不止是美化Inspector的工具。理解Attribute意味着你能大幅提升开发效率通过自定义Inspector布局让策划和美术同事能更直观、更安全地配置参数减少沟通成本和运行时错误。实现优雅的代码约束与自动化为字段、方法或类添加“元数据”实现自动化的数据验证、依赖注入、编辑器工具生成等。深入理解Unity编辑器的工作机制Attribute是Unity编辑器与你的C#脚本代码进行“对话”的一种强契约。搞懂它你就拿到了定制和扩展编辑器行为的钥匙。网上关于单个Attribute用法的文章很多但往往零散。这篇内容我将结合自己踩过的无数坑和最佳实践对Unity中的Attribute进行一次全面、系统、有深度的总结。目标不仅是罗列清单更是讲清楚“为什么”要这么用以及如何组合它们来解决实际开发中的痛点。无论你是想优化工作流的新手还是寻求更高阶编辑器定制技巧的老鸟相信都能从中找到干货。2. Attribute的本质与核心工作机制在深入具体Attribute之前我们必须先统一认知Attribute到底是什么它不是运行时逻辑的一部分而是为代码元素类、方法、字段、属性等附加的声明性信息。你可以把它想象成贴在这个代码元素上的一个“标签”或“注解”。2.1 元数据编译时与运行时的桥梁Attribute是.NET框架和C#语言的标准特性Unity基于此构建了自己的体系。当你写下[SerializeField] private int myNumber;并编译后编译时编译器会将这些Attribute信息作为“元数据”写入生成的程序集.dll文件中。这部分信息不包含可执行代码只做描述。运行时Unity引擎或你自己的代码可以通过反射Reflection机制来读取这些元数据。例如Unity编辑器在绘制Inspector面板时会遍历你脚本中所有字段检查它们是否带有[SerializeField]这个“标签”。如果有即便字段是private的Unity也会认为“这个字段需要被序列化并显示在Inspector上”。关键理解Attribute本身不执行任何操作。它只是“数据”。是读取这些Attribute的代码如Unity编辑器、你的自定义编辑器脚本、或通过反射调用的系统赋予了Attribute意义和行为。这就像你给一个盒子贴上“易碎”标签标签本身不会保护盒子但搬运工看到标签后会采取不同的处理方式。2.2 Unity如何利用Attribute驱动编辑器Unity编辑器的Inspector面板本质上是一个强大的、基于Attribute的反射系统。其工作流程可以简化为选中一个GameObject其挂载了MonoBehaviour脚本。编辑器通过反射获取该脚本类型的所有字段、属性、方法。检查每个成员是否带有特定的Attribute如SerializeField,Range,Tooltip。根据Attribute的指示决定如何绘制该成员的GUI控件是滑动条、输入框、颜色选择器还是按钮以及如何布局、分组和添加提示。当用户在Inspector修改值编辑器再通过反射将值写回对应的字段。这个过程完全是动态的、数据驱动的。这意味着只要你为你的字段打上正确的“标签”Unity就能自动为你生成复杂的编辑界面无需你手动编写一行OnGUI代码。3. 常用内置Attribute详解与实战技巧Unity提供了丰富的内置Attribute我们可以将其分为几个功能大类来理解。我会在每个类别下不仅说明用法更分享一些官方文档里不会写的“实战心得”。3.1 序列化与Inspector显示控制类这类Attribute直接影响字段在Inspector中的可见性、可编辑性以及序列化行为。[SerializeField]最核心的Attribute。强制Unity序列化一个私有字段或受保护字段并将其显示在Inspector中。private int _health; // Inspector中不可见也不会被保存 [SerializeField] private int _maxHealth; // Inspector中可见且会被序列化保存踩坑记录很多人误以为[SerializeField]只为了显示。其实它的首要作用是序列化。Unity默认只序列化公有字段和标记了[SerializeField]的私有字段。这意味着如果你有一个私有字段需要在游戏存档、预制体Prefab中保持状态必须加上此特性否则它的值在运行模式退出或预制体应用后会丢失。[HideInInspector]在Inspector中隐藏一个公有字段或标记了[SerializeField]的私有字段。字段仍会被序列化。public float internalCache; // 本意是内部缓存不想让人乱改 [HideInInspector] public float internalCache; // 正确在Inspector隐藏但值会被保存注意对于本来就是private且没有[SerializeField]的字段无需使用[HideInInspector]因为它们本来就不会显示。[NonSerialized].NET标准特性。阻止Unity序列化一个字段。即使它是公有字段也不会被保存到场景或预制体。[NonSerialized] public System.Action onEvent; // 委托、事件通常不加序列化重要区别[HideInInspector][SerializeField]的组合字段会被序列化但不显示。而[NonSerialized]是根本不让序列化。对于运行时临时计算的结果、缓存或引用类型如委托、字典使用[NonSerialized]或直接不序列化是更安全的选择可以避免不必要的序列化开销和潜在错误。[FormerlySerializedAs(“oldName”)]重命名字段时的救命稻草。当你修改了一个已序列化字段的名称后Unity会认为这是一个新字段旧数据会丢失。使用此特性可以告知Unity“这个字段以前叫oldName请把旧数据迁移过来。”// 旧代码 public int playerScore; // 新代码 [FormerlySerializedAs(“playerScore”)] public int score;实操心得在团队协作中对已大量使用的脚本字段进行重命名是高风险操作。务必使用此特性并在提交前充分测试可以避免大量预制体和场景数据损坏。3.2 Inspector界面布局与分组类这类Attribute用于美化Inspector提升可读性和易用性。[Header(“分组标题”)]在字段上方添加一个粗体标题用于逻辑分组。非常简单有效。[Space(height)]在字段上方添加垂直间距。默认height为8像素。[Tooltip(“提示文本”)]为字段添加鼠标悬停提示。这是提升工具链友好度的关键一定要为那些含义不直观的参数加上详细的Tooltip给策划和美术同事最好的支持。[Header(“战斗设置”)] [Tooltip(“角色基础生命值受装备和Buff影响。”)] public float baseHealth 100f; [Space(10)] [Header(“移动设置”)] public float moveSpeed 5f;3.3 输入约束与验证类这类Attribute在编辑时就能对输入值进行约束防止无效数据进入。[Range(min, max)]将数值型字段int, float显示为一个滑动条并限制输入范围。[Range(0, 1)] public float opacity 0.5f; // 只能通过滑块选择0到1的值注意它只影响Inspector的输入方式。如果在代码里直接赋值opacity 2f这个约束是无效的。真正的数据验证需要在OnValidate方法或setter中进行。[Min(minValue)]设置数值的最小值。比[Range]更灵活不限制最大值。[Multiline(lines)]与[TextArea(minLines, maxLines)]用于字符串字段。[Multiline]显示为一个多行文本输入框。[TextArea]功能类似但可以指定最小和最大行数滚动体验更好是现在更推荐的方式。[Multiline] public string description; // 简单的多行框 [TextArea(3, 10)] public string story; // 一个3-10行的可滚动文本区域[Delayed]字段值只有在用户按下回车或焦点离开输入框时才会生效。非常适合需要实时预览但又不想每输入一个字符就触发昂贵计算的参数如地图尺寸、分辨率。[Delayed] public int gridSize 10; // 修改时不会立即应用失焦或回车后才更新3.4 高级功能与脚本生命周期类这类Attribute影响更底层的脚本行为或启用特殊功能。[RequireComponent(typeof(ComponentType))]添加到类上。当将此脚本挂载到GameObject时如果缺少所需组件Unity会自动添加。依赖管理的利器。[RequireComponent(typeof(Rigidbody))] public class PlayerController : MonoBehaviour { private Rigidbody _rb; void Start() { _rb GetComponentRigidbody(); // 可以确保GetComponent不会返回null } }[DisallowMultipleComponent]添加到类上。防止同一个GameObject上挂载多个该脚本实例。[ExecuteInEditMode]与[ExecuteAlways]ExecuteInEditMode让脚本在编辑模式非运行模式下也执行Update等方法。常用于编辑器工具、预览效果。ExecuteAlways功能更强在编辑模式、运行模式、预制体模式等几乎所有情况下都会执行。使用时必须非常小心要确保代码在非运行模式下是安全的例如不要访问只能在运行时初始化的对象。血泪教训在ExecuteInEditMode或ExecuteAlways的脚本中任何可能修改场景或预制体的操作如实例化对象、修改Transform都必须包裹在if (Application.isPlaying)或if (!EditorApplication.isPlayingOrWillChangePlaymode)等条件检查内否则极易导致场景意外被修改且难以撤销。[InitializeOnLoadMethod]标记一个静态方法在Unity加载编辑器或重载脚本后自动执行。常用于注册全局事件、初始化静态管理器。using UnityEditor; public class MyEditorInitializer { [InitializeOnLoadMethod] private static void OnLoad() { Debug.Log(“脚本重载完成执行初始化...”); // 例如在这里注册自定义的菜单项或监听事件 } }4. 自定义Attribute释放编辑器扩展的真正潜力内置Attribute虽好但总有满足不了需求的时候。这时自定义Attribute就派上用场了。它允许你定义自己的“标签”并编写相应的Property Drawer或编辑器脚本来响应这个标签实现完全定制化的Inspector行为。4.1 创建自定义Attribute类创建一个自定义Attribute非常简单只需继承自PropertyAttribute类。using UnityEngine; // 1. 定义特性类 public class TagSelectorAttribute : PropertyAttribute { // 你可以在这里添加一些配置参数 public bool UseDefaultTagField false; public TagSelectorAttribute(bool useDefaultTagField false) { UseDefaultTagField useDefaultTagField; } }这个TagSelectorAttribute就是一个我们自定义的“标签”。现在你可以把它用到字段上public class MyComponent : MonoBehaviour { [TagSelector] public string targetTag; }但此时Inspector里targetTag的显示和普通字符串输入框没有任何区别。因为我们只定义了“标签”还没告诉Unity这个标签该如何绘制。4.2 编写对应的PropertyDrawerPropertyDrawer是Unity编辑器用于绘制特定类型或特定Attribute字段的类。我们需要为TagSelectorAttribute创建一个对应的Drawer。在Editor文件夹下必须是Editor文件夹否则编译错误创建脚本。类继承自PropertyDrawer并使用[CustomPropertyDrawer(typeof(YourAttribute))]来关联。using UnityEditor; using UnityEngine; [CustomPropertyDrawer(typeof(TagSelectorAttribute))] public class TagSelectorPropertyDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { // 1. 检查字段类型是否正确 if (property.propertyType SerializedPropertyType.String) { // 2. 获取我们自定义Attribute的实例以读取其参数 TagSelectorAttribute tagSelector attribute as TagSelectorAttribute; // 3. 绘制标签 EditorGUI.LabelField(position, label); // 4. 计算弹出按钮的位置 Rect buttonRect new Rect(position.x EditorGUIUtility.labelWidth, position.y, position.width - EditorGUIUtility.labelWidth, position.height); // 5. 获取当前字段的值 string currentTag property.stringValue; if (string.IsNullOrEmpty(currentTag)) { currentTag “Untagged”; } // 6. 绘制一个下拉按钮点击后显示所有Tag的选择菜单 if (EditorGUI.DropdownButton(buttonRect, new GUIContent(currentTag), FocusType.Keyboard)) { // 生成所有Tag的菜单 GenericMenu menu new GenericMenu(); // 添加一个“无”选项 menu.AddItem(new GUIContent(“(None)”), string.IsNullOrEmpty(property.stringValue), () { property.stringValue “”; property.serializedObject.ApplyModifiedProperties(); }); menu.AddSeparator(“”); // 添加Unity中所有已定义的Tag foreach (string tag in UnityEditorInternal.InternalEditorUtility.tags) { menu.AddItem(new GUIContent(tag), tag currentTag, () { property.stringValue tag; property.serializedObject.ApplyModifiedProperties(); }); } menu.ShowAsContext(); // 显示菜单 } } else { // 如果字段不是字符串类型用默认方式绘制并报错 EditorGUI.LabelField(position, label.text, “TagSelector只能用于string类型字段。”); } } }代码解析与心得OnGUI是核心方法Unity会为每个带有[TagSelector]的字段调用它。SerializedProperty是对序列化字段的抽象通过它读写值可以确保Undo/Redo系统正常工作。使用EditorGUI.DropdownButton和GenericMenu是创建编辑器下拉菜单的经典模式。property.serializedObject.ApplyModifiedProperties()在修改值后必须调用以保存更改。重要所有对SerializedProperty的修改必须在OnGUI调用期间完成。GenericMenu的回调是异步的所以我们在回调内部再次修改了property并应用。现在当你使用[TagSelector]时Inspector中会显示一个漂亮的下拉按钮点击后可以列表中选择所有已定义的Tag完全避免了手动输入错误。4.3 更复杂的案例基于枚举的按钮组Attribute假设我们有一个战斗单位它有一个AttackType枚举近战、远程、魔法。我们希望在Inspector中用一排按钮而不是下拉菜单来选择因为更直观。首先定义Attribute和枚举// 自定义Attribute public class EnumButtonGroupAttribute : PropertyAttribute { } // 枚举 public enum AttackType { Melee, Ranged, Magic }然后用在字段上public class Unit : MonoBehaviour { [EnumButtonGroup] public AttackType primaryAttack; }接着是关键的PropertyDrawer[CustomPropertyDrawer(typeof(EnumButtonGroupAttribute))] public class EnumButtonGroupDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { if (property.propertyType SerializedPropertyType.Enum) { // 绘制标签 EditorGUI.LabelField(new Rect(position.x, position.y, EditorGUIUtility.labelWidth, position.height), label); // 计算按钮区域 Rect buttonArea new Rect(position.x EditorGUIUtility.labelWidth, position.y, position.width - EditorGUIUtility.labelWidth, position.height); float buttonWidth buttonArea.width / Enum.GetNames(property.enumType).Length; // 获取当前枚举值 int currentIndex property.enumValueIndex; string[] enumNames property.enumDisplayNames; // 绘制一排按钮 for (int i 0; i enumNames.Length; i) { Rect buttonRect new Rect(buttonArea.x i * buttonWidth, buttonArea.y, buttonWidth, buttonArea.height); // 使用Toggle样式的按钮当前选中的高亮 if (GUI.Toggle(buttonRect, currentIndex i, enumNames[i], EditorStyles.miniButton)) { if (currentIndex ! i) // 值发生变化 { property.enumValueIndex i; property.serializedObject.ApplyModifiedProperties(); } } } } else { EditorGUI.HelpBox(position, “EnumButtonGroup只能用于枚举类型”, MessageType.Error); } } }这个例子展示了如何完全接管一个字段的绘制逻辑用自定义的UI按钮组来替代默认的下拉框极大地提升了特定数据类型的编辑体验。5. 利用Attribute进行元编程与编辑器自动化Attribute的强大不止于Inspector美化。结合反射我们可以在编辑器模式下实现强大的自动化工具。5.1 自动创建配置菜单一个常见的需求是游戏中有很多可配置的参数如怪物属性、技能数据我们希望在编辑器里有一个集中的位置来编辑它们而不是散落在各个场景物体上。我们可以定义一个[CreateAssetMenu]特性这是内置的用于创建ScriptableObject但更进一步我们可以自定义一个Attribute自动为某个配置类生成编辑器窗口。// 1. 定义一个Attribute标记哪些类是需要编辑器窗口的配置 [AttributeUsage(AttributeTargets.Class)] // 这个Attribute只能用在类上 public class EditorConfigAttribute : Attribute { public string MenuPath { get; private set; } public EditorConfigAttribute(string menuPath) { MenuPath menuPath; } } // 2. 标记一个配置类 [EditorConfig(“游戏配置/怪物属性”)] [CreateAssetMenu(fileName “MonsterConfig”, menuName “Configs/Monster”)] public class MonsterConfig : ScriptableObject { public string monsterName; public int health; public int attack; // ... 其他属性 }然后我们可以写一个编辑器脚本在Unity启动时扫描所有带有[EditorConfig]的类并自动在Window菜单下生成对应的菜单项点击后打开一个定制化的编辑器窗口来编辑这些ScriptableObject资产。这需要用到[InitializeOnLoadMethod]和Reflection代码较长但思路是清晰的Attribute标记需求反射发现需求编辑器代码满足需求。5.2 自动化代码检查与验证在团队中保持代码规范很重要。我们可以用Attribute来标记一些“规则”然后通过Unity的Assembly Definition File的PostProcessBuild特性或者在CI/CD流程中运行一个脚本检查所有带有特定Attribute的字段或方法是否符合规范。例如我们规定所有单例管理器必须有一个Instance属性// 自定义一个“单例检查”Attribute public class SingletonCheckAttribute : Attribute { } [SingletonCheck] public class GameManager : MonoBehaviour { // 我们希望工具能自动检查这个类是否有 public static GameManager Instance { get; } 属性 // 如果没有就在编译时或CI时报错 }然后编写一个编辑器脚本使用反射查找所有带有[SingletonCheck]的类检查其是否包含符合单例模式的静态实例属性。这能将代码规范的检查从人工Review变为自动化流程。6. 常见问题、性能陷阱与最佳实践使用Attribute很强大但也要注意方式方法。6.1 常见问题排查自定义PropertyDrawer不生效检查脚本位置PropertyDrawer脚本必须放在任意名为Editor的文件夹下。检查特性关联[CustomPropertyDrawer(typeof(YourAttribute))]中的YourAttribute必须是特性的完整类型名。清理并重编译有时Unity的序列化缓存会出问题。尝试关闭Unity删除Library文件夹和obj文件夹然后重新打开项目。检查字段类型在OnGUI开始处检查property.propertyType确保你的Drawer处理了正确的类型。[SerializeField]的字段值在预制体或场景中丢失确保字段不是static的静态字段不会被序列化。确保字段类型是Unity支持序列化的类型。不支持的类型包括泛型类除非是ListT且T可序列化、字典需额外处理、接口、抽象类等。检查是否有同名的public字段Unity可能会混淆。优先使用[SerializeField] private模式。[ExecuteInEditMode]导致编辑器卡顿或异常确保在Update、OnGUI等方法中进行了运行模式检查if (Application.isPlaying) { ... }。避免在编辑模式下每帧执行重量级操作如寻路计算、物理模拟。可以使用[DidReloadScripts]或EditorApplication.update委托进行更精细的控制。6.2 性能考量与最佳实践反射的性能代价Unity编辑器本身大量使用反射来绘制Inspector这是不可避免的。但对于我们自定义的、在运行时通过反射读取Attribute的逻辑要格外小心。避免在游戏循环如Update中频繁使用反射。正确的做法是在初始化时Awake, Start或编辑器脚本中一次性收集并缓存这些信息。保持PropertyDrawer轻量OnGUI方法会在每一帧、每一个被绘制的字段上调用。确保其中的逻辑尽可能简单高效。避免在OnGUI中进行复杂的计算或分配大量临时对象如new GUIStyle()。ScriptableObject与Attribute结合对于游戏配置数据强烈推荐使用ScriptableObject配合自定义Attribute和Drawer。它将数据存储为资产文件与场景分离便于版本管理和复用。为工具链投资花时间编写好的自定义Attribute和编辑器工具初期有学习成本但长期来看能极大提升团队整体效率减少人为错误。这是资深开发者价值的重要体现。Attribute是Unity提供给开发者的一把瑞士军刀它连接了代码逻辑与编辑器表现是实现高效、可靠开发工作流的基础。从简单的[Header]、[Tooltip]改善用户体验到自定义PropertyDrawer打造专属编辑界面再到利用反射和Attribute实现编辑器自动化其深度和灵活性超乎很多人的想象。掌握它你不仅能写出更整洁、更安全的代码更能构建出强大、易用的开发工具让自己和团队从繁琐重复的劳动中解放出来专注于真正创造性的工作。

相关新闻

Token如何把你的手机账单改写成AI时代的电费单

Token如何把你的手机账单改写成AI时代的电费单

Token经济正在悄悄改写你的手机账单。一场跟你钱包直接相关的变革,已经开始。你今天可能已经消耗了几万个Token,但你大概率不知道。打开豆包问一句话,消耗几百个Token。让AI帮你写封邮件,消耗一两千个Token。用通义生成一张图&…

2026/10/17 6:40:25 阅读更多 →
不能再花时间在这个字帖上了,我很忙

不能再花时间在这个字帖上了,我很忙

就此打住 2.9.5版 以后有时间再陪。

2026/10/16 13:46:26 阅读更多 →
AI系统监控预警:机器学习在异常检测中的应用与实践

AI系统监控预警:机器学习在异常检测中的应用与实践

1. AI系统监控预警的挑战与机遇作为一名在电商平台摸爬滚打多年的技术老兵,我至今记得那个刻骨铭心的凌晨三点。刺耳的电话铃声把我从睡梦中惊醒,监控系统显示推荐服务的CPU使用率飙升至95%。我顶着黑眼圈紧急召集团队排查,结果发现——这不过…

2026/10/17 2:15:30 阅读更多 →

最新新闻

OPC UA实践:超级个体的工业数据通路与生态协作

OPC UA实践:超级个体的工业数据通路与生态协作

前阵子在一个科创园区的小型聚会上,我见到了七八位以前只在群里打过照面的技术人。有搞PLC调试的,有写Web前端的,也有做数据库运维的,但那天晚上的话题出奇一致:OPC实践。这群人身上有个很明显的标签——超级个体&…

2026/10/17 20:26:32 阅读更多 →
2026龙虾军备竞赛:QClaw、ArkClaw、KimiClaw谁更适合(详细对比长文)——用TaoToken统一Key实测三家Agent接入差异

2026龙虾军备竞赛:QClaw、ArkClaw、KimiClaw谁更适合(详细对比长文)——用TaoToken统一Key实测三家Agent接入差异

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 20:26:32 阅读更多 →
YOLO11-SEG结合SDI模块:笔记本LCD屏幕缺陷检测与分类实战

YOLO11-SEG结合SDI模块:笔记本LCD屏幕缺陷检测与分类实战

做笔记本LCD屏幕缺陷检测的人,应该都有过这种体会:产线上一个米粒大小的亮点,强光下明明存在,模型却视而不见;一片淡淡的Mura水波纹,人眼要来回换几个角度才能确认,模型直接漏成一片空白。我们这…

2026/10/17 20:26:32 阅读更多 →
IBM P740小机安装配置实战:从AIX系统到HACMP双机热备

IBM P740小机安装配置实战:从AIX系统到HACMP双机热备

简介:一套面向 IBM P740 小型机实施运维的 AIX 与 HACMP 安装配置手册,源自作者在省操作风险管理系统项目中的真实操作经验,适合系统集成、存储与高可用运维工程师在项目实施或故障排查时参考,对入门 AIX 的运维者也很有帮助。资源…

2026/10/17 20:26:32 阅读更多 →
零样本学习与少样本学习:原理、实战对比与工程选型指南

零样本学习与少样本学习:原理、实战对比与工程选型指南

先说一个我常拿来暖场的例子:给AI看一张它从没见过的动物照片,比如某种只存在于神话里的生物,或者一种刚被发现的深海鱼。零样本学习和少样本学习,都是为了让AI在这种“没见过”的情况下还能认出东西来。但它们的“猜法”完全不同…

2026/10/17 20:26:32 阅读更多 →
外包项目30天:从全栈开发到系统设计的实战蜕变

外包项目30天:从全栈开发到系统设计的实战蜕变

1. 外包项目干了三十天,技术反而突飞猛进先说个反常识的事情:我之前一直以为外包是技术的坟墓,进去就是复制粘贴、写业务代码、跟产品经理扯皮,干完一个项目啥也沉淀不下来。结果上个月临时接了一个外包项目,前后干了一…

2026/10/17 20:25:31 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →