Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一-从其他场景打开时重力不起作用_C#_Unity3d - Fatal编程技术网

C# 统一-从其他场景打开时重力不起作用

C# 统一-从其他场景打开时重力不起作用,c#,unity3d,C#,Unity3d,我正在创建一个简单的迷你游戏作为一个单独的场景。问题是,当我从迷你游戏场景开始时,重力在我的刚体上完全正常工作,但当我从另一个场景移动到迷你游戏场景时,重力停止工作,我的玩家只能上升 以下是我尝试过的: 我的项目的物理2D设置很好(重力:X=0,Y=-9.81) 我的项目的时间设置很好(时间比例:1) 我的玩家角色有一个刚体2D,它是动态的,模拟的(真的),重力比例=5,只有旋转被冻结,它被设置为从不睡觉 玩家还拥有长方体和圆形碰撞器(均为2D) 所有播放器输入都在Update()中读取,所有

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

以下是我尝试过的:
  • 我的项目的物理2D设置很好(重力:X=0,Y=-9.81)
  • 我的项目的时间设置很好(时间比例:1)
  • 我的玩家角色有一个刚体2D,它是动态的,模拟的(真的),重力比例=5,只有旋转被冻结,它被设置为从不睡觉
  • 玩家还拥有长方体和圆形碰撞器(均为2D)
  • 所有播放器输入都在Update()中读取,所有物理操作都在FixedUpdate()中完成(我使用速度移动播放器)
我确实有一个GameController对象,它在场景之间传输,但是它的脚本都不会影响场景(我可以提供脚本的onlevelwasload()部分或任何其他部分)

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

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);
        }
    }
void Start()
{
rb=GetComponent();
box=GetComponent();
_renderer=GetComponent();
velVer=30f;
velHor=10f;
}
无效更新()
{
moveHor=Input.GetAxisRaw(“水平”);
moveVer=Input.GetAxis(“垂直”);
buttonUp=Input.GetButtonUp(“垂直”);
_moveVector=新矢量2(moveHor,moveVer);
}
void FixedUpdate()
{
if(isground()&&buttonUp)
rb.velocity=新矢量2(velHor*_movevevector.x,velVer*_movevevector.y);
如果(_moveVector.x!=0&&u moveVector.y==0)
rb.velocity=新矢量2(velHor*_movevevector.x,rb.velocity.y);
}
二等兵
{
RaycastHit2D raycast=Physics2D.BoxCast(box.bounds.center,box.bounds.size,0f,矢量2.down,0.1f,层);
return raycast.collider!=null;
}
私有无效OnTiggerEnter2D(碰撞R2D其他)
{
if(other.tag.Equals(“Heart”))
{
other.gameObject.SetActive(false);
}
}
我已经注释掉了迷你游戏场景中所有脚本中对GameController对象的任何引用,因此GameController不应该对我的迷你游戏角色控制器产生任何影响

我很绝望,我已经在网上搜索了3个多小时,没有找到任何可以帮助我的东西(如果我真的错过了一个解决方案,我道歉)。 我可以提供您可能需要的任何进一步信息

编辑: 以下是当我从迷你游戏场景开始游戏时,以及当我从另一个场景移动到迷你游戏场景时,角色行为的GIF

工作(直接启动迷你游戏):

不工作(从另一个场景移动到迷你游戏):


检查三件事:
1) 您确定没有在任何其他脚本中将时间刻度设置为0吗?
2) 你的球员在两个级别上的级别是否相同
3) 为什么在IsGround函数中使用Physics2D.BoxCast?我通常用于地面检查过程。


检查三件事:
1) 您确定没有在任何其他脚本中将时间刻度设置为0吗?
2) 你的球员在两个级别上的级别是否相同

3) 为什么在IsGround函数中使用Physics2D.BoxCast?我通常用于地面检查过程。

好的,我发现了问题!我原以为问题出在我的迷你游戏场景中的脚本中,或者我的游戏控制器带入场景中的脚本中,但事实并非如此。这个问题存在于一个脚本中,该脚本附加到一个位于场景中的对象上,我从该场景移动到了迷你游戏

如果出现故障线路:

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

rb.gravityScale = 0;
尽管带有麻烦线条的脚本没有移动到我的迷你游戏场景,但它修改了整个项目的重力设置。 非常愚蠢的错误,我可能会发现,但经过几个小时的不断发展,我的大脑功能不太好,我决定把这个问题贴出来


谢谢你们的帮助,伙计们

好的,我找到问题了!我原以为问题出在我的迷你游戏场景中的脚本中,或者我的游戏控制器带入场景中的脚本中,但事实并非如此。这个问题存在于一个脚本中,该脚本附加到一个位于场景中的对象上,我从该场景移动到了迷你游戏

如果出现故障线路:

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

rb.gravityScale = 0;
尽管带有麻烦线条的脚本没有移动到我的迷你游戏场景,但它修改了整个项目的重力设置。 非常愚蠢的错误,我可能会发现,但经过几个小时的不断发展,我的大脑功能不太好,我决定把这个问题贴出来


谢谢你们的帮助,伙计们

你的物体是否认为它们被接地了,或者它们知道它们在空中,但仍然不会坠落?@Jake这些物体知道它们何时在空中,但不会坠落。当场景开始时,玩家被放置在地面上,这样玩家就可以跳起来一次,但是因为角色没有倒下,IsGrounded()在此之后返回false,玩家只能从左向右移动,半空中。你的物体是否认为它们被搁浅了,或者它们是否知道它们在空中,但仍然不会坠落?@Jake这些物体知道它们何时在空中,但不会坠落。当场景开始时,玩家被放置在地面上,这样玩家可以跳起来一次,但是因为角色没有倒下,IsGrounded()返回false