【发布时间】: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 位于它们之间:
【问题讨论】:
-
你能提供更多代码吗?还提供您使用的是透视相机还是正交相机,以及您如何更改分辨率?
-
更多类似什么的代码?我正在使用透视相机,并在编辑器中更改分辨率,在游戏视图中
-
显示所有代码到调用 this 的位置以及整个函数所在的位置。根据您提供的内容,我将无法重现您的错误。
-
我用我的函数编辑了生成所有游戏对象,你想要更多吗?如果是,像什么? :)
-
我添加了 2 个屏幕 ;)
标签: unity3d