我的问题是,是否有办法知道游戏对象角落的坐标。我所拥有的是三个Vuforia AR目标和一个游戏对象,在这种情况下是一个立方体。
我需要实现的目标是,当我移动目标时,立方体的角落将跟随目标,例如。立方体将与目标之间的空间一样宽。
现在它是如何做到的,它是检查目标之间的距离并根据它设置立方体的比例。这导致立方体总是从其设定位置扩展,这使得目标的定位在现实生活中变得笨拙。
这里有几张图片展示了它在执行过程中的作用:
以下是附加到cube-object的代码:
using UnityEngine;
using System.Collections;
public class show : MonoBehaviour {
float distancex;
float distancez;
// Use this for initialization
void Start () {
renderer.enabled = false;
}
// Update is called once per frame
void Update () {
if (GameObject.Find ("target1").renderer.enabled && GameObject.Find ("target2").renderer.enabled &&
GameObject.Find ("target3").renderer.enabled && GameObject.Find ("target4").renderer.enabled)
{
renderer.enabled = true;
}
distancex = Vector3.Distance ((GameObject.Find ("target1").transform.position), (GameObject.Find ("target2").transform.position));
distancez = Vector3.Distance ((GameObject.Find ("target2").transform.position), (GameObject.Find ("target3").transform.position));
Debug.Log (distancex);
Debug.Log (distancez);
transform.localScale = new Vector3((distancex), transform.localScale.y, transform.localScale.z);
transform.localScale = new Vector3(transform.localScale.x, transform.localScale.y, (distancez));
Debug.Log (transform.localScale);
}
}
如何让对象的角落跟随目标?我需要将边的宽度作为目标之间距离的宽度,有没有办法在不使用刻度的情况下实现这一点?
答案 0 :(得分:8)
我知道在你问这个问题之后已经有一段时间了,但是当我想要对自己进行类似的事情时,我发现了这一点。
我发现我需要(其他人可能会得到帮助)就是使用Renderer.bounds
在实践中对我来说是什么样的:
void Update () {
rend = currentGameObject.GetComponent<Renderer>();
Debug.Log(rend.bounds.max);
Debug.Log(rend.bounds.min);
}
在这种情况下,我的目标是位于0,0,200位置的四边形和200,200,1的标度。 rend.bounds.max的输出为(100.0,100.0,200.0)
,min为(-100.0,-100.0,200.0)
。这为您提供了每个角落的角落位置(我的示例是在2D空间中,但这也适用于3D)。
如果您想要右上角的话,为了让您的示例更具针对性,您可以获得renderer.bounds.max
的XY,左上角则可以获得renderer.bounds.max.y
和{{ 1}}。希望有所帮助!
干杯!
答案 1 :(得分:1)
{+/- 0.5, +/- 0.5, +/- 0.5}
。Vector3
获取transform.position
。注意:如果您反复执行第5步,则可能希望每次都避免可能代价高昂的GameObject.Find()调用(或类似)。执行一次并将8个游戏对象保存在变量中。
答案 2 :(得分:0)
我通过确定目标之间的位置并计算它们的平均值来解决问题。 然而,这并非完美无瑕,因为当将外部模型用于系统时,很难确定模型准确跟随目标角落的比例因子。