unity人物移动及二段跳的实现(优化版)


为了进行地面监测,需要将障碍物的标签修改。

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

public class PlayerControll : MonoBehaviour
{
    public float moveX = 5f;
    public float moveSpeed = 5f;
    public float rotateSpeed = 5f;
    public float jumpSpeed = 5f;
    public float teleportSpeed = 2f;
    public float faceDirction;
    // 判断是否在地面上
    public bool isGround = true;
    public int jumpCount;
    Rigidbody2D rigidbody2D;


    public bool isDoubleJump = true;
    // 物体是否在一段跳
    private bool isJump = true;

    void Start()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();
    }

    void Update()
    {


        Jump();

    }
    private void FixedUpdate()
    {
        Move();
    }
    public void Jump() 
    {
        if (Input.GetButtonDown("Jump"))
        {
            //如果物体在地面上
            if (isGround)
            {
                jumpCount = 4;
                //瞬移效果
                //transform.Translate(Vector3.right * teleportSpeed);

                // 实现跳跃效果
                rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, jumpSpeed);


                // 物体正在一段跳
                isJump = true;

                // 物体不在地面上
                isGround = false;
            }
            // 如果物体能进行二段跳&&物体不在地面上&&物体在跳跃
            else if (jumpCount != 0 && !isGround && isJump)
            {

                // 再进行一次跳跃操作
                rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, jumpSpeed);
                rigidbody2D.AddForce(Vector2.up*jumpSpeed);
                jumpCount--;

            }
        }

    }
    public void Move()
    {
        //用GetAxis可以实现惯性移动
        moveX = Input.GetAxis("Horizontal");
        //判断面向的方向

        faceDirction = Input.GetAxisRaw("Horizontal");
        //修改人物的朝向
        if (faceDirction != 0)
        {
            transform.localScale = new Vector3(faceDirction, 1, 1);
        }
        //此处是实现人物的运动
        if (moveX != 0)
        {
            rigidbody2D.velocity = new Vector2(moveX * moveSpeed, rigidbody2D.velocity.y);
        }
    }
    // 碰撞检测
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 物体碰触到地面
        if (collision.gameObject.tag == "Platform")
        {
            // 物体在地面上
            isGround = true;
            isJump = false;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值