Unity3D:如何确定游戏对象的角落,以便根据它来定位其他游戏对象?

时间:2014-03-24 09:41:31

标签: c# unity3d vuforia

我的问题是,是否有办法知道游戏对象角落的坐标。我所拥有的是三个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);
}
}

如何让对象的角落跟随目标?我需要将边的宽度作为目标之间距离的宽度,有没有办法在不使用刻度的情况下实现这一点?

3 个答案:

答案 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)

  1. 创建8个空游戏对象。
  2. 让他们成为要跟踪的“立方体”对象的孩子。
  3. 将它们在编辑器中移动到跟踪的游戏对象的8个角落。由于它们是被跟踪对象的子项,因此它们的位置将为{+/- 0.5, +/- 0.5, +/- 0.5}
  4. 以令人难忘的名字命名(即“左上角”)。
  5. 这8个物体将随被跟踪物体移动和缩放,停留在角落。只要您想知道角落的位置,只需按名称引用8个游戏对象中的一个或多个,并为每个Vector3获取transform.position
  6. 注意:如果您反复执行第5步,则可能希望每次都避免可能代价高昂的GameObject.Find()调用(或类似)。执行一次并将8个游戏对象保存在变量中。

答案 2 :(得分:0)

我通过确定目标之间的位置并计算它们的平均值来解决问题。 然而,这并非完美无瑕,因为当将外部模型用于系统时,很难确定模型准确跟随目标角落的比例因子。