如果这些游戏对象与 UI 无关,是不是可以将 Canvas 对象 (rectTransform) 与常规游戏对象 (transform) 混合? [关闭]

Posted

技术标签:

【中文标题】如果这些游戏对象与 UI 无关,是不是可以将 Canvas 对象 (rectTransform) 与常规游戏对象 (transform) 混合? [关闭]【英文标题】:is it okay to mix Canvas objects (rectTransform) with regular game objects (transform), if those game objects have nothing to do with UI? [closed]如果这些游戏对象与 UI 无关,是否可以将 Canvas 对象 (rectTransform) 与常规游戏对象 (transform) 混合? [关闭] 【发布时间】:2021-09-07 09:46:11 【问题描述】:

我最终遇到了这样一种情况:我的游戏战斗系统有一个父 Canvas 元素(用于显示健康文本等),并且混合了 UI 内容和可控制的游戏对象,因为它是子项。所以有些对象有transform,有些有rectTransform

这是我的层次结构的一个小样本:

BattleCanvas 是一个画布对象 (rectTransform) BattleEnemyObjectBattlePlayerObject 是常规游戏对象 (transform) BattleObjects(所有实例化对象的容器)使用rectTransform, 但它的子 SnakePlayer 是一个普通的游戏对象 (transform)

我开始意识到这是多么混乱,但到目前为止一切似乎都很好。所以我的问题是,如果这些游戏对象与 UI 无关,可以将 Canvas 内容 (rectTransform) 与常规游戏对象内容 (transform) 混合使用吗?

我想我对transformrectTransform 之间的区别有点缺乏了解。任何建议在这里表示赞赏!

【问题讨论】:

【参考方案1】:

是的,绝对没问题。 RectTransform 继承自 Transform。所以所有的 RectTransform 都具有普通变换的所有功能。

许多人将画布的渲染模式更改为World Space,然后将RectTransform 视为正常变换以将其在世界中隔开。有一些有趣的效果,如下面的效果,需要将RectTransform 用作转换。

您可以拥有多个具有多种渲染模式的画布,以获得一些非常有趣的效果。

【讨论】:

以上是关于如果这些游戏对象与 UI 无关,是不是可以将 Canvas 对象 (rectTransform) 与常规游戏对象 (transform) 混合? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我不能在 Unity 中的游戏对象前面有 UI 元素

如何使用Unions更有效地进行LINQ查询

当每个线程可以处理与其他线程中的数据无关的数据时,是不是可以在线程之间重用一个共享托管对象上下文?

如何将 UI 与 C# 中的渲染分开?

实现与帧率无关的加速

如何使用 Unity ARKit 激活场景中的对象而不是预制件