你可以使用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);
}
不要忘记考虑对象本身的比例。如果不这样做,一半的对象将能够移动到相机边界之外.....