
Unity
文章平均质量分 80
RuntimeCube
这个作者很懒,什么都没留下…
展开
-
[Memory] 内存掌握:Unity 和 .NET 垃圾回收的比较
大家好,我叫 Dmitrii Ivashchenko,是 MY.GAMES 的软件工程师。在本文中,我们将讨论 Unity 和 .NET 中垃圾收集之间的差异。C# 编程语言的主要优点之一是自动内存管理。它消除了开发人员手动释放未使用对象的内存的需要,并显着缩短了开发时间。然而,这也可能导致大量与内存泄漏和意外应用程序崩溃相关的问题。翻译 2024-04-16 13:53:50 · 262 阅读 · 0 评论 -
[Testing] Unity性能测试
Unity 性能测试,单元测试,基准测试翻译 2024-04-15 13:47:21 · 405 阅读 · 0 评论 -
[Unity] 为什么空合并运算符 (??, ??=) 在 Unity 中是邪恶的?
我最近在 C# 中遇到了空合并运算符。如果您不熟悉它们,以下是它们的工作原理。??如果不为空,则返回左侧,否则返回右侧。如果 myList 为 null,此行会将 processList 设置为新列表。??= 只是??的赋值变体。仅当 myList 为空时,此行才会将其设置为新列表。翻译 2024-04-02 22:21:38 · 171 阅读 · 0 评论 -
[c#] Unity 如何禁用 GC
例如,如果我们在加载一个游戏关卡后开始使用 100 MB 的内存,并且我们知道在该关卡期间不会分配超过 100 MB 的内存,那么我们在任何可以使用的设备上都没有问题。但实际上,这些函数是 Unity 使用的现成 GC 的一部分,文件头中的最新日期是 2001 年,因此这种技术很可能会继续有效,直到 Unity 最终取代 GC。如果它不为零,则 GC 被禁用。对于游戏的帧速率关键部分禁用 GC 并在之后重新启用它(例如在加载屏幕上)可能是一个很大的好处,对于某些游戏来说是值得的,但应该非常小心地使用。翻译 2024-02-17 22:20:06 · 481 阅读 · 0 评论 -
[C#] 5 种常见的集合误用
List 和 Dictionary 等集合类型是 C# 中的基本工具。可悲的是,我不断在一个又一个的代码库中看到它们同样的滥用情况。今天我们将看看最重要的 5 个问题,并学习如何轻松避免它们!翻译 2024-02-17 20:52:12 · 141 阅读 · 0 评论 -
[Shader] Unity Shader 内在函数
在我们开发函数的过程中,我们会遇到一些导致数字小于“0”或大于“1”的操作,例如,在计算网格法线与光照方向的点积时,我们可以得到一个范围 -1.0f 和 1.0f 之间。为了深入理解这个概念,我们将执行以下操作:我们将创建一个新的着色器类型“Unlit Shader”,我们将其称为 USB_function_CEIL,并且我们将首先在纹理 _MainTex 中声明新的 UV 坐标 片段着色器阶段。我们将开始添加一个名为“Size”的属性,稍后我们将使用它来增加或减少圆的大小。因此,它等于“零”。翻译 2024-02-17 20:01:21 · 335 阅读 · 0 评论 -
[Shader] Unity CG/HLSL [2]
根据其术语,材质是表面渲染方式的定义,包括对纹理、平铺、偏移、颜色等的引用。材质的选项取决于所使用的着色器。我们如何将上述定义转化为实际水平?让我们将材质视为“着色器的容器”,这意味着我们拥有执行表面计算(着色器)的程序和能够读取这些计算的容器(材质)。单独的材料无法执行任何操作。如果它没有着色器,它将不知道应该如何渲染它,同样,如果不通过材质,着色器就无法应用于对象,因此,这个比喻之间材质和着色器是一个"预览的图形数学计算"。翻译 2024-02-14 15:57:44 · 297 阅读 · 0 评论 -
[Shader] Unity Cg / HLSL [1]
在我们的着色器中,我们至少可以找到三个默认编译指示。这些是处理器指令,包含在 Cg 或 HLSL 中。它们的功能是帮助我们的着色器和某些原本无法识别的函数。#pragma vertex vert 允许名为 vert 的顶点着色器阶段作为顶点着色器编译到 GPU。这是至关重要的,因为如果没有这行代码,GPU 将无法将“vert”函数识别为顶点着色器阶段,因此,我们将无法使用对象中的信息,也无法将信息传递到片段着色器阶段 投影到屏幕上。翻译 2024-02-14 13:25:29 · 183 阅读 · 0 评论 -
[Shader] Unity CGPROGRAM / ENDCG
我们上面回顾的所有部分都是用 ShaderLab 声明性语言编写的,我们在图形编程语言中的真正挑战从 CGPROGRAM 或 HLSLPROGRAM 声明开始。默认情况下,我们可以看到Unity在我们的程序中包含了CG这个词。对此,官方文档(2021.2版本)中表示:Unity最初使用Cg语言,因此有一些单词和.cginc扩展名,但该软件不再使用这种语言,但是,这些单词仍然包含在内,出于兼容性原因,代码仍在编译中。翻译 2024-02-14 10:27:10 · 282 阅读 · 0 评论 -
[Shader] Unity SubShader.
着色器的第二个组件是 SubShader。每个shader都由至少一个SubShader组成,以保证程序的完美加载。当有多个 SubShader 时,Unity 会对每个 SubShader 进行处理,并根据硬件特性从列表中的第一个到最后一个选择最合适的。为了理解这一点,我们假设着色器将在支持 Metal graph API (iOS) 的硬件上运行。为此,Unity 将运行第一个支持metal graph的 SubShader 并运行它。翻译 2024-02-13 22:15:50 · 269 阅读 · 0 评论 -
[Shader] Unity shader Inspector 属性绘制器。
在shader_feature中添加的变体是“常量”,因此它们以大写字母书写,这意味着,例如,如果我们的属性被称为_Change,那么在着色器变体中它应该被添加为“_CHANGE”。在前面的示例中,我们在括号中添加 KeywordEnum 绘制器,然后列出其状态,其中第一个对应于默认状态 (StateOff)。正如我们所看到的,我们将 Toggle 添加到括号中,然后声明属性,然后声明显示名称,后跟 Float 数据类型,最后将属性初始化为“Off”,因为我们在其默认值中添加了零。翻译 2024-02-12 22:00:27 · 203 阅读 · 0 评论 -
[Shader] 什么是着色器?
在开始定义代码之前,我们必须考虑到 Unity 中存在三种与着色器开发相关的编程语言,它们是 HLSL(高级着色器语言 - Microsoft)、Cg(C for Graphics - NVIDIA),它们仍然可以编译到着色器中,但在当前版本的软件和 ShaderLab(声明性语言 - Unity)中不再使用。我们将开始在内置 RP 中使用 Cg 和 ShaderLab 语言进行冒险,然后在Universal RP 中引入 HLSL。Cg 是一种高级编程语言,旨在在大多数 GPU 上进行编译。翻译 2024-02-12 21:06:29 · 1862 阅读 · 0 评论 -
[Shader] Unity 渲染管线架构
一般来说,在 High Definition RP 和 Universal RP 中,着色器都是在 Shader Graph 中创建的,Shader Graph 是一个包,其中包含一个接口,允许我们通过节点创建着色器,该节点有积极的一面和消极的一面。这个过程可以看作是场景中的对象和屏幕上的像素之间的同步步骤。同样,定向光会影响场景中找到的所有球体,因此,它将为每个球体生成额外的绘制调用,这主要是因为着色器中已包含第二个pass来计算阴影投影,因此, 四个球体加上单向光将总共生成八次绘制调用。翻译 2024-02-12 20:30:40 · 1110 阅读 · 0 评论 -
[Unity Sentis]使用 Unity 和 Hugging Face 创建引人入胜的 AI 驱动游戏
Say Something 是一款休闲游戏,玩家需要根据人工智能的要求输入一些有意义/好听/有趣的内容。目标是获得最高分。是一个平台,用户可以上传或下载超过 35 种不同任务的预训练 AI 模型,从 Llama v2 的文本生成、Whisper 的语音到文本、Coqui 的文本到语音(AI 语音)到 3D生成。对于这些模型中的大多数,Hugging Face 都提供了一个名为推理 API 的免费 API,让你可以通过简单的 API 调用来使用它们。翻译 2024-02-11 16:32:15 · 522 阅读 · 0 评论 -
[Unity Sentis] 使用 Hugging Face Transformers 和 Unity Sentis 创建 AI 机器人 NPC
句子相似性是一项任务,它能够在给定源句和句子的情况下,计算出句子与源句的相似程度。例如,如果我们的源句(播放器顺序)是 “嘿,给我拿红盒子”,那么它就非常接近 "拿红盒子 "这个句子。句子相似性模型将输入文本 "Hello "转换为捕捉语义信息的向量(嵌入)。我们称这一步为嵌入。然后,我们使用余弦相似度来计算它们的接近(相似)程度。细节我就不多说了,但由于我们的句子相似性模型会产生向量。翻译 2024-02-08 19:56:40 · 938 阅读 · 1 评论 -
[Shader] 我对着色器的看法:几何着色器
在进入代码之前,让我们先来了解一下什么是几何着色器。为了帮助我说明几何着色器的作用,下面是一个简化的实时渲染管道视图:这篇文章介绍的是 Vulkan 中的流水线,但其概念与其他流水线非常相似。黄色方框是流水线的实际阶段,我们可以用着色器进行编程/覆盖。值得注意的是,"Tessellation "阶段实际上分为 “Hull Shader 阶段”、"Tessellator 阶段 "和 “Domain Shader 阶段”。翻译 2024-02-05 20:58:02 · 482 阅读 · 0 评论 -
[Unity Sentis] Sentis 中的 Tensor 基本原理
在 Sentis 中,您可以在称为张量的多维数组中输入和输出数据。Sentis 中的张量的工作方式与 TensorFlow、PyTorch 和其他机器学习框架中的张量类似。Sentis 中的张量最多可以有 8 个维度。如果张量的维度为零,则该张量包含单个值,称为标量。翻译 2024-02-03 18:51:52 · 320 阅读 · 0 评论 -
[Unity Sentis] 了解 Sentis 中的模型
英文原文:https://docs.unity3d.com/Packages/com.unity.sentis@1.3/manual/models-concept.html。翻译 2024-02-03 14:45:25 · 324 阅读 · 0 评论 -
[Unity Sentis] Unity Sentis 详细步骤工作流程
Unity Sentis 详细步骤工作流程原创 2024-02-03 14:43:30 · 2377 阅读 · 0 评论 -
[Unity Sentis] 了解 Sentis 工作流程
要在 Unity 中使用 Sentis 运行神经网络翻译 2024-02-03 13:26:52 · 373 阅读 · 0 评论 -
[Unity Sentis] 使用 Unity Sentis 来利用人工智能模型创建新一代功能
我们创建 Unity Sentis 是为了让开发人员能够将 AI 模型引入游戏和应用程序中。现在处于预发布的公开测试版中,Sentis 允许在所有类型的项目中实现复杂的功能,例如对象识别、语音识别和智能 NPC。翻译 2024-02-03 10:46:45 · 851 阅读 · 0 评论 -
[Unity workflows] Unity Addressables 和 SpriteAtlas:如何有效地使用 Sprites
您在游戏中使用 Unity UI 还是 Sprite Renderer?您可能听说过 Unity SpriteAtlas 功能……SpriteAtlas 可帮助您减少在 Unity 中渲染 UI 或 sprites 时的游戏绘制调用。然而,sprites 图集是难以驯服的野兽,可以咬掉你的手。翻译 2022-12-19 23:17:05 · 1706 阅读 · 0 评论 -
[Unity workflows] 您的 Unity Asset Bundle 中隐藏着什么?
会为您完成这一切,这让您很容易信任该系统。但是,您知道 Unity 可以悄无声息地将您的资产复制到不同的包中吗?这对你来说意味着:更多的 RAM、更多的错误和更多的钱浪费在 CDN 上。所以问题是,您知道您的资产包中真正隐藏着什么吗?而且……您能信任 Unity 吗?让我们找出答案。翻译 2022-12-19 22:49:54 · 242 阅读 · 0 评论 -
[Unity workflows] Unity:如何在 Disabled 的游戏对象上节省内存
我的一个学生 Ryan 上周问我他如何才能挽救 Unity 由于 Disabled 游戏对象而从他的游戏中窃取的内存。幸运的是,他使用的是 Addressables,所以我准备了一个实验……准备好了吗?使用 Unity,您可能出于多种原因想要停用场景中的整个 GameObject 层次结构……在任何情况下,停用游戏对象都会有效地禁用调用行为。这很好,因为。翻译 2022-12-19 22:24:28 · 350 阅读 · 0 评论 -
[Unity workflows] Unity Addressables:压缩方式的基准测试
在 Unity 中使用资产的默认方式是使用直接引用您的内容。直接引用会自动为您将所有资产加载到内存中。这很舒服,但通常会导致内存消耗激增。而且,我的朋友,我们想要战斗。Unity Addressables 是游戏开发者急需使用间接引用的一项技术。间接引用让您决定何时将内容加载到内存中和从内存中卸载。这使您可以极大地控制内存。当我们使用 Addressables 时,我们的目标是优化内存使用。但这还不是全部。优化内存有许多次要好处,例如减少加载时间、减少崩溃和更好的用户评论,即更多现金到您的口袋。翻译 2022-12-18 21:56:52 · 604 阅读 · 0 评论 -
[Unity workflows] Unity Addressables 对象池
如果您打算跳入 Unity Addressables 对象池,请小心。您最好确保对象池不为空。在之前的帖子中,我向您展示了如何在游戏中无限制地加载内容。嗯,当然有限制,但如果你在实施资产内容管理系统方面做得很好,你就不太可能达到这些限制。如果你听从我的建议,我很确定你会做对的。但到目前为止,我可以说我们遗漏了一个重要的拼图。翻译 2022-12-18 19:11:13 · 442 阅读 · 0 评论 -
[Unity workflows] Unity Addressables 迁移:耳边的音乐(第 1 部分)
您已经看到了 Addressables 的潜在好处,并且想在您的游戏中试一试。但是有很多可能性!从哪里开始 Unity Addressables 迁移?这里有一个选项供您选择:音乐。再来一首歌……视频游戏音乐家的那些著名的遗言说服程序员将最后的音轨添加到即将发布的游戏中。可能会出什么问题?我会告诉你:最后一首歌只是在即将溢出的玻璃杯上加了一滴水。实际上,它溢出了。翻译 2022-12-18 17:15:20 · 321 阅读 · 0 评论 -
[Unity workflows] Unity Addressables 托管:Amazon S3 4 步
玩家想玩,他们不想等待。帮助他们购买您的游戏:使用 Unity Addressables Hosting 减少游戏的下载大小。一年后?为他们提供基于的 DLC,猜猜是什么?想象一下周五下午你的潜在玩家。您的玩家刚刚度过了辛苦的一周,工作时间很长。他们的妻子或丈夫和孩子们一起去他们家的乡间别墅度周末。是回家、点披萨并带着钱包浏览 Steam 的最佳时机。翻译 2022-12-17 17:09:16 · 396 阅读 · 0 评论 -
[Unity workflows] Unity Addressables:你的测验分析
为更快的迭代创建子场景可能是您的游戏的可能性,但根据我的经验,它们往往无人维护。随着时间的推移,它们会损坏,人们可能会花更多的时间来修复它们,而不是你当时最终获得的收益。仅当您在项目中没有看到这些问题时,才考虑实施子场景。翻译 2022-12-17 15:37:12 · 230 阅读 · 0 评论 -
[Unity workflows] Unity Addressables 的优势:保存游戏的 3 种方法
如果您一直在关注我,您可能知道我对可以在您的游戏中获得的 Unity Addressables Benefits 感兴趣。这是有原因的。Unity Addressables 是一个功能强大的 Unity 软件包,它升级了您和我一直以来应对游戏开发中一些最重要挑战的方式:高效、轻松的内容管理。翻译 2022-12-17 13:26:04 · 988 阅读 · 0 评论 -
[Shader] Shader Cookbook Shader Graph – 3D[9](完结)
在前一章中,我们介绍了Shader Graph及其在2D游戏中的一些可能的用例。在本章中,我们将探索3D项目中 Shader Graph 的其他用途,并利用高清渲染管道(简称HDRP)HDRP只针对高端硬件,如pc和游戏机,如Xbox One/S和PlayStation 4/5。它适用于高保真度的游戏、图像演示、建筑渲染器以及其他需要最佳图像的东西。这并不是说HDRP是高性能的。在做复杂的图形处理时,它比标准渲染管道快得多;但如果你想要的是一款更简单的游戏,这可能就有点过头了。翻译 2022-11-20 21:51:08 · 371 阅读 · 0 评论 -
[Shader] Shader Cookbook 高级着色技术[9]
本章将介绍一些你可以在游戏中使用的高级着色器技术。你应该记住,你在游戏中看到的许多最引人注目的效果都是通过测试着色器的极限而产生的。这本书为你提供了修改和创建着色器的技术基础,但强烈鼓励你尽可能多地玩和实验它们。制作一款优秀的游戏并不是为了追求真实感;你不应该带着复制现实的意图接近着色器,因为这是不可能发生的。相反地,你应该尝试着将着色器作为一种工具去创造出真正独特的游戏。有了本章的知识,你将能够创建你想要的材质。翻译 2022-11-20 18:42:55 · 462 阅读 · 0 评论 -
[Shader] Shader Cookbook 使用Unity渲染纹理的屏幕效果[8]
学习编写着色器最令人印象深刻的方面之一是创建自己的屏幕效果的过程,也称为后期效果。通过这些屏幕效果,我们可以创建具有Bloom、动态模糊、高动态范围(HDR)效果等令人惊叹的实时图像。今天市场上的大多数现代游戏都大量使用了这些屏幕效果,如景深效果,Bloom效果,甚至颜色校正效果。在第一章,后处理堆栈中,我们讨论了如何使用Unity内置的后处理堆栈,但在本章中,你将学习如何自己构建脚本系统。该系统将给你控制创建多种屏幕效果。翻译 2022-11-16 23:26:26 · 401 阅读 · 0 评论 -
[Shader] Shader Cookbook 移动设备着色器优化调整[7]
在接下来的两章中,我们将看看如何为不同的平台编写性能友好的着色器。我们不会特别讨论一个平台,但我们将分解着色器的元素,我们可以调整,使它们更适合移动和高效的任何平台。这些技术包括从理解Unity提供的内置变量来减少着色器内存的开销,到学习如何使我们的着色器代码更高效。学习优化着色器的艺术将出现在你所从事的任何游戏项目中。在任何生产环境中,总会有一个点需要优化着色器,或者可能它需要使用更少的纹理,但产生相同的效果。翻译 2022-11-16 08:32:38 · 761 阅读 · 0 评论 -
[Shader] Shader Cookbook 片段着色器和Grab通道[6]
到目前为止,我们一直依赖于表面着色器。它们被设计用来简化着色器编码的工作方式,为艺术家提供有意义的工具。如果我们想进一步了解着色器的知识,我们需要冒险进入顶点着色器和片段着色器的领域。与表面着色器相比,顶点着色器和片段着色器几乎没有关于物理属性的信息,这些物理属性决定了光如何反射到表面上。他们缺乏表达能力,却用力量来弥补。顶点和片段着色器不受物理约束的限制,非常适合非真实感效果。本章将关注一种叫做Grab通道的技术,它允许这些着色器模拟变形。翻译 2022-11-14 21:31:04 · 264 阅读 · 0 评论 -
[Shader] Shader Cookbook 顶点函数[5]
shader这个术语源于一个事实,即C for Graphics (Cg)主要用于在三维(3D)模型上模拟真实的光照条件(阴影)。尽管如此,着色器现在远不止于此。它们不仅可以定义物体的外观,还可以完全重新定义它们的形状。如果你想学习如何通过着色器操作3D对象的几何形状,这一章是适合你的。在第二章,创建你的第一个着色器中,我们解释了3D模型不仅仅是三角形的集合。每个顶点都可以包含正确渲染模型本身所必需的数据。本章将探讨如何访问这些信息,以便在着色器中使用它。翻译 2022-11-13 21:17:17 · 318 阅读 · 0 评论 -
[Shader] Shader Cookbook 基于物理的渲染[4]
在Unity 5中引入的基于物理的渲染(PBR)是一种shading模型,它试图以一种与现实世界中光线工作方式相似的方式渲染图形。我们在第5章“理解照明模型”中遇到的所有照明模型都是对光的行为的非常原始的描述。创造它们最重要的方面是效率。实时阴影是昂贵的,像Lambertian或Blinn-Phong这样的技术是计算成本和真实感之间的妥协。拥有更强大的GPU让我们能够编写更复杂的照明模型和渲染引擎来模拟光的行为。简而言之,这就是PBR背后的哲学。翻译 2022-11-13 10:58:31 · 300 阅读 · 0 评论 -
[Shader] Shader Cookbook 理解光照模型[3]
如果你熟悉Unity 4,你可能知道它提供的默认着色器是基于一个名为Lambertian refectance的照明模型。这个食谱将向你展示如何用自定义照明模型创建一个着色器。此外,我们将解释所涉及的数学和实现。下面的图表显示了同样的几何渲染标准着色器(在右边)和一个扩散兰伯特(在左边):基于Lambertian reftance的着色器被分类为非真实感;现实世界中没有一个物体是这样的。然而,Lambert着色器仍然经常用于低多边形游戏中,因为它们在复杂几何图形的表面之间产生了清晰的对比。翻译 2022-11-12 21:29:26 · 325 阅读 · 0 评论 -
[Shader] Shader Cookbook 使用表面着色器[2]
在本章中,我们将比上一章更详细地探讨表面着色器的主题。我们将开始建立一个非常简单的哑光材料和全息投影结束。表面着色器在第二章“创建你的第一个着色器”中介绍过,它是可以在Unity中使用的着色器类型之一。本章将向您展示这些是什么以及它们是如何工作的。下图大致总结了表面着色器的工作原理。自定义照明模型将在第五章“理解照明模型”中探讨,而第七章“顶点函数”将关注顶点修饰器。翻译 2022-11-12 16:45:52 · 185 阅读 · 0 评论 -
[Shader] Shader Cookbook 创建你的第一个着色器[1]
本章将涵盖一些在今天的游戏开发阴影管道中发现的更常见的扩散技术。让我们想象一个立方体,它被均匀地涂成白色,在一个有定向光的3D环境中。即使在每张脸上使用的颜色是相同的,它们也会有不同的白色深浅,这取决于光线从哪个方向来,以及我们从哪个角度看它。这种额外的真实感是通过使用着色器在3D图形中实现的,着色器是一种特殊的程序,主要用于模拟光的工作原理。一个木制立方体和一个金属立方体可能共享相同的3D模型,但使它们看起来不同的是它们使用的着色器。本章将向你介绍如何在Unity中编写着色器。翻译 2022-11-12 14:06:56 · 609 阅读 · 0 评论