在 Unity3D 中,“设置”网格的边界会做什么或实现什么?

2024-01-08

在 Unity 代码库中,我看到了这个:

// the game object currently has no mesh attached
MeshFilter mFilter = gameObject.AddComponent<MeshFilter>();
gameObject.AddComponent<MeshRenderer>();
// no problem so far
mFilter.mesh = MakeASmallQuadMesh(0.1f);
// great stuff
mFilter.mesh.bounds = SomeSpecificBounds();
// what ?

函数“MakeASmallQuadMesh”具有用于制作网格的通常完全正常的代码,因此

Mesh mesh = new Mesh();
mesh.SetVertices(verts);
mesh.SetIndices(indices);
mesh.SetUVs(0, uvs);
mesh.RecalculateNormals();
mesh.RecalculateBounds();
return mesh;

那里不用担心。它可以制作一个 10 厘米宽的四边形。

但是那行代码呢

mFilter.mesh.bounds = SomeSpecificBounds();
  1. 我很惊讶地发现你可以设置 mesh.bounds,我以为它是只读的。

  2. “设定”界限有什么可能的“意义”?这就像:医生办公室里有一份书面测量结果,上面写着简身高 6 英尺。您将记录更改为 5'10"。当然,Jane 的身高根本没有改变。您只是奇怪地将记录弄错了。

  3. 难道是这样:网格的边界被各种(实际上是许多)Unity 系统使用。 (剔除等)该模式是否可以通过“强制”这样的边界(对于对象来说,边界现在“完全错误” - 它们只是您强制在那里的一些值)程序员想要的(对于某些原因)Unity的系统(比如剔除)使用那些强制的、无意义的(对于实际对象)值?

  4. 大胆猜测,也许有一种模式(我从未听说过),您“强制”对象 A 的边界与对象 B 相同 - 由于某种原因我无法猜测?

这里的模式/原因可能是什么?

我只是假设这是一个基本错误,但假设会致命。


我自己实际上对此很好奇,而且我碰巧有一个程序可以显式生成大量自定义网格,因此我决定测试一些东西。

我想确认的第一件事是边界实际上是自动设置的。初步检查表明情况确实如此:具体来说,每当您设置 mesh.vertices 属性时,都会自动重新计算网格的边界。这可能解释了为什么该属性是固定长度数组而不是列表。 (有趣的旁注:如果您尝试在分配顶点位置之前为网格分配辅助属性(例如 uv 坐标或法线),Unity 会在迅速爆炸之前轻轻地提醒您数组长度不匹配。所以不要这样做。)

至于这实际上会产生什么影响,我有一种预感:我将网格边界的范围设置为 0。立即,视口角落的网格被视觉剔除。这告诉我们一些事情:

  1. 明确设置界限确实有效果。
  2. Unity 实际上确实使用了自定义边界数据。
  3. Unity 使用网格边界来执行视锥体剔除。

根据Unity的手册,Bounds类的使用分为三种情况:Mesh.bounds、Renderer.bounds和Collider.bounds。在这三个属性中,Mesh.bounds 是唯一一个不是只读的属性。

至于为什么有人会这样做的问题want要显式设置网格边界,您并非不可能执行一些巧妙的剔除优化,例如通过窗口查看复杂的网格或类似的东西,但如果我不得不猜测,编写该代码的人不信任 Unity 设置网格边界准确地或明确地。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Unity3D 中,“设置”网格的边界会做什么或实现什么? 的相关文章

  • Unity 协程在后台停止

    我的问题如下 目前我在 Android iOS 游戏中运行了几个协程 但是当我将游戏发送到后台以便用手机尝试其他操作时 这些协程会停止 只有在我返回游戏后才恢复 有什么办法可以让协程在游戏在后台时继续运行吗 Android 将按设计暂停您的
  • ContinueWith() 内的函数不起作用

    public void Login string email emailInputField text string password passwordInputField text auth SignInWithEmailAndPassw
  • 什么是 AABB - 碰撞检测?

    嗨 我正在制作一个体素游戏Java在研究我需要学习的所有不同东西时 我注意到很多游戏都使用AABB用于碰撞检测 然后我记得看到AABB在 我的世界 中也有 但是当我用谷歌搜索什么时AABB也就是说 它只是提出了其他人的代码 或者历史书上的某
  • Unity3D 中 android 切换速度太慢

    我的游戏有 1000 多个帧 并且精灵的格式是 Crunch 因为这个项目中的精灵太多 当我想从Windows切换到Android时 我花了将近1天的时间来切换 实际上我不允许它完全切换 但切换到Windows并没有那么多 也许只有15分钟
  • 如何让一个不可见的透明按钮起作用?

    查看 Unity 论坛和问答网站中的一些答案 如何制作隐形按钮的答案不起作用 因为删除与按钮关联的图像会使其不起作用 如何解决这个问题并保持不可见属性 同时允许按钮实际工作 这是 Unity 的怪异之处之一 100 的现实世界项目都需要这个
  • 我在统一复制门时遇到问题

    我正在尝试统一复制我的门 但是 当我尝试这样做时 只有原来的门正在执行打开和关闭等动画 我有一个 UI 按钮 它使用 OnClick 函数来操作门 当我输入触发器时它会弹出 这是带有OnClick功能的按钮UI https i stack
  • 为什么更新功能在Unity中的UnityARWorldMap场景的UnityARHitTestExample中不起作用?

    我正在开发 UnityARWorldMap 以创建统一的持久性 因此 我将模型放置在现实世界中 保存它们 然后加载它们 当我单击 WorldMapManager cs 中的 Load 时 UnityARhitTestExample 中的更新
  • Unity InputField OnValueChanged事件显示InputField.text少一个字符

    我有一个InputField我用它作为搜索栏 我无法自动搜索OnValueChanged因为最初 文本字段将是 现在如果我输入任何字符a the inputField text还是 代替a因此 在添加下一个字符之前不会进行搜索 有没有办法在
  • 获取单位圆上 (0, 0) 处的随机点

    我正在使用 Unity 和 C 并且想编写一个函数 以 0 0 单位圆上随机点的 Vector2 形式返回 x 和 y 坐标 好像有一个功能UnityEngine Random insideUnitCircle 得到单位圆内的随机点 有Un
  • 使用 GitHub 时防止将大文本文件添加到提交

    我们想要防止 非常大的文本文件 每个文件 gt 50MB 被提交到git代替git lfs 因为它们夸大了 git 历史 问题是 其中 99 大小差异的原因 这些是 YAML 文件 它们支持通过 Base64 编码进行二进制序列化 我们无法
  • 创建对话框/弹出窗口

    有这样的代码 bool b EditorUtility DisplayDialog Test Reset or continue Reset Continue if b ResetGame 但它仅在编辑器中有效 在游戏中无效 如何将 Edi
  • Hololens-无法连接到设备

    我意识到这个问题在其他地方被问过 但答案似乎直接针对 Hololens 和 PC 之间的配对过程 这是我的问题的一部分 我在 Unity 中制作了一个应用程序并导出到 Visual Studio 当我尝试在 Hololens 上运行它时 出
  • Unity Transform.LookAt 仅在一个轴上

    我一直在开发一款游戏 进展非常顺利 从这里得到了一些帮助 我再次需要它 所以我正在制作一个 2D 自上而下的射击游戏 我需要我的敌人看着玩家 显然敌人会在所有轴上旋转 因此是无敌的 或者看起来很奇怪 那么 如何让它只在Z轴上旋转呢 另外 如
  • 在 Unity 中使用 MRTK 和 Vuforia - 选择什么相机?

    我是 AR 新手 最近几天在 Unity 上设置了 MRTK 和 Vuforia 两者独立运行良好 现在我想在一个项目中使用两者 但问题是两者都有相机 MRTK 有自己的 MixedRealityCamera 和 Vuforia ARCam
  • foreach 循环为 Unity 中的按钮赋值时出现问题

    我正在尝试在 Unity 中为我的游戏制作一个类似 Candy Crush 的地图 我正在尝试将所有按钮收集到一个数组中 然后设置其 onclick 属性 这样当我单击它们时 我就可以达到我想要的级别 我正在使用 Foreach 循环来实现
  • 在我的 Unity 应用程序中检测来电

    我试图让我的游戏在接到电话时暂停 我想知道我使用的任何函数是否可以做到这一点 我在我的源代码中使用了它们 但它们都不起作用 void OnApplicationPause bool paused if paused true if isPa
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 在浏览器中以低延迟捕获声音输入

    是否可以在浏览器中捕获低延迟的声音输入 主要用于录制吉他 我知道这也取决于硬件 但我们假设硬件足够好 我尝试使用 Web Audio API 但它的延迟有点糟糕 是否还有其他技术可以在浏览器中提供高性能的声音输入捕获 可以使用Unity3D
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • 使用 Unity3D 按钮执行 xcode 函数?

    是否可以在 unity 中制作一个按钮来执行 Xcode 中的功能 我正在尝试执行来自 unity3d 项目的推送消息 请帮忙 因为这让我发疯 提前致谢 是的 您可以调用具有 C 接口的本机 Objective C 代码 您甚至可以在 Un

随机推荐