Unity3d android 2d sprite放置

时间:2017-11-06 14:54:12

标签: android unity3d sprite

请看一下这张照片 final game export 这是从photoshop出口的游戏的最终外观 我用红色标记标记了ui精灵,用蓝色标记标记了游戏精灵 我的问题是我应该如何在unity3d 2d游戏开发中正确使用这些精灵。

这是我能想到的方式:

  1. 在画布中使用红色精灵作为布局组中的Image组件(垂直或水平,因此我可以将它们放在角落中,它将适用于每个分辨率)
  2. 在画布外使用蓝色精灵,显然是通过Sprite Renderer组件
  3. 通过Sprite Renderer组件在画布中使用蓝色精灵,并将画布渲染模式设置为Screen Space - Camera
  4. 通过Image组件
  5. 在画布中使用蓝色精灵

    这些方式都可能是错的,但这些都是我现在能想到的 我对你的所有建议持开放态度 我的统一版本是2017.2.0f,我希望游戏适用于所有分辨率。

4 个答案:

答案 0 :(得分:7)

我会将Image / Canvas系统用于所有UI元素(红色精灵)。这样,您可以利用CanvasScaler组件和锚定来使UI分辨率独立。 (另见HOWTO-UIMultiResolution

游戏玩法精灵(蓝色)只是世界空间中的SpriteRenderer个组件,带有常规的正交相机。这比在UI画布上执行所有操作具有更好的性能。此外,游戏代码将(从经验)在世界空间中比在处理画布位置时更容易,因为UI布局系统可能会添加额外的转换/复杂性。

最后,你可能想要调整蓝色精灵'通过相机的正交尺寸属性来确定尺寸。对此没有一个通用的解决方案,因此考虑到从Screen.widthScreen.height返回的实际屏幕分辨率以及实际方面(横向与纵向),您将不得不进行权衡。通常,我建议查看CanvasScaler源代码,以查看如何进行不同缩放的示例。 (参见Unity Technologies UI source on Bitbucket,尤其是第134行的方法HandleScaleWithScreenSize)。

答案 1 :(得分:3)

添加Xarbrough's great answer

  • 不要将SpriteRenderer放入画布中。请改用Image组件,您可以更好地控制图像的实际大小/顺序。
  • 如果您只处理Button / ScrollView等组件的默认UI事件,请使用Screen Space - Overlay画布。这样您就不必将相机绑定到每个画布,并且可以轻松地将UI分离到另一个场景中,然后根据需要将Load Scene Additive它们放入主场景中。这样可以减少混乱和更有组织的场景(想象一下,必须在一个场景中放置选项,商店,库存,成就等画布。)
  • 如果您需要在UI上处理复杂事件(拖动' n' drop,转换鼠标悬停,大多数事情需要您扩展EventTrigger类),您将需要使用{{1}因为在这种模式下使用鼠标坐标会更容易。
  • 如果您的画布应与精灵一起移动(例如RPG中的聊天气泡),请使用Screen Space - Camera

答案 2 :(得分:1)

IMO如果您要移动相机或放大/缩小,请使用精灵渲染器进行游戏,使用UGUI进行游戏UI。 但是如果你的游戏有静态屏幕,不像前面描述的情况那么你必须去UGUI(图像或原始图像)。

答案 3 :(得分:1)

我会使用Canvas作为红色标记精灵,因为这是需要像UI一样的UI元素,并获得RectTrasnform的冒险来修改它以适应您的屏幕需求,即锚定,使用Text和其他东西来填充UI内容。

并使用Sprites作为蓝色市场精灵,并使用Prespective Camera渲染它,使Tree精灵稍微高一点/向后以轻松获得良好的视差效果。

为什么我们需要用精灵放置它并且不要将它放在画布上,因为RectTransform和Transform的行为不同,如果要应用Physic,请使用Transform,当你使用Transform而不是RectTransform时,你将使用它世界空间,但是如果你将RectTransform与Canvas一起使用,你将在屏幕空间中工作,这使得它变得更难和无法使用。