如何让玩家在Unity中走上山

时间:2017-06-06 17:46:41

标签: c# android unity3d

嘿伙计们正在制作2D平台游戏并陷入困境。到目前为止,我已经有了长方形的景观,让玩家可以跳跃并继续前行。现在我想开始添加一些山丘。画一个三角形,左侧代表一个玩家可以走上去的小山。我已经制作了景观以及从我的其他路径复制Box Collider 2D。我想出了一种旋转对撞机的方法,使其以45度角向上升,就像三角形的斜率一样。出于某种原因,虽然当我走进三角形时,玩家并没有开始走上它。我必须跳到山上,他看起来像一个看不见的长方形!我制作了厚度为.25的对撞机,所以我知道我需要整个对撞机。知道为什么吗?我真的没有任何代码,因为我所做的一切几乎都在场景视图中。谢谢大家!

这是播放模式中的玩家,以某种力量站在山顶:

Here is the Player in Play Mode, stands on top of hill by some force

以下是场景视图中对撞机的样子。我已经把对撞机全部移动了,它仍然做同样的事情:

Here is what the collider looks like in scene view. Ive moved the collider all over and it still does the same thing

这是我的动作代码:

public class Player : MonoBehaviour {

    public float maxSpeed = 3;
    public float speed = 50f;
    public float jumpPower = 150f;

    public bool grounded;

    private Rigidbody2D rb2d;
    private Animator anim;

    void Start () {

        rb2d = gameObject.GetComponent<Rigidbody2D>();
        anim = gameObject.GetComponent<Animator>();
    }


    void Update () {

        anim.SetBool("Grounded",grounded);
        anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x));

        if (Input.GetAxis("Horizontal") < -0.1)
        {
            transform.localScale = new Vector3(-1, 1, 1);

        }
        if (Input.GetAxis("Horizontal") > 0.1)
        {
            transform.localScale = new Vector3(1, 1, 1);

        }

        if (Input.GetButtonDown("Jump") && grounded)
        {
            rb2d.AddForce(Vector2.up * jumpPower);

        }

    }

    void FixedUpdate() {

        Vector3 easeVelocity = rb2d.velocity;
        easeVelocity.y = rb2d.velocity.y;
        easeVelocity.z = 0.0f;
        easeVelocity.x *= 0.75f; 

        float h = Input.GetAxis("Horizontal");

        //Fake friction / Easing the x speed of our player
        if (grounded)
        {

            rb2d.velocity = easeVelocity;


        }



        //Moving the Player
        rb2d.AddForce((Vector2.right * speed) * h);

        //Limiting the Speed of the Player
        if (rb2d.velocity.x > maxSpeed)
        {
            rb2d.velocity = new Vector2(maxSpeed, rb2d.velocity.y);

        }

        if (rb2d.velocity.x < -maxSpeed)
        {
            rb2d.velocity = new Vector2(-maxSpeed, rb2d.velocity.y);

        }
    }
}

地面材质应用于此景观,就像其他矩形景观一样。对不起,我又是新人了,谢谢大家!

2 个答案:

答案 0 :(得分:1)

我相信你应该看看2D Plaftormer Controller tutorial series by Sebastian Lague。该系列专注于创建一个强大的2D平台控制器,它制作精良。我观看了视频并根据它们构建了一个可行的解决方案。

该系列的fourth episode专注于攀登斜坡,下一集的重点是下降。但我仍然建议你从一开始就要耐心地跟着这个系列。 Lague总是提供非常详细的解释,说明为什么他以某种方式实现事物。

答案 1 :(得分:-1)

我也是Unity的新手,但我的想法是......你的对撞机尺寸是否可能在第一帧后重置?也许你可以手动设置对撞机保持一定角度来测试它。只是一个想法!我很想知道你发现了什么。