U3D急求大佬帮忙

最近重置了系统,同一套代码,同一个版本的编译器出现了及其崩溃的Bug

我在给物体制做移动时,水平增加速度,但是竖直方向上速度会出现一个固定值,而且随着AD的输入有正负区别

 

代码如下

/// <summary>
/// 控制玩家移动
/// </summary>
public class PlayerMove : MonoBehaviour
{
    //组件部件
    public State state;
    private Rigidbody2D my_Body2D;    //获取刚体组件
    private Transform my_Transform;   //获取位置组件
    [Header("控制变量")]
    public float moveSpeed;           //移动速度
    public float jumpSpeed;           //跳跃速度/高度
    public float rollSpeed;           //滚动速度
    public float roolTime;            //滚动持续时间
    private float time;               //倒计时暂存变量
    private bool ground;
    [Header("玩家状态")]
    public bool isGround;             //玩家在地面
    public bool isRoll;               //玩家在滚动

    void Start()
    {
        time = roolTime;                                //倒计时暂存变量
        my_Body2D = GetComponent<Rigidbody2D>();        //获取刚体组件
        my_Transform = GetComponent<Transform>();       //获取位置组件
    }

    void Update()
    {
        Move();
        Jump();
        Turn();
    }
    /// <summary>
    /// 移动函数
    /// </summary>
    private void Move()
    {
        //移动代码
        //移动范围数值-1,0,1  无中间插值
        //float horizontal = Input.GetAxisRaw("Horizontal");
        //移动范围-1 -- 1   有中间插值
        float horizontal = Input.GetAxis("Horizontal");
        my_Body2D.velocity = new Vector2(horizontal * moveSpeed * Time.fixedDeltaTime*50, my_Body2D.velocity.y);
        //滚动冲刺
        if (Input.GetKeyDown(KeyCode.K))
        {
            //开始滚动加速
            moveSpeed *= rollSpeed;
            //打上滚动标记
            isRoll = true;
        }
        //进入滚动,开始倒计时,滚动持续时间
        if (isRoll)
        {
            time -= Time.deltaTime;
        }
        //倒计时结束,且在滚动状态
        if (isRoll && (time < 0))
        {
            //速度初始化
            moveSpeed /= rollSpeed;
            //倒计时初始化
            time = roolTime;
            //取消滚动标记
            isRoll = false;
        }
    }
    /// <summary>
    /// 跳跃函数
    /// </summary>
    private void Jump()
    {
        if (Input.GetKeyDown(KeyCode.W) && isGround)
        {
            isGround = false;
            my_Body2D.velocity = new Vector2(my_Body2D.velocity.x, jumpSpeed * Time.fixedDeltaTime * 50);
        }
    }
    / <summary>
    /// 转向函数
    /// </summary>
    private void Turn()
    {
        //面向左
        if (Input.GetKeyDown(KeyCode.A))
        {
            my_Transform.transform.localScale = new Vector3(-1, 1, 1);
        }
        //面向右
        if (Input.GetKeyDown(KeyCode.D))
        {
            my_Transform.transform.localScale = new Vector3(1, 1, 1);
        }
    }
    /// <summary>
    /// 玩家碰撞函数,判断玩家所处位置,进行相关状态输出
    /// </summary>
    /// <param name="collision">接触的物体</param>
    public void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.tag == "Ground")
        {
            isGround = true;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_63486332/article/details/131261912