玩家传送而不是平稳移动

时间:2019-10-14 19:28:34

标签: c# unity3d

当我第一次编码播放器的运动时,除了一件事情,一切都很好:当它与墙壁碰撞时,它会振动/抖动。所以我将原来使用的transform.Translate()替换为Rigidbody2D.Moveposition();它像魅力一样运作。但是现在,每当我移动时,它都会振动/传送,并且移动不平稳。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{


    private Rigidbody2D rigidbody2d;


    float MovementX = 0;
    float MovementY = 0;

    public float Speed = 5f;


    void Start()
    {
        rigidbody2d = GetComponent<Rigidbody2D>();


    }


    void Update()
    {




        if (MovementX < 0)
            transform.localScale = new Vector2(-1, 1);
        if (MovementX > 0)
            transform.localScale = new Vector2(1, 1);


        //transform.Translate(Movement);
        //rigidbody2d.MovePosition(Movement);
        //rigidbody2d.AddForce(Movement * Speed);



    }

    private void FixedUpdate()
    {
        MovementX = Input.GetAxis("Horizontal") * Speed * Time.deltaTime;
        MovementY = Input.GetAxis("Vertical") * Speed * Time.deltaTime;

        //MovementX = movementJoystick.Horizontal * Speed * Time.deltaTime;
        //MovementY = movementJoystick.Vertical * Speed * Time.deltaTime;

        Vector2 Movement = new Vector2(transform.position.x + MovementX, transform.position.y + MovementY);
        rigidbody2d.MovePosition(Movement);
    }


}

正如我之前说过的,玩家应该平稳移动,但不能移动。如果您愿意,我可以尝试链接一个关于游戏玩法的视频。

谢谢。

2 个答案:

答案 0 :(得分:1)

Rigidbody2D具有一个称为“速度”的属性,如果您在更新类时设置刚体的速度,则应该可以解决您的问题。代码可能看起来像这样:

rigidbody2d.velocity = new Vector2(MovementX, MovementY);;

答案 1 :(得分:0)

我通过将fixedTimestep选项设置为0.02到0.005来解决。似乎很奇怪,但是可以。