【问题标题】:Gameobjects position change with resolution游戏对象位置随分辨率变化
【发布时间】:2017-01-26 17:31:38
【问题描述】:

我有一个场景,其中包含多个具有 x-y-z 位置的游戏对象。我在 2D 中,所以不使用 z。

目前,我使用的是 1024/768 分辨率,当我添加一个 GameObject 时:

GameObject star = GameObject.CreatePrimitive(PrimitiveType.Sphere);
Vector3 position = new Vector3 (x, y, z);
star.transform.localPosition = position;

没关系,游戏对象在我的场景中的正确位置。

但是,nox,我正在尝试更改分辨率 (1920/1080),并且我的所有游戏对象都在右上角远离我的相机。

有什么问题?我该如何解决这个问题?

对我来说,当我更改分辨率时,我的游戏对象的 0-0-0 会发生变化......还有一些奇怪的事情,如果我的游戏对象有一个带位置的 LineRenderer,它们在所有分辨率上都很好......

编辑:这是我用来生成游戏对象的函数,它是一个星系生成器:

             for(int i = 0; i < numberOfStars; i++) {
                bool checkPosition = false;

                while (!checkPosition) {
                    // Choose a distance from the center of the galaxy.
                    float distance = Random.Range(5.0f, (float) galaxySize / 2 - 5);

                    // Choose an angle between 0 and 2 * PI.
                    float angle = Random.Range(0.0f, 100.0f) * 2 * Mathf.PI;

                    Vector3 position = new Vector3 (Mathf.Cos (angle) * distance, Mathf.Sin(angle) * distance, 9);

                    if (! Physics.CheckSphere(position, 1)) {
                        GameObject star = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                        star.AddComponent<SolarSystem>();

                        star.name = i + "_" + PlanetNameGenerator.GenerateName();
                        star.GetComponent<SolarSystem>().name = i + "_" + PlanetNameGenerator.GenerateName();

                        star.transform.parent = GameObject.Find ("Targets").transform;

                        // On change le scale en random
                        float randomScale = Random.Range (0f, 0.5f);
                        star.transform.localScale += new Vector3(randomScale,randomScale,randomScale);

                        star.transform.localPosition = position;
                        star.tag = "SolarSystem";

                        checkPosition = true;
                    }
                }
            }

这是我在 1024/768 中看到的场景,我的 Sphere GameObjects 和粉色 LineRenderer 位于它们之间:

这是我在 1920/1080 看到的,LineRenderer 总是在同一个位置,但是 GameObjects 移开:

【问题讨论】:

  • 你能提供更多代码吗?还提供您使用的是透视相机还是正交相机,以及您如何更改分辨率?
  • 更多类似什么的代码?我正在使用透视相机,并在编辑器中更改分辨率,在游戏视图中
  • 显示所有代码到调用 this 的位置以及整个函数所在的位置。根据您提供的内容,我将无法重现您的错误。
  • 我用我的函数编辑了生成所有游戏对象,你想要更多吗?如果是,像什么? :)
  • 我添加了 2 个屏幕 ;)

标签: unity3d


【解决方案1】:

问题是这一行:

star.transform.parent = GameObject.Find ("Targets").transform;

我将父级从 Canvas 移出,将“目标”的 x-y-z 位置更改为 0 等,没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2014-01-24
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多