【问题标题】:Unity 2D Android - Restrict object to within the screenUnity 2D Android - 将对象限制在屏幕内
【发布时间】:2014-02-06 14:03:52
【问题描述】:

我正在开发一款类似于 Space Shooter 的 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 中执行此操作?我希望玩家留在屏幕上,即如果用户通过将玩家拖动到最左侧来移动玩家,无论他尝试拖动多少,玩家都应该留在屏幕的左角,这同样适用于正确的。简单来说,我想检测屏幕的左右边缘并将我的对象限制在这些边缘内。

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

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    这类问题一般通过以下方式解决:

    if(transform.position.x < screenx) {
    
        transform.position.x = screenx;
    }
    

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

    【讨论】:

    • 谢谢@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);
    【解决方案2】:
    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));
    }
    

    这将是您的左下屏幕边界

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多