如何让玩家跳转到Y轴

问题描述 投票:0回答:1

所以我有一个可以用滑块倾斜的播放器。所以你越向右拉滑块,他就会越向右旋转,直到达到 50 度的极限,向左也是一样。

所以我的问题是,我如何制作一个 UI 按钮,让玩家跳到他旋转的方向,并让他停在他着陆的地方。当然还有地面检查,所以玩家不会在空中多次跳跃

我已经尝试过一个代码,但是它让玩家继续滑动到他在地面上跳到的方向。

我也是 unity 的新手,所以如果你能给我一个示例代码或至少能帮助我的好教程,那就太好了。

编辑:我被告知我的问题太宽泛,所以这里有更多信息。

我用代码

Vector2 direction = transform.up;
计算y方向然后
rb.AddForce(direction * jumpForce, ForceMode2D.Impulse);
跳转到计算的方向

这个代码的问题是,玩家在着陆后一直在地面上滑动,所以在另一个问题中有人建议我增加地面摩擦并给了我这个代码:

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Ground"))
    {
        Vector2 counterForce = -rb.velocity.normalized * jumpForce / 2f;

        rb.AddForce(counterForce, ForceMode2D.Impulse);

        rb.velocity *= groundFriction;
    }
}

但不幸的是,这段代码也不起作用,我会说它使情况变得更糟。玩家开始向相反的方向滑动,并且滑得又快又远。

那么,有人知道更好的代码或修复此代码的方法吗?

c# unity-game-engine mobile game-development 2d-games
1个回答
0
投票

您可以采取一些步骤来使用按钮实现跳跃机制。

  1. 制作一个新的public函数(例如public void test (){})。
  2. 为玩家游戏对象添加一个 rigidbody2d
  3. 在脚本中,通过编写“public RigidBody2d rb”并将玩家游戏对象拖到脚本中弹出的字段中来引用rigidbody2d。
  4. 在您创建的公共函数中,编写 rb.AddForce(transform.up * [jumpForceNumber]);.
  5. 使用代码的地面检查部分制作一个 if 语句(假设它有效),使其即使调用该函数,玩家也必须接触地面。
  6. 将脚本附加到播放器,转到检查器中的按钮,在检查器中向下滚动,然后找到 OnClick 函数。单击加号图标,附加您的播放器游戏对象,在弹出的字段中找到您的播放器脚本的名称,然后选择您的新公共函数。

对于您说播放器“幻灯片”的位置:

在您的 rigidbody2d 中,尝试使用线性阻力(增加它)而不是施加反作用力。线性阻力,统一定义它的方式,是物体由于与周围的空气或水的摩擦而减速的趋势。如果这不起作用,则可能是整个 rigidbody2d 的问题,因为它的工作方式是在旋转方向上有更多质量,但因为我假设您冻结了 rigidbody2d 的旋转约束,它正努力通过倒在一边来回应,所以它试图作为替代移动。

备用路线:

  1. 创建一个空的游戏对象,并将玩家作为它的父级

  2. 从原始播放器中删除播放器控制器脚本、碰撞器和 rigidbody2d,并将它们添加到新的父级。

  3. 制作一个名为“RotationHandler”的新脚本,并将播放器控制器的旋转部分移动到新脚本中。将新脚本附加到原始播放器并将其连接到滑块。

  4. 在playercontroller中写这个:“private Vector3 playerRotation”在开头。然后在update()函数中写

    playerRotation = GameObject.Find("OriginalPlayerNameHere").transform.eulerAngles

  5. 回到你写“rb.AddForce(transform.up * [jumpForceNumber]);”并将“transform.up”替换为 “玩家轮换”

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.