弹跳屏幕Unity 2D



我正在尝试制作一个2D游戏,在该游戏中,球从相机的边缘弹起。现在,如果我理解正确的话,统一是更多,您制作和环境,然后对齐相机,而不是使环境适合相机,对吗?

我可以得到球的位置,然后查看其是否大于某个值,然后施加力,这是我在做的事情,但是使用不同的设备,屏幕比率会改变,因此不起作用。是否有一种方法可以检测它是否仅撞到我可以使用的相机/视图的边缘或某些百分比的单元?在此游戏中,相机与球上下移动,因此只有左侧和右侧才需要"有弹性"。

当我抬起头来时,有些人建议使用设定相机边缘的屏障。随着所有缩放和比率方面的变化,我认为检测边缘的比例更容易,无论是使用某种方法以像素以获取屏幕宽度,还是其他方式。

一种方法是将球位置转换为屏幕位置,然后验证它是否脱离屏幕(如果位置具有 x> x y 在0 或a x 以下,大于屏幕宽度 y 大于<<em>屏幕高度)。

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中,如果我更改纵横比,则在触摸边缘时,球仍然会弹跳。

var dist = (this.transform.position 
- Camera.main.transform.position).z;
var leftBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(0,0,dist)).x;
var rightBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(1,0,dist)).x;
var topBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(0,0,dist)).y;
var bottomBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(0,1,dist)).y;
Vector3 playerSize = 

this.gameObject. 
renderer.bounds.size;
this.transform.position = new 
Vector3 (
Mathf.Clamp(this. 
transform.position.x, 
leftBorder + playerSize.x/2, 
rightBorder - playerSize.x/2),
Mathf.Clamp 
(this.transform.position.y, 
topBorder + playerSize.y/2, 
bottomBorder - playerSize.y/2),
this.transform.position.z

这就是我使用的。这是Unity答案的答案。

最新更新