Unity 2D Android - 将对象限制在屏幕内

3

我正在开发一个类似于太空射击的2D游戏。我已经为Web和PC开发了该游戏,并且它运行良好。现在我正将其移植到Android上,但是在玩家代码方面出现了问题。

玩家(一艘宇宙飞船)将位于屏幕底部并在屏幕内左右移动。我编写了一段代码来限制玩家在屏幕内活动,以下是代码:

private float screenx = Screen.width -20;
playerPosScreen = Camera.main.WorldToScreenPoint(transform.position);

if(Input.GetKey(KeyCode.RightArrow) && playerPosScreen.x < screenx)
{
    transform.Translate(Vector3.right * speed * Time.deltaTime * 0.4f);
}

if (Input.GetKey(KeyCode.LeftArrow) && playerPosScreen.x > 20)
{
    transform.Translate(-Vector3.right * speed * Time.deltaTime * 0.4f);
}

我知道我还需要把上述代码中的一些静态值转换,这不是编码的好方法。

我的问题是如何在Android中实现这一点? 我希望游戏玩家呆在屏幕上,即使用户通过将其向极左拖动,无论他试图拖动多少次,玩家都应该停留在屏幕的左上角,右边也是如此。简单来说,我想检测屏幕的左右边缘,并将对象限制在这些边缘内。

我的游戏将处于横向模式。

非常感谢您提供的任何帮助。 提前致谢。

2个回答

2
这种问题通常以下列方式解决:
if(transform.position.x < screenx) {

    transform.position.x = screenx;
}

在这里,我们正在检查转换后的玩家是否超出了屏幕空间。如果是的话,我们将其设置为可以达到的最小值-我假设是screenx

1
感谢@rhughes。我添加了以下代码来解决这个问题:Vector3 viewPos = Camera.main.WorldToViewportPoint(transform.position); viewPos.x = Mathf.Clamp01(viewPos.x); viewPos.y = Mathf.Clamp01(viewPos.y); transform.position = Camera.main.ViewportToWorldPoint(viewPos); - Sriram Kumar

0
public Transform player;
public float distanceFromCamera=10;
public float offsetx=.05f;
public float offsety=.05f;
void Awake()
{

    player.position=Camera.main.ViewportToWorldPoint(new Vector3(offsetx,offsety,distanceFromCamera));
}

这将是您屏幕左下角的边界


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接