我最近才开始使用Unity,并将我的预制代码转换为它。现在我正在尝试使对象以 2D 形式出现在特定坐标处。
我会尝试解释。游戏有主界面窗口,带有某种框架。游戏室需要出现在框架内。因此,在Unity主窗口中,我手动放置了一个这样的房间,以记下游戏室的坐标。现在,我想编写一个脚本,将对象放置在这些坐标中。
举个例子,假设这些坐标是:(30,40(。
为了确保我清楚:30 和 40 是大面积的左上角和内部小区域的左上角之间的距离。
我尝试在网上查找如何使用这些坐标,并找到了Vectors。
我想做的是:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AreaContainerScript : MonoBehaviour
{
static List<GameObject> SmallAreas = new List<GameObject>();
static Vector2 SmallVector = new Vector2(20, 280);
void DefineSmallAreas()
{
SmallAreas.Add(GameObject.Find("areaConfirmLoad"));
SmallAreas.Add(GameObject.Find("areaConfirmQuit"));
//...
}
void StartAllAreas()
{
DefineSmallAreas();
foreach (GameObject thisObject in SmallAreas)
{
thisObject.transform.position = SmallVector;
thisObject.SetActive(false);
}
}
仅当我在 -1 和 1 之间设置 Vector 属性时,我才能直观地看到相关图像(在错误的位置(。
经过一番尝试,我明白了,向量 x 和 y 值应该采用不同的格式,它们应该是小数,总是在 -1 和 1 之间。
如何将精确坐标转换为此小数部分?或者也许我应该使用不同的方法?
提前谢谢你,
叶甫根妮
"我明白了,向量 x 和 y 值应该采用不同的格式,它们应该是小数,总是在 -1 和 1 之间。">
只有称为 NORMAL 向量的特殊类型的向量需要具有此范围内的值。 它们的特别之处在于法向量的长度始终是 ONE。 所以,我们知道 1= sqrt(x* x + y* y( - 这只是毕达哥拉斯定理。 (请注意,要使此等式成立,Niether X 和 y 不能超出 -1 到 1 的范围;请尝试一下。
使用长度为 1.0 的向量的优点是:如果将其两个分量(x 和 y(乘以相同的数字("缩放"向量(,假设......A,则结果向量的长度将为,正好 = A。 例如 A = sqrt(A* x* x + A* y* y(
我们可以使用类似的缩放方法来获取定位和调整小房间所需的两个向量,作为大房间的特定部分。 假设大房间有一个位置(Xpos,Ypos(和一个大小(Xsize,Ysize(:
1(如果我们想让小房间说...大房间大小的一半,我们可以将小房间大小定义为(Xsize/2,Ysize/2(。 (在单位中,您可以将整个向量乘以 0.5f(
2(如果我们想找到小房间的左上角,比如说..向下三分之一的路程和穿过大房间,我们将它与左上角的距离定义如下:distance vector = (Xsize/3, Ysize/3)
(我们将大房间的大小放大三分之一(
3(现在我们可以将此结果添加到大房间的左上角位置 - 这称为矢量偏移量。
small room top left location(a vector) = distance(the vector we just computed) + top left of lerge room(a vector)
或
(x,y)= (Xsize/3,Ysize/3) +(Xpos,Ypos)