【问题标题】:Working with the coordinate system and game screen in Unity 2d?在 Unity 2d 中使用坐标系和游戏屏幕?
【发布时间】:2014-02-21 14:48:14
【问题描述】:

所以我在 x/y 坐标系对我来说有意义的其他平台上开发了游戏。左上角代表游戏画面,坐标为 (0,0),右下角为 (width,height)。现在我正在尝试跳转到 Unity 2d,但我无法理解游戏屏幕是如何工作的。如果我在屏幕上有一个背景对象和一个角色对象,当我围绕他的 x 和 y 值移动角色时,他的 x 和 y 值在 -3 和 3 之间变化......非常小的坐标并且它与我设置的游戏分辨率不匹配( 1024x768)。有没有很好的教程来理解 Unity 中的游戏网格?或者谁能​​解释我如何才能完成我想做的事情?

【问题讨论】:

    标签: unity3d 2d game-engine


    【解决方案1】:

    Unity中有三种坐标系:屏幕坐标、视图坐标和世界坐标。

    世界坐标:考虑场景中对象的绝对定位,使用“点”。您可以选择让单位表示您想要的任何长度,例如 1 个单位 = 10 米。屏幕上实际显示的内容取决于相机的放置位置和方向。

    查看坐标:给定相机的视口中的坐标。视口是观察世界的假想矩形。这些坐标是比例坐标,范围从 (0,0) 到 (1,1)。

    屏幕坐标:表示设备屏幕上位置的实际像素坐标。

    请注意,任何给定对象的世界坐标将始终相同,无论使用哪个相机进行查看,而视图坐标取决于所使用的相机。屏幕坐标还取决于设备的分辨率和相机视图在屏幕上的位置。

    “Camera”对象提供了多种方法来在这些不同的坐标系之间进行转换,例如“ScreenToViewportPoint”“ScreenToWorldPoint”等。

    示例:将对象放在屏幕左上角

        float distanceFromCamera = 10.0f;
        Vector3 pos = Camera.main.ScreenToWorldPoint (new Vector3 (0, Screen.height, distanceFromCamera));
    
        transform.position = pos;
    

    ScreenToWorldPoint 函数将 Vector3 作为参数,其中 x 和 y 表示屏幕上的像素位置(0,0 是左下角),z 分量表示与相机的所需距离。无限数量的 3D 位置可以映射到相同的屏幕位置,因此您需要提供此值。

    只需确保所需位置位于相机的剪辑区域内即可。此外,您可能需要为对象选择合适的轴心,具体取决于您希望对象的哪个部分位于左上角的中心。

    【讨论】:

    • 但是如何在它们之间转换呢?例如,如果我想将我的游戏对象放在屏幕的左上角怎么办?
    • @Kokodoko 请查看更新后的答案;该示例回答了您的问题。
    • 谢谢。我现在看到与相机的 Z 距离产生了意想不到的结果。我仍然对为什么 2D 游戏需要这个感到困惑,但至少它可以工作!
    • 每个摄像机都有一个“近剪辑”和一个“远剪辑”距离,即使是您在 2D 模式下使用的正交摄像机。任何比近剪辑更近或比远剪辑平面更远的东西都不会被渲染。在 2D 的情况下,您只需要确保对象在此范围内,无论与相机的距离如何,它都会显示相同的大小。在 3D 的情况下,对象放置得越远,它就会显得越小。
    【解决方案2】:

    使用:

    Camera.main.WorldToScreenPoint(transform.position);

    让我将我的 GameObjects 转换位置转换为屏幕的 x 和 y 坐标系

    【讨论】:

    • 你能举例说明如何在游戏屏幕的左上角放置一个对象吗? (查看?)我在二维空间中工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多