我正在尝试制作2D游戏,在Unity中,球会从相机的边缘反弹。现在,如果我理解正确,那么Unity就是更多的东西,您可以制作环境,然后对齐相机,而不是使环境适合相机,对吗?
我可以得到球的位置,然后查看它是否大于某个值,然后施加一个力,这就是我正在做的,但是在不同的设备上,屏幕比例会发生变化,所以这是行不通的。有没有一种方法可以检测它是否刚好碰到相机/视图的边缘或我可以使用的某个百分比单位?在该游戏中,摄像机随球上下移动,因此只需要左右两侧保持“弹力”即可。
当我向上看时,有人建议使用一个设置在相机边缘的障碍物。考虑到所有缩放比例和比率方面的变化,无论是使用某种方法以像素为单位获取屏幕宽度,还是以其他方式检测边缘,这都将更加容易。
很抱歉,这是一个简单的问题,这是我的第一个Unity游戏,因此我仍在学习绳索。
答案 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中,如果更改宽高比,则触摸边缘时球仍会弹起。