【问题标题】:Camera flies off when trying to set camera bounds尝试设置相机边界时相机飞走
【发布时间】:2019-05-20 19:44:55
【问题描述】:

玩家控制摄像机移动以环顾关卡,我正在尝试设置边界,这样摄像机就不会走得太远。但是,当我添加了边界代码后,只要我按下按钮移动,相机就会飞走。

 if (Input.GetKey("d"))
        {
            transform.Translate(new Vector2(camSpeed * Time.deltaTime, 0));

            transform.position = new Vector2(Mathf.Clamp(transform.position.x, minX, maxX), 0);


        }
        if (Input.GetKey("a"))
        {
            transform.Translate(new Vector2(-camSpeed * Time.deltaTime, 0));

            transform.position = new Vector2(Mathf.Clamp(transform.position.x, minX, maxX), 0);
        }
        if (Input.GetKey("w"))
        {
            transform.Translate(new Vector2(0, camSpeed * Time.deltaTime));

            transform.position = new Vector2(0, Mathf.Clamp(transform.position.y, minY, maxY));
        }
        if (Input.GetKey("s"))
        {
            transform.Translate(new Vector2(0, -camSpeed * Time.deltaTime));

            transform.position = new Vector2(0, Mathf.Clamp(transform.position.y, minY, maxY));
        }

我已将最小值和最大值设置为高于所需级别,但无论设置为什么值,相机仍然会飞走。

【问题讨论】:

  • minYmaxYminXmaxX 的值是多少?
  • @Ruzihm 无论价值是什么,它都会飞走。目前要对其进行测试,它们是 -1000 和 1000。
  • 首先,你可能不应该在每个if 中设置transform.position = new Vector2(0, Mathf.Clamp(transform.position.y, minY, maxY));,只在最后设置一次。按照现在的方式,每次移动 Y 位置时,您都会将 X 位置设置为 0,反之亦然。
  • @FredrikSchön 我刚刚将它移出​​,现在它刚刚开始在不知名的地方。我也改成transform.position = new Vector2(Mathf.Clamp(transform.position.x, minX, maxX), Mathf.Clamp(transform.position.y, minY, maxY));
  • 是 2d 还是 3d?

标签: c# unity3d camera


【解决方案1】:

解释我的评论;而不是每次使用 W 或 S 移动时都将 x 设置为 0,您应该将夹紧移动到最后,并夹紧 x 和 y(并且可能保持 Z 值?):

if (Input.GetKey("d"))
{
    transform.Translate(new Vector2(camSpeed * Time.deltaTime, 0));
}
if (Input.GetKey("a"))
{
    transform.Translate(new Vector2(-camSpeed * Time.deltaTime, 0));
}
if (Input.GetKey("w"))
{
    transform.Translate(new Vector2(0, camSpeed * Time.deltaTime));
}
if (Input.GetKey("s"))
{
    transform.Translate(new Vector2(0, -camSpeed * Time.deltaTime));
}

transform.position = new Vector3(
    Mathf.Clamp(transform.position.x, minX, maxX), 
    Mathf.Clamp(transform.position.y, minY, maxY), 
    transform.position.z
); 

【讨论】:

  • 解决了!谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-01-20
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多