Unity-从另一个场景打开时重力不起作用

时间:2020-04-16 23:41:34

标签: c# unity3d

我正在统一创建一个简单的迷你游戏作为一个单独的场景。问题是,当我从迷你游戏场景开始时,重力在刚体上完全可以正常工作,但是当我从另一个场景移到迷你游戏场景时,重力停止工作,并且玩家只能向上攀爬。

这是我尝试过的:

  • 我的项目的Physics 2D设置很好(重力:X = 0,Y = -9.81)
  • 我的项目的时间设置很好(时间范围:1)
  • 我的Player角色有一个Rigidbody2D,它是动态的,模拟的(true),重力比例= 5,仅冻结旋转,并且设置为从不睡觉。
  • 玩家还具有方块和圆形对撞机(均为2D)。
  • 所有玩家输入均在Update()中读取,所有物理过程均在FixedUpdate()中完成(我正在使用速度来移动玩家)。

我确实有一个在场景之间携带的GameController对象,但是它的所有脚本都不会影响场景(我可以提供脚本的OnLevelWasLoaded()部分或任何其他部分)。

这是我的播放器控制器中的代码:

void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        box = GetComponent<BoxCollider2D>();
        _renderer = GetComponent<SpriteRenderer>();
        velVer = 30f;
        velHor = 10f;
    }

void Update()
    {
        moveHor = Input.GetAxisRaw("Horizontal");
        moveVer = Input.GetAxis("Vertical");
        buttonUp = Input.GetButtonUp("Vertical");
        _moveVector = new Vector2(moveHor, moveVer);
    }

    void FixedUpdate()
    {

        if (IsGrounded() && buttonUp)
            rb.velocity = new Vector2(velHor * _moveVector.x, velVer * _moveVector.y);
        if (_moveVector.x != 0 && _moveVector.y == 0)
            rb.velocity = new Vector2(velHor * _moveVector.x, rb.velocity.y);
    }

    private bool IsGrounded()
    {
        RaycastHit2D raycast = Physics2D.BoxCast(box.bounds.center, box.bounds.size, 0f, Vector2.down, 0.1f, layer);
        return raycast.collider != null;
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag.Equals("Heart"))
        {
            other.gameObject.SetActive(false);
        }
    }

我已经从小型游戏场景中的所有脚本中注释掉了对GameController对象的任何引用,因此GameController应该不会对我的小型游戏角色控制器产生任何影响。

我很拼命,我在网上搜索了3个多小时,却没有找到任何可以帮助我的信息(如果我确实怀念歉意的解决方案)。 我可以提供您可能需要的更多信息。

编辑: 这是当我从迷你游戏场景开始游戏时以及从另一个场景转到迷你游戏场景时角色行为的Gif。

工作(直接开始玩迷你游戏):

enter image description here

不起作用(从另一个场景移至迷你游戏):

enter image description here

2 个答案:

答案 0 :(得分:0)


检查三件事:
1)您确定没有在任何其他脚本中将timeScale设置为0吗?
2)您的玩家在两个级别上的比例都相同吗?
3)为什么在IsGrounded函数中使用Physics2D.BoxCast?我通常使用Raycast2D进行地面检查。

答案 1 :(得分:0)

好的,我发现了问题!我认为问题可能出在我的小游戏场景内的脚本内,还是我的GameController携带到场景内的脚本内,但事实并非如此。问题出在脚本上,脚本附在我移动到迷你游戏的场景中的对象上。

如果麻烦的话:

Physics2D.gravity = Vector2.zero;

因为我的游戏是轴测投影(3/4)的2D,所以在开发初期就将引力设置为Vector2.zero。我已将其替换为简单地将重力比例设置为0。

rb.gravityScale = 0;

即使带有麻烦行的脚本没有移动到我的迷你游戏场景中,它也修改了整个项目的重力设置。 我可能会发现一个非常愚蠢的错误,但是经过几个小时的不断发展,我的大脑却无法正常运转,因此我决定发布此问题。

谢谢大家的帮助!