【问题标题】:How can I decide boundary for my object?如何确定对象的边界?
【发布时间】:2014-09-12 09:22:21
【问题描述】:

我正在开发一个游戏,我的玩家用钥匙从一个地方移动到另一个地方,我用一些数字决定它的边界,但我想知道我怎样才能确定一个等于相机的精确左点和右点边界。

那么谁能告诉我我该怎么做呢?

我的代码如下:

if(Input.GetKey(KeyCode.LeftArrow)){
    if(transform.position.x > -2.7f){
        transform.position = new Vector3 (transform.position.x-0.1f,transform.position.y,transform.position.z);
        }
}
if(Input.GetKey(KeyCode.RightArrow)){
    if(transform.position.x < 2.7f){
        transform.position = new Vector3 (transform.position.x+0.1f,transform.position.y,transform.position.z);
}

【问题讨论】:

  • 不,它没有与我的播放器连接,并且它设置为 (0, 0, -10)。 Dharmesh
  • 是的,我不想将我的对象移动到相机边界之外。当我的玩家到达边界时,它将停在那个点..Dharmesh

标签: c# camera unity3d


【解决方案1】:

你可以使用Mathf.Clamp(value, min, max)来限制/限制玩家的移动,这是非常常用的。如果 value 小于 min,它将返回 min,同样返回最大值。

if(Input.GetKey(KeyCode.LeftArrow)){
    transform.position = new Vector3 (Mathf.Clamp(transform.position.x - 0.1f, -2.7f, 2.7f), 
                                                  transform.position.y, 
                                                  transform.position.z);
}
if(Input.GetKey(KeyCode.RightArrow)){
    transform.position = new Vector3 (Mathf.Clamp(transform.position.x + 0.1f, -2.7f, 2.7f), 
                                                  transform.position.y, 
                                                  transform.position.z);
}

如果应用,您可以删除您的 if 语句。

编辑:
对不起,我误解了你的意思。我现在看到您想知道如何在动态更改相机尺寸时设置边界。是对的吗?为此,您需要知道相机的宽度和高度。 This 帮我总结了这个公式:

摄像头右侧边界为:Camera.main.orthographicSize * Camera.main.aspect
相机的顶部边界是:Camera.main.orthographicSize
左侧和底部只是它们的负数。

好像不需要上下边界,不过我还是贴一下吧。
所以,结合我之前的回答,你可以像这样钳制你的玩家位置:

width = Camera.main.orthographicSize * Camera.main.aspect;

if(Input.GetKey(KeyCode.LeftArrow)){
    posX = Mathf.Clamp(transform.position.x - 0.1f, -width + (transform.localScale.x / 2), width - (transform.localScale.x / 2));
    transform.position = new Vector3 (posX, transform.position.y, transform.position.z);
}
if(Input.GetKey(KeyCode.RightArrow)){
    posX = Mathf.Clamp(transform.position.x + 0.1f, -width + (transform.localScale.x / 2), width - (transform.localScale.x / 2));
    transform.position = new Vector3 (posX, transform.position.y, transform.position.z);
}

不要忘记考虑对象本身的比例。如果不这样做,一半的对象将能够移动到相机边界之外.....

【讨论】:

  • 是的,我可以将它用于我的项目,但如果我创建新项目,那么我必须确定我的相机的边界点是什么,就像在这个项目中一样,我已经决定我的相机的边界在 -2.7 之间f 至 2.7f。但我想知道Unity是否有任何默认方法可以通过代码自行决定其相机的边界? Dharmesh
  • 感谢杰的帮助。它为我工作..Dharmesh
【解决方案2】:

我刚刚找到了另一种方法来做到这一点。 可能对某人有用。

    LeftPoint = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0)).x + (transform.localScale.x * 5);
    RightPoint = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0)).x - (transform.localScale.x * 5);
    UpPoint = Camera.main.ScreenToWorldPoint (new Vector3(0,0,0)).y + (transform.localScale.y * 5);
    DownPoint = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0)).y - (transform.localScale.y * 5);


        if(Input.GetKey(KeyCode.LeftArrow)){
        if(transform.position.x > LeftPoint){
            transform.position = new Vector3 (transform.position.x-0.1f,transform.position.y,transform.position.z);
        }
    }
    if(Input.GetKey(KeyCode.RightArrow)){
        if(transform.position.x < RightPoint){
            transform.position = new Vector3 (transform.position.x+0.1f,transform.position.y,transform.position.z);
        }
    }
    if(Input.GetKey(KeyCode.UpArrow)){
        if(transform.position.y < DownPoint){
            transform.position = new Vector3 (transform.position.x,transform.position.y+0.1f,transform.position.z);
        }
    }
    if(Input.GetKey(KeyCode.DownArrow)){
        if(transform.position.y > UpPoint){
            transform.position = new Vector3 (transform.position.x,transform.position.y-0.1f,transform.position.z);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2011-01-17
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2018-08-24
    相关资源
    最近更新 更多