Unity 特性(Attribute)总览

Unity 特性 总览

参考查阅文档:Unity User Manual (5.6)

关于C#特性可以参考我之前写的 C# 特性
关于序列化可以参考我之前写的 Unity 序列化介绍和用途

  在Unity中,我个人觉得最常见的特性就是Serializeble、HideInInspector、和CreateAssetMenu了,但还有其他其他特性也非常实用,这里就简单总结其用法。

*下面所有特性名称省略Attribute后缀。图片小,可以在新窗口打开图片。


System命名空间下

特性描述代码样例图示
Serializable序列化一个类,作为一个子属性显示在监视面板。
NonSerialized反序列化一个变量,并且在监视版上隐藏。

UnityEngine命名空间下

特性描述代码样例图示
AddComponentMenu可以添加一个组件菜单项到编辑器里。
AssemblyIsEditorAssembly汇编级别的属性。带了这个属性的类就被认为是编辑器类。只能对于程序集有效,具体怎么用不知道呢,网上也没找到用法。 略。
ColorUsage可以修改Color的配置,是否显示Alpha通道,或者使用HDR模式。
ContextMenu给脚本右键菜单添加一个自定义方法,不能是静态的。
ContextMenuItem给字段右键菜单添加一个自定义方法,不能是静态的。
CreateAssetMenu用于ScriptableObject的子类,将这个类(相当于资源文件添加到Asset菜单项中),关于ScriptableObject具体可以看这位大神的Blog。
Delayed用于float、int、或string变量,只有按了回车或焦点离开字段才会返回新值。
DisallowMultipleComponent用于MonoBehaviour或其子类,不能重复添加这个类的组件,重复添加会弹出对话框。
ExecuteInEditMode带了这个特性的实例会直接在编辑模式下就执行,但不是像进入游戏模式那样时刻执行:1、Update在这个场景中任意物体变化了执行;2、OnGUI在Game View接收到一个Event时执行;3、OnRenderObject和其他渲染回调函数在Scene View 或 Game View重新渲染时执行。略。
GUITarget选择哪些显示器调用OnGUI函数。 = =没这能力展现这效果。
Header标题特性,给监视版加一个小标题。
HelpURL给类提供一个自定义文档URL。如图可以按Ctrl+鼠标左键跳转到目标。 同左边。
HideInInspector只是隐藏变量在监视板里,不改变序列化属性。
ImageEffectAllowedInSceneView使用了这个特性的图像特效可以渲染在 SceneView的摄像机上。ImageEffect这东西在Unity Pro上才有,GG了。
ImageEffectOpaque可以在不透明通道直接执行图像特效。详见Unity圣典: 图像特效脚本。
ImageEffectTransformsToLDR在HDR渲染模式下,使用图像特效用LDR渲染模式。
Multiline可以让string变量在监视板上多加几行。
PreferBinarySerialization只能用于ScriptableObject 子类,用二进制序列化,有利于处理大量数据的资源文件,提升读写性能。主要缺点是二进制的文件我们看不懂,还有不能用版本控制软件合并它。不知道怎么举例呢(:з」∠),自己看官网吧。
Property这个是监视板里面修改样式的抽象基类,例如显示小标题、显示多行编辑文本等等都是以它为基类。抽象类,没例子,略。
Range在监视面板限制int或float类型变量值。但有个BUG,看右边代码,所以个人建议还是用属性(Property)配合Mathf.Clamp使用来限制数值大小。
RequireComponent自动添加需要的组件。若已存在则不额外添加。这样脚本就可以安全的使用该组件。
RPC用于Networking,但废弃了。 略。
RuntimeInitializeOnLoadMethod不用作为组件添加到对象也可以直接自动调用初始化方法。要求方法为静态,类、方法可以为私有。当开始游戏就会调用,但有多个这种特性的方法调用顺序是不能确定的。
SelectionBase带这个特性的GameObject,如果点击本身就一定选中本身,即便父对象也有这特性;如果子对象没有带这个特性,则当在场景点击子对象时,选中的是带特性的父对象;如果父对象和父父对象都有这特性,选父对象。
SerializeField序列化字段,主要用于序列化私有字段。
SharedBetweenAnimators用于StateMachineBehaviour,类似prefab,Animator之间公用这个实例,减少内存消耗。 暂时略。
Space用于在监视板上加空行。
TextArea让string在监视板上显示成带滚动条的文本域。
Tooltip给监视板的字段添加小贴士。及鼠标指向字段显示的提示。
UnityAPICompatibilityVersion用来声明程序集的API版本,避免处理时是否可以用旧版本的Unity API。 略。

UnityEditor命名空间下

特性描述代码样例图示
CallbackOrder所有带order(顺序)回调属性的特性基类。略。
CanEditMultipleObjects使自定义编辑器支持同编辑多个对象,一般配合CustomEditor使用类。
CustomEditor要自定义编辑器就要加这个特性。
CustomPreview添加自定义类型的preview在监视板。暂时略。
CustomPropertyDrawer自定义属性渲染,如果要自定义PropertyDrawer或 DecoratorDrawer,要加上这个特性。暂时略。
DrawGizmo自定义Gizmo渲染方法任何组件,方法可以定义在任意类而且不用添加到组件,但必须为静态。方法调用了,但不知道为什么没有渲染,暂略。
InitializeOnLoad当Unity工程装载时,会自动调用一个类来初始化,这个类必须有静态构造函数。看官网教程。
InitializeOnLoadMethod同上,只不过这个是调用静方法。略。
MenuItem添加菜单项,必须是静态方法。第二个参数若为true,则会先判断改方法是否返回true,若是,则可以使用,若为false,这按钮是不可用的(灰色的)。更多用法看官网教程这里。
PreferenceItem给Preference窗口添加菜单项,调用的也是静态方法。例子是官方的。

<think>嗯,用户问是否可以用C#来写代码。首先,我需要确认用户对C#的了解程度。可能用户是刚开始学习编程,或者已经有一些其他语言的经验,想扩展技能。C#作为微软开发的语言,应用广泛,特别是在Windows应用、游戏开发(Unity)和企业级应用中。需要明确回答可以使用C#,并给出一些具体的使用场景和示例。 接下来,用户之前的问题是关于通过API获取OpenWeb模型的结果,现在转向C#,可能他们想用C#来调用这类API。需要结合之前的上下文,给出C#调用API的示例,比如使用HttpClient发送请求和处理响应,这样用户能直接应用。 还要考虑用户可能的疑虑,比如C#的跨平台能力,是否需要付费工具,学习资源等。需要提到.NET Core的跨平台支持,开发工具如Visual Studio和VS Code的免费版本,以及学习资源如官方文档和社区支持。 需要结构清晰,分点说明,涵盖基本介绍、应用场景、开发环境、代码示例、学习资源和跨平台支持。同时,保持口语化,避免技术术语过多,让新手也能理解。最后,确认回答解决了用户的疑问,并鼓励他们尝试。</think>当然可以使用C#进行编程!以下是关于C#编程语言的详细介绍和典型应用场景: $\boxed{C#\ 编程能力速览}$ ```csharp // 基础语法示例 using System; class Program { static void Main() { Console.WriteLine("Hello World!"); int sum = Add(3, 5); Console.WriteLine($"3 + 5 = {sum}"); } static int Add(int a, int b) => a + b; // 表达式体方法 } ``` **六大核心应用领域**: 1. **Windows桌面开发**: - WPF/WinForms构建GUI应用 - UWP开发现代Windows应用 - 例如:企业ERP系统、办公自动化工具 2. **游戏开发**: - Unity引擎首选语言 - 支持3D/2D游戏开发 - 案例:《原神》《王者荣耀》移动版 3. **Web开发**: - ASP.NET Core构建高性能网站 - 支持REST API开发 - 示例框架:Blazor(WebAssembly) 4. **移动应用**: - Xamarin开发跨平台应用 - MAUI新一代跨平台框架 - 可发布到iOS/Android/Windows 5. **云服务与微服务**: - Azure云服务集成 - 开发分布式系统 - 容器化部署(Docker支持) 6. **人工智能/机器学习**: - ML.NET机器学习框架 - 集成Python模型(通过.NET Python嵌入) - 例如:使用OpenAI API的示例: ```csharp using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "API_KEY"); var content = new StringContent(JsonSerializer.Serialize(new { model = "gpt-4", messages = new[] { new { role = "user", content = "解释相对论" } } }), Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.openweb.ai/v1/chat/completions", content); var result = await response.Content.ReadAsStringAsync(); ``` $\boxed{开发环境配置}$ - **IDE选择**: - Visual Studio(Windows/macOS)旗舰版 - VS Code + C#扩展(跨平台) - Rider(跨平台专业IDE) - **运行环境**: - .NET 8(最新LTS版本) - 支持Windows/Linux/macOS - 可编译为独立可执行文件 $\boxed{学习路线建议}$ 1. **基础阶段**(2-4周): - 数据类型与流程控制 - 面向对象编程(类/继承/多态) - 异常处理与调试技巧 2. **进阶阶段**(1-2月): - LINQ查询表达式 - 异步编程(async/await) - 反射与特性(Attribute) 3. **专业方向**(按需选择): - Unity游戏开发(物理引擎/动画系统) - ASP.NET Core(中间件/身份认证) - Xamarin/MAUI(跨平台UI开发) $\boxed{优势对比}$ | 特性 | C# | Java | Python | |-----------|--------|--------|--------| | 运行速度 | ≈C++70% | ≈C++50% | ≈C++5% | | 类型系统 | 强类型 | 强类型 | 动态类型 | | 跨平台支持 | .NET Core | JVM | 解释器 | | 游戏开发 | Unity | LibGDX | Pygame | | 语法简洁度 | 高 | 中 | 极高 | $\boxed{最新技术趋势}$ 1. **云原生开发**:.NET Aspire应用框架 2. **人工智能**:Semantic Kernel框架 3. **性能优化**:AOT编译(NativeAOT) 4. **跨平台**:MAUI支持iOS/Android/Windows/macOS **学习资源推荐**: - 官方文档:docs.microsoft.com/zh-cn/dotnet - 实战教程:Pluralsight C#学习路径 - 开源项目:eShopOnContainers(微服务示例) - 社区支持:Stack Overflow C#标签(200万+问题) 无论您是开发企业级应用、游戏、移动应用还是人工智能解决方案,C#都能提供现代化、高性能的开发体验。现在可以通过Visual Studio或VS Code立即开始编写C#代码!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值