在unity2d

时间:2017-04-12 05:33:56

标签: unity3d

我和一些儿童游戏对象一起制作了一个游戏对象,以表示在特定情况发生时显示的信息。

我已经调整了相机区域中信息游戏对象(连同其孩子们)的位置。问题是我想将游戏对象(以及它的孩子们)从相机中移出,可能在顶部或左侧。以下是展示我想要表达的立场的划痕:

enter image description here

这样我就可以移动信息游戏对象及其对象了。儿童(红盒子)在需要的时候有一些动作效果,移动它没有问题但是在游戏开始时可以找到一种优雅的方式将它移出相机。

主要是因为我不知道如何计算出相机的位置。 也许找到相机的上边框和游戏对象及其子的大小?

我知道我可以通过添加一个标记游戏对象来表示信息游戏对象的下行边框,并移动它直到它不可见,但有更优雅的方式吗?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

对于这个,我会使用以下技巧:使用任何方法(动画,协程,更新方法......)以您想要的方式将项目移出屏幕。然后,您可以使用在不需要在任何相机上渲染项目时调用的OnBecameInvisible事件。该事件将用于检测父对象移出屏幕,并且您想要停止当前移动。然后,您只需要在此事件中定义您想要停止当前的移动行为,您将完成。

void OnBecameInvisible() {
    // Stop moving coroutine, moving in Update or current animation.
}

如你所说,可能有更优雅的方式,但我认为这种方法应该足以满足您的目标。

答案 1 :(得分:0)

我花了很多时间,但是我找到了这种方式,将此脚本附加到你的gameObject:

public Renderer rend;
//drag the camera to the script in the inspector
public Camera camera1;
Vector3 bottomleft;
Vector3 topright;

void Start()
{
    rend = GetComponent<Renderer>();
    //the top-right point of the camera bounds
    topright= camera1.ViewportToWorldPoint(new Vector3(0, 0, transform.position.z));
    //the bottom-left point of the camera bounds
    bottomleft = camera1.ViewportToWorldPoint(new Vector3(1, 1, transform.position.z));

    StartCoroutine(MoveUp());

}
IEnumerator MoveUp()
{
    //while the position and the height are lower that the Y of top right
    while (transform.position.y + rend.bounds.size.y < topright.y)
    {
        //move the object to the new position (move it up)
        transform.position = new Vector3(transform.position.x, transform.position.y + .01f, transform.position.z);
        //and wait for 1/100 of a second 
        yield return new WaitForSecondsRealtime(.001f);
    }
}

您可以使用WaitForSecondsRealtime值来改变移动速度。