我直到最近才开始使用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);
}
}
仅当我将Vector属性设置为-1和1时,我才能在视觉上看到相关图像(在错误的位置)。
经过一番尝试,我了解到向量x和y的值应该采用不同的格式,它们应为十进制,始终在-1和1之间。
如何将精确坐标转换为该小数部分?还是我应该使用其他方法?
先谢谢您
Evgenie
答案 0 :(得分:1)
“我知道,向量x和y的值应该采用不同的格式,它们应为小数,始终在-1和1之间。”
只有称为NORMAL向量的特殊向量才需要具有此范围内的值。使它们与众不同的是,法向矢量的长度始终为1。 因此,我们知道1 = sqrt(x * x + y * y)-这只是毕达哥拉斯的定理。 (请注意,为了使该方程式成立,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)