跳离屏幕Unity 2D

时间:2019-03-10 21:19:54

标签: unity3d 2d-games

我正在尝试制作2D游戏,在Unity中,球会从相机的边缘反弹。现在,如果我理解正确,那么Unity就是更多的东西,您可以制作环境,然后对齐相机,而不是使环境适合相机,对吗?

我可以得到球的位置,然后查看它是否大于某个值,然后施加一个力,这就是我正在做的,但是在不同的设备上,屏幕比例会发生变化,所以这是行不通的。有没有一种方法可以检测它是否刚好碰到相机/视图的边缘或我可以使用的某个百分比单位?在该游戏中,摄像机随球上下移动,因此只需要左右两侧保持“弹力”即可。

当我向上看时,有人建议使用一个设置在相机边缘的障碍物。考虑到所有缩放比例和比率方面的变化,无论是使用某种方法以像素为单位获取屏幕宽度,还是以其他方式检测边缘,这都将更加容易。

很抱歉,这是一个简单的问题,这是我的第一个Unity游戏,因此我仍在学习绳索。

2 个答案:

答案 0 :(得分:0)

GetLibVersion(JNIEnv *env, jobject thiz)

这就是我用的。这是统一答案的答案。

答案 1 :(得分:0)

一种方法是将球的位置转换为屏幕位置,然后验证它是否不在屏幕上(如果该位置具有 x y 小于0 或大于屏幕宽度 x 或大于屏幕高度 y )。

Vector2 screenPosition = Camera.main.WorldToScreenPoint(this.transform.position);
if((screenPosition.y > Screen.height) || (screenPosition.y < 0f) || (screenPosition.x > Screen.width) || (screenPosition.x <0f))
{   
    screenPosition.x = Mathf.Clamp(screenPosition.x, 0f, Screen.width);
    screenPosition.y = Mathf.Clamp(screenPosition.y, 0f, Screen.height);
    Vector3 newWorldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
    this.transform.position = new Vector2(newWorldPosition.x, newWorldPosition.y);
    Move();
}
private void Move()
{
    velocity *= -1f;
    rigidBody.velocity = velocity;
}

在此示例中,脚本将检查球是否进入屏幕,如果是,则在屏幕边缘之间夹紧位置并更改速度,以使球向相反方向反弹。请注意,在下面的GIF中,如果更改宽高比,则触摸边缘时球仍会弹起。